Linux

通過反向(遠端)SSH 隧道進行 SSH 連接

  • February 12, 2021

這是我的設置:

  • 防火牆後面的 LAN 中的 Linux 機器 A。
  • 具有固定 IP 地址的 Linux 伺服器,可從 Internet 訪問。

我希望能夠通過 ssh 從遠處連接到防火牆後面的 Linux 機器。我已經閱讀了關於 ssh 隧道的資訊,我突然想到這可能是我的解決方案。我能夠在 A 和 B 之間打開一個遠端 ssh 隧道。但我不知道如何使用該隧道通過 ssh 控制 A,或者是否有可能。例如:從我的筆記型電腦通過 B 連接到 A。

這是我理解的打開隧道的命令:

ssh -R 2022:localhost:22 user@serverB

(通過 2022 埠的請求轉移到目標機器上的 22(ssh) 埠)通過 user@serverB。

打開此隧道後,通過 ssh 連接到目標電腦的操作應該是什麼?

如果我在這裡的理解有誤,請糾正我。

您指的是“SSH REMOTE FORWARDING”,並在“ man ssh ”中正確解釋了“ -R ”選項。

> man ssh
[...]
-R [bind_address:]port:host:hostport
   Specifies that the given port on the remote (server) host is to 
   be forwarded to the given host and port on the local side.
   This works by allocating a socket to listen to port on the remote 
   side, and whenever a connection is made to this port, the
   connection is forwarded over the secure channel, and a connection is 
   made to host port hostport from the local machine.
   [...]

在您的上下文中,其中:

  • 防火牆後面的 LAN 中的 Linux 機器 A (LINUX_BOX_A)。
  • 具有可從 Internet 訪問的固定 IP 的 Linux 伺服器 B (SERVER_B)

SSH 遠端轉發可用於從 SERVER_B 到達 LINUX_BOX_A。唯一的條件是:LINUX_BOX_A必須能夠通過 SSH 連接到 SERVER_B。

要實現這一目標,您需要:

  1. 在 LINUX_BOX_A 上:

LINUX_BOX_A:~ $ ssh -R 2222:localhost:22 user@SERVER_B

這將打開一個從 LINUX_BOX_A 到 SERVER_B 的 ssh 連接,該連接將用於遠端、傳入、連接。

上述 ssh 連接建立後,您可以:

  1. 在 SERVER_B 上:

SERVER_B:~ $ ssh -p 2222 user@localhost

這種在 SERVER_B 上啟動的 ssh 連接將被定向到在 localhost 上偵聽的 2222 埠,該埠…綁定到先前的 ssh 連接。所以這將是“另一個 ssh 連接中的 ssh 連接”。

一些附加說明:

  • 考慮到如果第一個 ssh 連接因任何原因超時和/或失敗(包括:由於不活動而被本地防火牆殺死),您將無法遠端轉發/遠端連接;
  • 因為讓第一個 ssh 連接長時間處於活動狀態很重要,您可能會發現在“螢幕”會話中啟動此類 ssh 很有用

最後一點:顯然,以上所有內容都有一些(可能嚴重的)安全隱患,超出了此答案的範圍。

引用自:https://serverfault.com/questions/695517