Ssh
在 stunnel 上反向 ssh 隧道(或者只是反向向下 stunnel 連接)
我正在創建一個可以部署在 nat 或任何防火牆後面的安全“保管箱”,呼叫受控的可公開訪問的伺服器,然後從伺服器啟動控制。
我知道這很容易通過 ssh -R 命令完成,但是,我正在尋找能夠通過適當的 SSL/TLS 和埠 443 有效地規避 IDS/IPS 的東西。
目前,我正在執行的設置(僅限 SSL)有我的保管箱(我們將其稱為客戶端)呼叫並啟動與伺服器的 stunnel 連接。然後我可以從客戶端手動 ssh 到伺服器。
這很好,很好,但是,我需要能夠通過已建立的 stunnel 從伺服器 ssh 到客戶端。
問題:
- 我可以通過現有的 stunnel 連接(由客戶端啟動的 stunnel)直接從伺服器 ssh。這可能需要更改 stunnel 配置,我只是對應該更改的內容有點迷茫。
- 我可以通過 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,這將有助於避免混淆這兩個埠。