如何在多個躍點上連結 ssh 指令?

如何在多個躍點上連結 ssh 指令?

是否可以將多個 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)

相關內容