SSH pulando com aliases e “-F”

3

Eu tenho um servidor em uma sub-rede privada para a qual desejo conectar-me por meio de uma máquina voltada para a Internet. Existem alguns tutoriais para isso. Eu usei este: link

O problema é que ele assume que eu posso editar o arquivo ~/.ssh/config . Se eu estiver executando código no CI, prefiro usar o arquivo de configuração enviado em meu repositório e usar -F switch. Nesse caso, a estratégia acima deixa de funcionar, pois o comando ssh usado como ProxyCommand não carrega o mesmo arquivo de configuração e não conhece os aliases. O que eu fiz foi:

Host ansible                                                                    
  User ubuntu                                                                   
  Hostname xxx.compute.amazonaws.com                  

Host app                                                                        
  User ubuntu                                                                   
  Hostname 10.0.2.40                                                            
  ProxyCommand ssh -F test-ssh.cfg -W %h:%p ansible

Isso funciona, mas está um pouco sujo, já que preciso colocar o nome do arquivo no próprio arquivo e ele quebraria se alguém alterasse o nome do arquivo. Então, minha pergunta é: existe uma maneira mais limpa de criar um arquivo de configuração com aliases e ProxyCommand que poderia ser usado com -F ?

    
por zefciu 07.04.2017 / 14:05

3 respostas

4

De acordo com Na entrada SuperUser , da versão 7.3p1, existe uma diretiva Include , para que você possa criar um arquivo de configuração que inclua sua configuração "regular", mas tenha todas as entradas ProxyCommand . Dessa forma, se você especificar esse arquivo, as conexões de proxy funcionarão, se você omitir a opção -F , a configuração padrão será lida da seguinte forma:

~/.ssh/config :

Host ansible
  User ubuntu
  Hostname xxx.compute.amazonaws.com

~/.ssh/proxyconfig :

Include config

Host app
  User ubuntu
  Hostname 10.0.2.40
  ProxyCommand ssh -W %h:%p ansible

Se você tiver configurações como acima, você pode usar

ssh -F proxyconfig app

para alcançar o servidor "app".

Se você não conseguir instalar a versão mencionada no computador cliente, poderá especificar o ProxyCommand na linha de comando, sem precisar de um arquivo de configuração separado, como este:

ssh -o ProxyCommand='ssh -W %h:%p ansible' app

Como é um pouco desconfortável escrever o comando todo toda vez, você pode querer criar um alias para o comando, ou - se quiser acessar mais computadores por proxy - uma função, como esta:

function proxyssh {
    # The first argument is the 'stepping stone',
    # the second is the target to ssh into
    ssh -o proxyCommand="ssh -W %h:%p $1" $2
}

e use-o como

proxyssh ansible app
    
por 07.04.2017 / 14:49
4

Para hosts de proxy você não precisa mais de ProxyCommand . Existe uma nova opção ProxyJump , que faz o mesmo sem a necessidade de outro ssh com a configuração. Ele emitirá internamente o mesmo comando, mas também passará o argumento -F se fornecido :

Host ansible                                                                    
  User ubuntu                                                                   
  Hostname xxx.compute.amazonaws.com                  

Host app                                                                        
  User ubuntu                                                                   
  Hostname 10.0.2.40                                                            
  ProxyJump ansible

Esse recurso está disponível desde OpenSSH 7.3 .

    
por 07.04.2017 / 15:17
1

Você poderia fazer isso sem editar ~/.ssh/config usando ProxyCommand como parâmetro.

De OpenSSH 5.4 (2010-03-08) houve "modo netcat":

  • Added a 'netcat mode' to ssh(1): ssh -W host:port ... This connects stdio on the client to a single port forward on the server. This allows, for example, using ssh as a ProxyCommand to route connections via intermediate servers. bz#1618

Portanto, é possível:

ssh -o ProxyCommand="ssh -W %h:%p firewall" [email protected]

Para versões históricas, você pode usar nc externo (de um artigo do SSH ProxyCommand da Vivek Gite):

ssh -o ProxyCommand='ssh user@firewall nc 10.0.2.40 22' [email protected]

Onde

  • firewall é o servidor voltado para a Internet.
  • 10.0.2.40 é o servidor na rede local.
  • O netcat ( nc ) é usado para definir e estabelecer um canal TCP entre os servidores em sua rede local.
por 07.04.2017 / 14:48