É possível encadear várias conexões ssh com cada conexão especificada como um host ssh?
Eu sei que é possível usar o -W
sinalizador ou nc
fazer um segundo salto para outro nome de host ou endereço IP (veja, por exemplo,ssh através de vários hosts). Não consegui fazer isso funcionar da maneira que desejo por alguns motivos. Primeiro, para o segundo salto, quero usar um arquivo de chave armazenado no host intermediário e não vejo uma maneira de especificar isso com -W
ou nc
. Em segundo lugar, o destino final possui um endereço IP variável. Para lidar com isso, tenho um script em execução no destino que grava seu endereço IP em um arquivo armazenado no host intermediário e, em seguida, um script ( look_up_ip.sh
) no host intermediário que imprime esse endereço IP. No host intermediário, tenho esta entrada em ~/.ssh/config
:
Host destination
HostName destination
User dest_user
IdentityFile ~/.ssh/destination
PreferredAuthentications publickey
ProxyCommand nc $(look_up_ip.sh %h) %p
o que me permite conectar ao destino a partir do intermediário com apenas ssh destination
.
O que eu gostaria de fazer é colocar algo ~/.ssh/config
na primeira máquina para definir o host de destino (como, por exemplo, hopped_destination
) para que o ssh se conecte primeiro ao host intermediário e depois faça ssh destination
a partir daí, para que eu possa fazer isso ssh hopped_destination
a partir da primeira máquina e faça com que o intermediário ~/.ssh/config
lide com o arquivo de identidade e a pesquisa de IP para o destino. Parte da razão pela qual desejo isso é que, em última análise, desejo ser capaz de me conectar ao destino com VNC usando vncviewer -via destination localhost:0
e quero que a conexão não seja acessível a outros usuários no host intermediário (conforme implícito em partes da resposta aceita para esta pergunta:https://superuser.com/questions/96489/an-ssh-tunnel-via-multiple-hops). Eu esperava que fosse possível colocar ssh
na ProxyCommand
primeira máquina algo como:
Host destination
ProxyCommand ssh -t intermediate_user@intermediate_host ssh destination
mas não encontrei opções que permitam que algo assim funcione.
Eu também gostaria de receber sugestões sobre melhores maneiras de fazer isso (existe uma maneira de me livrar do que nc
ProxyCommand
estou usando agora?). Eu provavelmente poderia elaborar um script para executar o comando VNC mais diretamente, mas isso pode ser mais complicado (lidar com o encaminhamento de porta diretamente e fechar as coisas na saída e não abrir uma porta para todos os usuários).
Responder1
exemplo do meu arquivo de configuração ssh;
Host vmike2-squid-cache
User mike
ProxyCommand ssh -q -A -x ???.???.???.??? -W %h:22
(a única coisa que mudei foi o ip)