Estabelecendo uma conexão SSH entre máquinas atrás de firewalls

2

Eu tenho duas máquinas, A e C, cada uma atrás de um firewall, então elas não podem aceitar solicitações SSH de entrada na porta 22. Eu tenho uma terceira máquina, B, fora de ambos os firewalls e queria SSH de A para C usando B. Eu sou capaz de fazer o que eu acho que é chamado de um túnel SSH de C - > B assim

ssh -fNR 10000:localhost:22 -i key_file_for_B_on_C user_on_B@B

Seguindo o que parece ser quase o que eu quero neste pergunta Eu agora tento o comando:

ssh -ti key_file_for_C_on_A -l user_on_C -o "ProxyCommand ssh -ti key_file_for_B_on_A -W %h:%p user_on_B@B" -p 10000 B

Parece que não funciona, recebo o erro:

channel 0: open failed: connect failed: Connection timed out

Esta é a abordagem correta? O que eu posso estar fazendo errado?

    
por pythonic metaphor 31.08.2015 / 04:00

1 resposta

2

Eu acho que o problema com o seu exemplo são os argumentos finais; você está ssh em B, quando deveria estar listando o "destino final" , embora o host / porta encaminhado pela porta, que é a porta 10000, mas deve ser localhost , não B , como B é resolvido da perspectiva de A e a porta 10000 em B provavelmente não está aberta externamente . Por exemplo, corrigido:

ssh -ti key_file_for_C_on_A -l user_on_C -o "ProxyCommand ssh -ti key_file_for_B_on_A -W %h:%p user_on_B@B" -p 10000 localhost

Para provar isso a mim mesmo, configurei o mesmo experimento, embora um pouco mais simples, já que meu nome de usuário é o mesmo em todos os hosts e estou usando o encaminhamento de agentes; note que meu hophost (seu B ) aceita ssh em uma porta não padrão, 2222.

Em C:

ssh -fNAR 12345:localhost:22 hophost -p 2222

Então, em A:

ssh -A localhost -p 12345 -o "ProxyCommand ssh -A hophost -p 2222 nc %h %p"

Como alternativa, você pode codificar um monte disso em seu .ssh/config em A:

Host C
  HostName localhost
  Port 12345
  ForwardAgent yes
  #ProxyCommand ssh -A hophost -p 2222 nc %h %p
  ProxyCommand ssh -A hophost -p 2222 -W %h:%p
  #ProxyCommand $HOME/.ssh/proxy -w 2 -h hophost:2222 %h %p

Então o seu comando em A é simplesmente

ssh C

Observe que também incluí duas versões alternativas de ProxyCommand . O primeiro usa nc no caso de sua versão ssh ser anterior a 5.3, quando a opção -W foi adicionada. O outro usa um script de proxy que usei por um longo tempo para alternar entre alguns hosts (como neste exemplo) e use corkscrew para sair de firewalls que bloqueiam ssh de saída. Você pode ver o script ssh-proxy no meu github. Ele simplifica ~/.ssh/config entradas quando você quer usar um proxy para Host * entradas, mas eu não prometo que sempre funciona em todas as situações, como eu modifiquei com o tempo como eu precisei para situações diferentes , então qualquer uma das opções pode ser frágil ou até mesmo quebrada, mas pode ajudar.

    
por 31.08.2015 / 16:47