SSH Tunnel(連接埠轉送)與 SSH ProxyJump,在這種特定情況下我應該使用哪一個,Me -> JumpSever -> TargetServer

SSH Tunnel(連接埠轉送)與 SSH ProxyJump,在這種特定情況下我應該使用哪一個,Me -> JumpSever -> TargetServer

我是 SSH 隧道新手,我已閱讀OpenSSH 代理維基百科翻來覆去,還是那麼迷惘。

目標是建立一個只有 SSH 隧道(連接埠轉送)或 ProxyJump 的雙代理(不太確定我應該稱呼它們)

例如,me 192.168.1.1-->connect to--> the Jump ServerA 1.1.1.1,那麼我實際上會到達the Target ServerB 2.2.2.2,如果我使用 來設定socks5代理ServerA 1.1.1.1,我最終將得到代理ServerB's IP 2.2.2.2

我知道如何應對me >-到-> Server A,但我不知道如何處理Server A >-到-> Server B,(我的意思是,我擁有這些伺服器的所有存取權限和root權限,但我不知道如何設定。)

我學東西很慢,任何想法都會非常感激,

(如果您想為此範例發布確切的命令或方法,我不介意。這會很有幫助)

答案1

基本上要求是:

  • ServerB 只能從 ServerA 存取。您不直接連接到它。
  • ServerA 需要啟用 TCP 隧道。
  • 您需要能夠存取 ServerA。

您透過跳轉主機設定與 ServerB 的連線(在 中.ssh/config):

Host ServerB
    ProxyJump ServerA

這假設如果您輸入ssh ServerA,您將最終到達 ServerA,如果您在 ServerA 上輸入ssh ServerB,您將最終到達 ServerB。例如,名稱「ServerB」應該在 ServerA 上可以解析,但它不會在乎它是否在您這邊可以解析。這些可以是主機名稱或“slugs”(暱稱)。在後一種情況下,您可以在下列位置再次關聯它們的主機名稱或 IP 位址.ssh/config

Host ServerA
    HostName ip.add.re.ss

Host ServerB
    ProxyJump ServerA
    HostName host.na.me

您也可以指定代理主機使用哪個使用者名稱:

Host ServerA
    User proxyuser
    HostName ip.add.re.ss

Host ServerB
    ProxyJump ServerA
    HostName host.na.me

之後,您輸入ssh ServerB. OpenSSH 連接到 ServerA 並使用一些隨機連接埠透過此連線轉送到 ServerB 的位址、連接埠 22。 OpenSSH 立即連接到這個隨機轉送的連接埠(連接到 localhost,但它實際上會.ssh/known_hosts根據 HostName 中指定的名稱「ServerB」和 IP 位址(如果有)檢查其金鑰),因此您最終將直接連接到 ServerB。如果您發出“who”,它會說您是從 ServerA 位址連接的。坐在您和 ServerA 之間的任何人都無法知道您是否真的在與 ServerB 交談。

您可以使用任何 SSH 命令列選項,這些選項將用於伺服器B連接(透過轉送連接埠進行)。例如,如果您使用ssh -D 12345 user@ServerB,它將作為代理使用者連接到ServerA,並將連接埠轉送到ServerB:22,然後連接到該連接埠並以使用者身分向ServerB 進行身份驗證,並且它將在連接埠12345 上安裝SOCKS5 代理程式。該SOCKS5 的退出位址將是ServerB,例如,如果您使用該代理程式(例如在瀏覽器中),遠端方將看到您正在從 ServerB 的位址進行連線。

你可以堆疊更多的跳躍主機,它也會運作:

Host ServerB
    ProxyJump ServerA

Host ServerC
    ProxyJump ServerC

首先ssh ServerC連接到 ServerA,連接埠轉送到 ServerB:22,然後透過該轉送連接到 ServerB,另一個連接埠轉送到 ServerC,然後連接到另一個端口,最終會得到 ServerC shell。

請注意,您將被要求輸入密碼每個聯繫。這是相當麻煩的。最好設定並使用基於金鑰的身份驗證ssh-agent

相關內容