我在透過 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
。
但是,我無法直接從onemoregateway
to進行 ssh 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