透過 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

它工作得很好,並使用 keyfile 自動建立隧道~/.ssh/mykey


我嘗試對此多跳隧道使用類似的配置:

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

但這一次onemoregateway正在運行 ssh 1 且沒有nc可用的。我可以 sshonemoregateway並提示告訴我The only permitted commands are ssh and scp.當我嘗試按上述方式設定轉發連接時,ssh 退出並出現錯誤stdio forwarding require Protocol 2

但是,我無法直接從onemoregatewayto進行 ssh srv2,因為私鑰僅位於我的本機電腦上。為了使事情變得更加複雜,我需要一把鑰匙用於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

相關內容