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.