El salto de proxy en línea ssh usando claves no funciona

El salto de proxy en línea ssh usando claves no funciona

Necesito establecer una conexión con un servidor remoto mediante un salto de proxy. Estoy intentando usar el indicador -J para hacer eso. Entiendo que la sintaxis se ve así:

ssh -J A B

Pero necesito usar archivos clave para ambas conexiones. Así que probé esto:

ssh -J -i /path/proxy.pem user@proxy_host -i /path/target.pem user@target_host

Obviamente no funciona, me estoy poniendo

option requires an argument -- i
usage: ssh [-46AaCfGgKkMNnqsTtVvXxYy] [-b bind_address] [-c cipher_spec]
           [-D [bind_address:]port] [-E log_file] [-e escape_char]
           [-F configfile] [-I pkcs11] [-i identity_file]
           [-J [user@]host[:port]] [-L address] [-l login_name] [-m mac_spec]
           [-O ctl_cmd] [-o option] [-p port] [-Q query_option] [-R address]
           [-S ctl_path] [-W host:port] [-w local_tun[:remote_tun]]
           [user@]hostname [command]
ssh_exchange_identification: Connection closed by remote host

¿Cuál es la sintaxis en línea correcta en este caso, sin editar la configuración de ssh? En este caso, no hay diferencia en qué servidor se almacenan las claves.

Respuesta1

Entiendo que la sintaxis se ve así:

ssh -J A B

Sí, pero esa no es toda la historia. -Jno es un indicador independiente: no le permite simplemente especificar dos conjuntos independientes de opciones de conexión en la misma línea de comando, como está intentando hacer.

En cambio, la -Jbandera toma el nombre del host intermedio.como parámetro, así como -i <keyfile>siempre vamos juntos, -J <proxy>también debemos permanecer juntos.

E incluso si usa esta opción, la sintaxis general de 'ssh' no cambia; todavía no hay agrupación de qué opciones pertenecen al host A y cuáles pertenecen al host B. Si tiene dos opciones '-i' como esa, SSH solo lo intentaréambosclaves al realizar cada una de las dos conexiones.

Sin embargo, la última parte no debería ser un problema, ya que cada servidor simplemente indicará que no acepta la clave y SSH probará con otra. Entonces lo siguiente debería funcionar:

ssh -J user@proxy_host -i /path/proxy.pem -i /path/target.pem user@target_host
    └────────────────┘ └────────────────┘ └─────────────────┘

Pero si a uno de los hosts no le gusta el hecho de que se estén probando varias claves, deberá traducir -J a ProxyCommand de formato largo:

ssh -o ProxyCommand="ssh -i /path/proxy.pem -W %h:%p user@proxy_host" -i /path/target.pem user@target_host

información relacionada