Ssh

在 stunnel 上反向 ssh 隧道(或者只是反向向下 stunnel 連接)

  • September 16, 2015

我正在創建一個可以部署在 nat 或任何防火牆後面的安全“保管箱”,呼叫受控的可公開訪問的伺服器,然後從伺服器啟動控制。

我知道這很容易通過 ssh -R 命令完成,但是,我正在尋找能夠通過適當的 SSL/TLS 和埠 443 有效地規避 IDS/IPS 的東西。

目前,我正在執行的設置(僅限 SSL)有我的保管箱(我們將其稱為客戶端)呼叫並啟動與伺服器的 stunnel 連接。然後我可以從客戶端手動 ssh 到伺服器。

這很好,很好,但是,我需要能夠通過已建立的 stunnel 從伺服器 ssh 到客戶端。

問題:

  1. 我可以通過現有的 stunnel 連接(由客戶端啟動的 stunnel)直接從伺服器 ssh。這可能需要更改 stunnel 配置,我只是對應該更改的內容有點迷茫。
  2. 我可以通過 stunnel 將客戶端的 SSH 隧道反向到伺服器,以便伺服器有一個本地埠可以 ssh 回客戶端嗎?如果是這樣,我無法讓 ssh -R 命令正常工作,因為我認為我最終會創建一個循環。

以下是我的 stunnel 配置:

伺服器:

cert=/path/to/cert.pem
pid=/tmp/stunnel.pid
[ssh]
accept = 443
connect = 127.0.0.1:22

客戶:

cert=/path/to/cert.pem
pid=/tmp/stunnel.pid
client=yes
[ssh]
accept=2200
connect=<serverpubip>:443

範例 SSH 命令嘗試通過 stunnel 連接從客戶端到伺服器並反向:

ssh -i /path/to/cert -R 2200:localhost:2200 -p 2200 admin@localhost -f -N

請記住,要求是只有客戶端才能呼叫伺服器來啟動初始連接(stunnel),並且流量必須通過格式良好的 SSL/TLS 加密。我還需要獲得從伺服器到客戶端的 shell 訪問權限。提前致謝!

更新:

它最終成為一個糟糕的 ssh 命令。對我有用的 ssh 命令是:

ssh -i /path/to/cert -R 2201:localhost:22 -p 2200 admin@localhost -f -N

我認為所需要的只是在您的 ssh 命令中更改-R 2200:localhost:2200為。-R 2200:localhost:22

就目前而言,您將伺服器上的埠 2200 連接回客戶端上的埠 2200。是的,這會創建一個轉發循環,因為 client:2200 通過隧道返回伺服器。

假設客戶端上的 ssh 在埠 22 上執行,則將-R 2200:localhost:22伺服器上的埠 2200 連接到客戶端上的 ssh。

為了更清楚地說明這一點,我建議選擇一個不同的埠號來從伺服器反向隧道:例如,-R 2201:localhost:22. 這樣您就不會在兩台主機上使用埠 2200,這將有助於避免混淆這兩個埠。

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