Como encadear comandos ssh em vários saltos?

Como encadear comandos ssh em vários saltos?

É possível encadear várias conexões ssh com cada conexão especificada como um host ssh?

Eu sei que é possível usar o -Wsinalizador ou ncfazer 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 -Wou 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/configna 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 destinationa partir daí, para que eu possa fazer isso ssh hopped_destinationa partir da primeira máquina e faça com que o intermediário ~/.ssh/configlide 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:0e 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 sshna ProxyCommandprimeira 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 ProxyCommandestou 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)

informação relacionada