¿Cómo encadenar comandos ssh en múltiples saltos?

¿Cómo encadenar comandos ssh en múltiples saltos?

¿Es posible encadenar varias conexiones ssh junto con cada conexión especificada como host ssh?

Sé que es posible usar la -Wbandera o nchacer un segundo salto a otro nombre de host o dirección IP (ver, por ejemplo,ssh a través de múltiples hosts). No he podido hacer que esto funcione como quiero por un par de razones. Primero, para el segundo salto, quiero usar un archivo de clave almacenado en el host intermedio y no veo una manera de especificarlo con -Wo nc. En segundo lugar, el destino final tiene una dirección IP variable. Para solucionar esto, tengo un script ejecutándose en el destino que escribe su dirección IP en un archivo almacenado en el host intermedio y luego un script ( look_up_ip.sh) en el host intermedio que imprime esta dirección IP. En el host intermedio, tengo esta entrada en ~/.ssh/config:

Host destination
 HostName destination
 User dest_user
 IdentityFile ~/.ssh/destination
 PreferredAuthentications publickey
 ProxyCommand nc $(look_up_ip.sh %h) %p

lo que me permite conectarme al destino desde el intermedio con solo ssh destination.

Lo que me gustaría hacer es poner algo en ~/.ssh/configla primera máquina para definir el host de destino (como, por ejemplo, hopped_destination) para que ssh se conecte primero al host intermedio y luego lo haga ssh destinationdesde allí, de modo que pueda hacerlo ssh hopped_destinationdesde la primera máquina. y tener el trato intermedio ~/.ssh/configcon el archivo de identidad y la búsqueda de IP para el destino. Parte de la razón por la que quiero esto es que, en última instancia, quiero poder conectarme al destino con VNC usando vncviewer -via destination localhost:0y quiero que la conexión no sea accesible para otros usuarios en el host intermedio (como se implica en partes de la respuesta aceptada a esta pregunta:https://superuser.com/questions/96489/an-ssh-tunnel-via-multiple-hops). Esperaba que fuera posible instalarlo sshen ProxyCommandla primera máquina con algo como:

Host destination
 ProxyCommand ssh -t intermediate_user@intermediate_host ssh destination

pero no he encontrado opciones que permitan que algo como esto funcione.

También agradecería cualquier sugerencia sobre mejores formas de hacer esto (¿hay alguna manera de deshacerme del que nc ProxyCommandestoy usando ahora?). Probablemente podría elaborar un script para ejecutar el comando VNC de manera más directa, pero eso podría ser más complicado (manejar el reenvío de puertos directamente y asegurarme de cerrar las cosas al salir, y asegurarme de no abrir un puerto para todos los usuarios).

Respuesta1

ejemplo de mi archivo de configuración ssh;

Host vmike2-squid-cache
  User mike
  ProxyCommand ssh -q -A -x ???.???.???.??? -W %h:22

(lo único que cambié fue la ip)

información relacionada