我在通过 ssh1 服务器建立隧道时遇到了问题。这是在客户的机器上,他们不会更新到 ssh2。
背景介绍:我可以成功通过客户的网关建立隧道
localhost -> gateway.customer.example.com -> srv.customer.internal
使用此配置
Host gateway
Hostname gateway.customer.example.com
IdentityFile ~/.ssh/mykey
...
Host srv-tunnel
ProxyCommand ssh gateway -W srv.customer.internal:22
IdentityFile ~/.ssh/mykey
...
然后简单地
$ ssh srv-tunnel
它运行良好并使用密钥文件自动建立隧道~/.ssh/mykey
。
我尝试对此多跳隧道使用类似的配置:
localhost -> gateway.customer.example.com
|
v
onemoregateway.customer.internal -> srv2.customer.internal
但这次onemoregateway
正在运行 ssh 1 并且没有nc
可用的。我可以 ssh 到,onemoregateway
并且提示告诉我The only permitted commands are ssh and scp.
当我尝试设置如上所述的转发连接时,ssh 会退出并显示错误stdio forwarding require Protocol 2
。
但是,我无法直接从 sshonemoregateway
到srv2
,因为私钥只在我的本地机器上。为了使事情变得更加复杂,我需要一个密钥用于gateway
,以及另一个密钥用于onemoregateway
和srv2
。
那么,我怎样才能通过隧道到达srv2
?
我觉得这一定是可能的,因为我的同事在 Windows 上使用 Putty + Pageant 做到了,但我在 Linux 上
答案1
好的,我找到了一种方法,但似乎没有办法使隧道变得透明。
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
...
现在我要做的
$ ssh tunnel-to-srv2
最后,在一个单独的终端上*
$ ssh srv2
*我找不到将隧道 ssh 进程发送到后台的方法,甚至没有-fNT
编辑:事实证明,onemoregateway
确实有nc
,我可以运行它,但我需要使用完整路径/bin/nc
所以,毕竟我有这个配置
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
...
我只需要运行就可以实现透明隧道跳跃
$ ssh srv2