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 oonemoregateway
está executando o ssh 1 e não tem nc
disponível. Posso fazer ssh onemoregateway
e 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 onemoregateway
to srv2
, porque a chave privada está apenas na minha máquina local. Para complicar ainda mais as coisas, preciso de uma chave para gateway
e outra chave para onemoregateway
e 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 onemoregateway
realmente existe nc
e 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