是否可以將多個 ssh 連線與指定為 ssh 主機的每個連線連結在一起?
我知道可以使用該-W
標誌或nc
進行第二跳到另一個主機名稱或 IP 位址(參見,例如,透過多個主機進行 ssh)。由於幾個原因,我無法讓它按照我想要的方式工作。首先,對於第二跳,我想使用儲存在中間主機上的金鑰文件,但我沒有找到使用 或 來指定它的-W
方法nc
。其次,最終目的地有一個可變的IP位址。為了解決這個問題,我在目標上運行一個腳本,將其 IP 位址寫入儲存在中間主機上的文件,然後look_up_ip.sh
在中間主機上執行一個腳本 ( ) 列印該 IP 位址。在中間主機上,我有以下條目~/.ssh/config
:
Host destination
HostName destination
User dest_user
IdentityFile ~/.ssh/destination
PreferredAuthentications publickey
ProxyCommand nc $(look_up_ip.sh %h) %p
這使我能夠從中間連接到目的地ssh destination
。
我想做的是~/.ssh/config
在第一台機器上放置一些內容來定義目標主機(例如hopped_destination
),以便 ssh 首先連接到中間主機,然後ssh destination
從那裡執行操作,這樣我就可以ssh hopped_destination
從第一台機器執行操作並讓中間~/.ssh/config
處理身分檔案和目標IP 查找。我想要這個的部分原因是我最終希望能夠使用 VNC 連接到目的地vncviewer -via destination localhost:0
,並且我希望中間主機上的其他用戶無法訪問該連接(如已接受答案的部分內容所暗示的那樣)對於這個問題:https://superuser.com/questions/96489/an-ssh-tunnel-via-multiple-hops)。我希望可以在第一台機器上安裝ssh
以下ProxyCommand
內容:
Host destination
ProxyCommand ssh -t intermediate_user@intermediate_host ssh destination
但我還沒有找到允許這樣的事情工作的選項。
我也歡迎任何有關更好方法的建議(有沒有辦法擺脫nc
ProxyCommand
我現在使用的?)。我可能可以編寫一個腳本來更直接地執行 VNC 命令,但這可能會更複雜(直接處理連接埠轉送並確保在退出時關閉所有內容,並確保不為所有使用者開啟連接埠)。
答案1
我的 ssh 設定檔中的範例;
Host vmike2-squid-cache
User mike
ProxyCommand ssh -q -A -x ???.???.???.??? -W %h:22
(我唯一改變的是ip)