Establecer un túnel ssh de múltiples saltos a través de un servidor ssh1

Establecer un túnel ssh de múltiples saltos a través de un servidor ssh1

Tengo problemas para realizar un túnel a través de un servidor ssh1. Esto está en la máquina de un cliente y no, no actualizarán a ssh2.


Un poco de historia: puedo hacer un túnel con éxito a través de la puerta de enlace del cliente

localhost -> gateway.customer.example.com -> srv.customer.internal

usando esta configuración

Host gateway
    Hostname gateway.customer.example.com
    IdentityFile ~/.ssh/mykey
    ...

Host srv-tunnel
    ProxyCommand ssh gateway -W srv.customer.internal:22
    IdentityFile ~/.ssh/mykey
    ...

y luego simplemente

$ ssh srv-tunnel

que funciona muy bien y establece el túnel automáticamente, utilizando el archivo de claves ~/.ssh/mykey.


Intenté usar una configuración similar para este túnel de múltiples saltos:

localhost -> gateway.customer.example.com
                |
                v
             onemoregateway.customer.internal -> srv2.customer.internal

pero esta vez elonemoregatewayestá ejecutando ssh 1 y no tiene ncdisponible. Puedo enviar ssh onemoregatewayy el mensaje me dice que The only permitted commands are ssh and scp.cuando intento configurar una conexión de reenvío como se indica arriba, ssh sale con un error stdio forwarding require Protocol 2.

Sin embargo, no puedo hacer ssh directamente desde onemoregatewayto srv2, porque la clave privada solo está en mi máquina local. Para complicar aún más las cosas, necesito una clave para gatewayy otra clave para onemoregatewayy srv2.

Entonces, ¿cómo puedo hacer un túnel hasta srv2?

Siento que debe ser posible de alguna manera, ya que mis colegas lo hicieron usando Putty+Pageant en Windows, pero yo estoy en Linux.

Respuesta1

Ok, encontré una manera de hacerlo, pero parece que no hay manera de hacer que el túnel sea transparente.

Host gateway
    Hostname gateway.customer.example.com
    IdentityFile ~/.ssh/mykey
    ...

Host tunnel-to-srv2
    ProxyCommand ssh gateway -W onemoregateway.customer.internal
    IdentityFile ~/.ssh/myotherkey
    Protocol 1
    LocalForward 10022 srv2.customer.internal:22
    ...

Host srv2
    Hostname localhost
    Port 10022
    IdentityFile ~/.ssh/myotherkey
    Protocol 1
    ...

Y ahora tengo que hacer

$ ssh tunnel-to-srv2

y, finalmente, en una terminal separada*

$ ssh srv2

* No puedo encontrar una manera de enviar el proceso ssh de tunelización a un segundo plano, ni siquiera con-fNT


Editar: resulta que onemoregatewaysí lo tiene ncy puedo ejecutarlo, pero necesito usar la ruta completa/bin/nc

Entonces, después de todo tengo esta configuración.

Host gateway
    Hostname gateway.customer.example.com
    IdentityFile ~/.ssh/mykey
    ...

Host tunnel-to-srv2
    ProxyCommand ssh gateway -W onemoregateway.customer.internal
    IdentityFile ~/.ssh/myotherkey
    Protocol 1
    ...

Host srv2
    ProxyCommand ssh tunnel-to-srv2 /bin/nc srv2.customer.internal 22
    IdentityFile ~/.ssh/myotherkey
    Protocol 1
    ...

y obtengo un salto de túnel transparente con solo ejecutar

$ ssh srv2

información relacionada