使用 PuTTY 進行多跳隧道

使用 PuTTY 進行多跳隧道

如何為 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"

更多闡述和注意事項:

  1. 使用-t(在兩個連結中)以便您的終端訊號工作(因為您沒有在跳轉主機上呼叫遠端 shell)

  2. 純文字密碼(在命令列/PuTTY 配置中)何時-l user -pw password使用(如果使用 PuTTY 佔位符 %proxypass 並不重要)。

    • 用於-i指定沒有密碼的私鑰(因為 PuTTY 使用標準 I/O,您將無法輸入它)
    • 或使用-agent選美中的按鍵
    • -a不需要代理轉送 ( ),因為 plink 在本地運行。
  3. 第一次從命令列執行 plink,查看是否沒有其他問題。通常你會得到一個“傳入封包在解密時出現亂碼" 錯誤,如果 plink 要求您匯入 jHost 的 SSH 金鑰。

  4. jHost注意和的用法jIPjHost我的意思是邏輯主機名用於 plink 的「known_hosts」鍵查找(Windows 註冊表中的 PuTTY 儲存空間)。jIP是從目前躍點可存取的下一躍點的名稱/IP。 (您通常無法從其他網路連線重新連線jHost。)

    • 外部 plink 可以簡單地使用,jHost2因為連接是代理的並且根本沒有 DNS 查找。
    • 內部 plink 必須使用 來jIP1連接、-loghost jHost1進行本地密鑰查找以及-nc jIP2:jPort2連接到下一跳的 NetCat。
  5. 如果您需要使用TCP轉送在目的地(必須允許)上,您唯一需要做的就是在 PuTTY 中配置它,就好像根本沒有跳轉主機一樣。這是因為到目的地的 SSH 連線透過 jHost2 建立隧道,而該連線又透過 jHost1,而跳轉主機無法洞察隧道。

    • 與僅透過 sshing 跳轉主機並再次執行 ssh 到達目的地相反,您需要使用<enter>~C<enter>序列轉義到跳轉主機的 ssh 用戶端並使用-L/-R命令動態新增隧道。

無 TCP 轉送

plink -ncssh -W等效)是一個本地代理,它透過跳轉主機 TCP 轉發其標準 I/O。如果您無法在跳轉主機上允許 TCP 轉發,作為一種有限的解決方法,您可以透過 ssh 登入jHost1並在「連線 -> SSH -> 遠端命令」中使用ssh user2@jHost2 -t ssh user@Destination,無需代理設定。

這樣,您就可以在跳轉主機上啟動新的 ssh 用戶端(且必須存在金鑰/重新輸入密碼/代理轉發,設定/known_hosts 重複...)。

相關內容