Estabelecendo um túnel SSH multi-hop através de um servidor SSH1

Estabelecendo um túnel SSH multi-hop através de um servidor SSH1

Estou tendo problemas para encapsular um servidor ssh1. Isso está na máquina de um cliente e não, eles não atualizarão para ssh2.


Algumas informações básicas: posso criar um túnel com sucesso através do gateway do cliente

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

usando esta configuração

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

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

e então simplesmente

$ ssh srv-tunnel

que funciona muito bem e estabelece o túnel automaticamente, usando o keyfile ~/.ssh/mykey.


Tentei usar uma configuração semelhante para este túnel multi-hop:

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

mas desta vez oonemoregatewayestá executando o ssh 1 e não tem ncdisponível. Posso fazer ssh onemoregatewaye o prompt me diz que The only permitted commands are ssh and scp.quando tento configurar uma conexão de encaminhamento como acima, o ssh sai com error stdio forwarding require Protocol 2.

No entanto, não consigo fazer ssh diretamente de onemoregatewayto srv2, porque a chave privada está apenas na minha máquina local. Para complicar ainda mais as coisas, preciso de uma chave para gatewaye outra chave para onemoregatewaye srv2.

Então, como posso fazer um túnel para srv2?

Eu sinto que isso deve ser possível de alguma forma, já que meus colegas fizeram isso usando Putty+Pageant no Windows, mas estou no Linux

Responder1

Ok, encontrei uma maneira de fazer isso, mas parece que não há como tornar o tunelamento 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
    ...

E agora eu tenho que fazer

$ ssh tunnel-to-srv2

e, finalmente, em um terminal separado*

$ ssh srv2

* Não consigo encontrar uma maneira de enviar o processo ssh de tunelamento para segundo plano, nem mesmo com-fNT


Editar: acontece que onemoregatewayrealmente existe nce posso executá-lo, mas preciso usar o caminho completo/bin/nc

Então, afinal eu tenho essa configuração

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
    ...

e consigo saltar por túneis transparentes apenas correndo

$ ssh srv2

informação relacionada