Ssh

為反向隧道 + 本地轉發創建 ssh 配置

  • June 28, 2020

我正在嘗試為以下場景創建一個 ~/.ssh/config 條目:

我在某個地方的專用網路中有一個 linux機器,一個可以從任何地方訪問的****vps 伺服器和我的本地 macbook

linux 盒子在防火牆後面,但我仍然應該能夠從我的本地 macbook SSH 進入盒子。


我目前有效的解決方案如下:

linux 機器通過以下方式啟動到 vps 的反向隧道:

ssh -R 15000:localhost:22 vps-user@vps

然後從我的本地 macbook 我通過以下方式啟動到 vps 的隧道:

ssh -L 12345:localhost:1500 vps-user@vps

然後我啟動另一個 ssh 命令,從那裡我可以直接 ssh 進入 linux 盒子,否則它會隱藏在防火牆等後面:

ssh linuxbox-user@localhost -p 12345

所以首先,這一切都非常可靠(如果你有任何更簡單的方法可以做到這一點,請告訴我——在 macbook 方面看起來很麻煩)。

我將如何創建一個 ~/.ssh/config 條目,在最好的情況下,只需編寫:

ssh linuxbox

並完成它?

我試過使用LocalForward選項,它允許我至少為*ssh -L …*命令創建一個別名,但它仍然需要第二個 ssh 命令。

我也嘗試過ProxyCommand選項,但沒有運氣,也許只是配置錯誤?

最簡單的方法可能是避免本地轉發,這在您的情況下似乎是不必要的,並利用該ProxyJump指令,該指令允許您指定一個或多個跳轉代理(即您連接到和從中到達的一個或多個中間主機)您的目標主機)。

您將需要兩個連接:

  1. 您已經建立的遠端轉發,從您的 linux 機器到 vps:
ssh -R 15000:localhost:22 vps-user@vps

我假設您可以連接到埠上的 vps 22(正如您的問題中暗示的那樣)。

這將讓 vps 將它在埠上接收到的連接轉發到您的 linux機器15000的埠。22 2. 從本地 MacBook 到 vps 的連接:

ssh -J vps-user@vps -p 15000 linuxbox-user@localhost

-J是指定ProxyJump指令的快捷方式(請參閱手冊頁ssh(1))。

同樣,這暗示您可以連接到 port 上的 vps 22

此命令會將您的本地 MacBook 連接到22vps 上的埠,然後從那裡連接15000到同一 vps 上的埠(linux 機器正在偵聽),讓您無需進一步連接即可登錄到您的 linux 機器。

相應的.ssh/config文件將是:

  • 在你的 linux 機器上:
Host vps
   RemoteForward 15000 localhost:22
   User          vps-user

這使您只需鍵入:

ssh vps
  • 在本地 MacBook 上:
Host linuxbox
   ProxyJump vps-user@vps
   Hostname  localhost
   Port      15000
   User      linuxbox-user

這使您只需要發布:

ssh linuxbox

如果您正在使用公鑰身份驗證(正如您可能正在做的那樣,至少允許遠端轉發的無人值守設置),您還可以將IdentityFile指令添加到您的兩個.ssh/config文件中,以消除輸入密碼的需要。


如果滿足一些條件,你也許還可以將本地 MacBook 直接連接到15000vps 上的埠,從而避免本地轉發或代理跳轉的需要。即,條件是:

  1. vps 上的埠15000沒有被防火牆過濾。
  2. GatewayPorts yessshdvps 的配置中設置(通常在 中/etc/ssh/sshd_config)。

此設置預設no並確定遠端轉發是否可以將偵聽埠綁定到環回之外的其他地址(因此,IP 地址不是127.0.0.1::1)。有關詳細資訊,請參閱手冊頁sshd_config(5)

在這種情況下,您只需要以下兩個命令:

  1. 從你的 linux 機器到 vps 的反向轉發(注意*:前面的遠端埠,它代表“監聽任何地址”):
ssh -R *:15000:localhost:22 vps-user@vps
  1. 從 MacBook 到 vps 的簡單連接:
ssh -p 15000 -l linuxbox-user vps

翻譯成以下.ssh/config文件:

  • 在您的 linux 機器上(再次注意*:前面的遠端埠):
Host vps
   RemoteForward *:15000 localhost:22
   User          vps-user
  • 在本地 MacBook 上:
Host linuxbox
   Hostname  vps
   Port      15000
   User      linuxbox-user

但是請注意,這樣你會將你的 linux 機器暴露在網際網路上,這很可能是你不想要的。

引用自:https://unix.stackexchange.com/questions/498169