
如何為 3 跳 SSH 隧道連線設定 Putty?我知道如何為 2 跳 SSH 隧道連接配置 Putty,但現在我正在尋找一種用 3 跳配置它的方法。有人可以向我解釋我們如何實現它的程式嗎?
對於兩跳,我遵循以下方法。
Windows 10 (Putty) --> Linux 機器1 (192.168.1.100) --> Linux 機器2 (192.168.1.150)
- 在會話視窗中給予目標位址 (192.168.1.150) 和連接埠 22。
- 在代理選項中,我給了中間伺服器IP(192.168.1.100)和連接埠22。
- 另外,對於 telnet 命令,我給了以下內容。
plink -agent -l %user %proxyhost -nc %主機:%連接埠
上述設定適用於 2 跳。但現在我的要求是 3 跳 SSH 隧道。如何修改目前的一跳並新增 1 跳?
答案1
目前尚不清楚您是否只想連接到與 Linux 機器 1/2 位於同一網路上的其他機器,或者是否需要跳到它們之外的另一個網路(例如 172.22.1.x 上的機器 4)。
如果您只是嘗試存取與 Linux 計算機 1/2 位於同一 192.168.1.x 網路上的另一台計算機,請使用實際的SSH 隧道(可在 Putty 的Connection -> SSH -> Tunnels
菜單下找到)。您可以根據需要設定通往任意數量機器的多個隧道。
如果您實際上嘗試存取第三個網絡,則可以開啟另一個 Putty 實例,該實例透過原始 Putty 實例上定義的隧道進行連接。
- 在 Putty 中定義一個隧道,將本機電腦上的連接埠(例如 2222)轉送到 Linux 電腦上的連接埠 222
- 然後在 Windows 電腦上開啟另一個使用該隧道的 Putty 實例(即連接到 Localhost:2222)並定義一個新隧道以將其他連接埠(例如 2223)轉送到 Machine4 上的連接埠 22(您的第三跳)。
- 再開啟一個 Putty 實例並連接到 Localhost:2223 以存取 Machine4
我只用過 2 個躍點來完成此操作,所以我不知道它的性能如何。這不是一個理想的解決方案,但如果這是您唯一的選擇,它可能會起作用。
編輯:如果您不限於 Windows/Putty,這個(透明多跳 SSH)可能會做你想做的事。如果您僅限於 Windows,西格文可能有一些更靈活的SSH工具。
答案2
使用 PuTTY 進行多跳隧道
PuTTY -> jHost1 (jIP1) -> jHost2 (jIP2) -> 目標 (dIP)
快速回答:
您的方法是正確的,只需使用 plink to jHost1 作為 plink to jHost2 的本地代理:
plink user2@jHost2 -nc dIP:dPort -proxycmd "plink user1@jIP1 -loghost jHost1 -nc jIP2:jPort2"
更多闡述和注意事項:
使用
-t
(在兩個連結中)以便您的終端訊號工作(因為您沒有在跳轉主機上呼叫遠端 shell)有純文字密碼(在命令列/PuTTY 配置中)何時
-l user -pw password
使用(如果使用 PuTTY 佔位符 %proxypass 並不重要)。- 用於
-i
指定沒有密碼的私鑰(因為 PuTTY 使用標準 I/O,您將無法輸入它) - 或使用
-agent
選美中的按鍵 -a
不需要代理轉送 ( ),因為 plink 在本地運行。
- 用於
第一次從命令列執行 plink,查看是否沒有其他問題。通常你會得到一個“傳入封包在解密時出現亂碼" 錯誤,如果 plink 要求您匯入 jHost 的 SSH 金鑰。
jHost
注意和的用法jIP
。jHost
我的意思是邏輯主機名用於 plink 的「known_hosts」鍵查找(Windows 註冊表中的 PuTTY 儲存空間)。jIP
是從目前躍點可存取的下一躍點的名稱/IP。 (您通常無法從其他網路連線重新連線jHost
。)- 外部 plink 可以簡單地使用,
jHost2
因為連接是代理的並且根本沒有 DNS 查找。 - 內部 plink 必須使用 來
jIP1
連接、-loghost jHost1
進行本地密鑰查找以及-nc jIP2:jPort2
連接到下一跳的 NetCat。
- 外部 plink 可以簡單地使用,
如果您需要使用TCP轉送在目的地(必須允許)上,您唯一需要做的就是在 PuTTY 中配置它,就好像根本沒有跳轉主機一樣。這是因為到目的地的 SSH 連線透過 jHost2 建立隧道,而該連線又透過 jHost1,而跳轉主機無法洞察隧道。
- 與僅透過 sshing 跳轉主機並再次執行 ssh 到達目的地相反,您需要使用
<enter>~C<enter>
序列轉義到跳轉主機的 ssh 用戶端並使用-L
/-R
命令動態新增隧道。
- 與僅透過 sshing 跳轉主機並再次執行 ssh 到達目的地相反,您需要使用
無 TCP 轉送
plink -nc
(ssh -W
等效)是一個本地代理,它透過跳轉主機 TCP 轉發其標準 I/O。如果您無法在跳轉主機上允許 TCP 轉發,作為一種有限的解決方法,您可以透過 ssh 登入jHost1
並在「連線 -> SSH -> 遠端命令」中使用ssh user2@jHost2 -t ssh user@Destination
,無需代理設定。
這樣,您就可以在跳轉主機上啟動新的 ssh 用戶端(且必須存在金鑰/重新輸入密碼/代理轉發,設定/known_hosts 重複...)。