通过 ssh1 服务器建立多跳 ssh 隧道

通过 ssh1 服务器建立多跳 ssh 隧道

我在通过 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

但是,我无法直接从 sshonemoregatewaysrv2,因为私钥只在我的本地机器上。为了使事情变得更加复杂,我需要一个密钥用于gateway,以及另一个密钥用于onemoregatewaysrv2

那么,我怎样才能通过隧道到达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

相关内容