我有兩台機器。兩者都位於 NAT 後方。我也可以從每台機器存取伺服器。有沒有辦法透過 SERVER 從 machine1 到 machine2 建立 ssh 隧道?
客戶端機器是linux mint。伺服器是 debian。我在所有機器上只有使用者存取權限
答案1
我可以看到它是如何做到的..
所以你有 3 台電腦。甲、乙、丙
A、B 位於 NAT 後方。假設B是中介
方法一
2 條隧道
因此,您可以建立從 A 到 B 的 SSH 連線(隧道 1)。從C到B(2號隧道)。然後從隧道 1 轉送到隧道 2。
電腦 A 透過 SSH -L 連接
電腦 C 透過 SSH -R 連接
-L 或 -R 決定隧道的哪一側偵聽以及隧道的哪一側轉送。
所以,除非我犯了錯誤,否則你可以做類似的事情-
A$ ssh -L 1234:127.0.0.1:2345 user@compB
C$ ssh -R 2345:127.0.0.1:3456 user@compB
但我不確定是否可以與同一個 SSH 伺服器建立兩個連接,所以嘗試這個.. 建立兩個不同的 sshd 伺服器..
編輯 CompB 上的 sshd_config,您會看到它顯示“連接埠 22”,在其下方新增一行以顯示“連接埠 222”,然後 CompB 將在兩個連接埠上執行 ssh 伺服器。
然後你可以透過兩個不同的連接埠 22 和 222 連接到 ssh 伺服器
A$ ssh -L 1234:127.0.0.1:2345 user@compB -p22
C$ ssh -R 2345:127.0.0.1:3456 user@compB -p222
連接埠 1234 是電腦 A 上連接客戶端程式的連接埠。
端口 2345 是計算機 B 上的端口,也是隧道 2 的入口
連接埠3456是您在CompC上執行伺服器程式的端口
這樣,CompA就可以透過CompB連接到CompC上的伺服器
方法2
一條隧道
一種選擇是只使用一個隧道,但這樣您只能在一半的路線上獲得加密。 5.6.7.8是CompC的IP,連接埠3456是CompC上的伺服器,連接埠1234是隧道的監聽埠。
A$ ssh -L 1234:5.6.7.8:3456 user@compB
然後在CompA上將客戶端程式連接到CompA上的1234端口,它就會全部轉到CompC上。
答案2
根據回覆巴洛普
我在 NAT 後面有 A 和 B。從 A 和 B 訪問 C
在 CI 上必須只有 ssh 存取權限。不需要其他任何東西。
在機器A上新增任務到crontab
$crontab -e
TUNCMDR='ssh -f -N -R 1144:localhost:22 Cuser@hostC'
* * * * * pgrep -f "$TUNCMDR" || ($TUNCMDR && echo "`date`: Land remote port to localhost:22" >> ~/ssh-world.log) &>/dev/null
TUNCMDL='ssh -f -N -L 1234:localhost:1143 Cuser@hostC'
* * * * * pgrep -f "$TUNCMDL" || ($TUNCMDL && echo "`date`: Forward local 1234 port to remote" >> ~/ssh-world.log) &>/dev/null
在機器 B 上將任務新增至 crontab
$crontab -e
TUNCMDR='ssh -f -N -R 1143:localhost:22 Cuser@hostC'
* * * * * pgrep -f "$TUNCMDR" || ($TUNCMDR && echo "`date`: Land remote port to localhost:22" >> ~/ssh-world.log) &>/dev/null
TUNCMDL='ssh -f -N -L 1234:localhost:1144 Cuser@hostC'
* * * * * pgrep -f "$TUNCMDL" || ($TUNCMDL && echo "`date`: Forward local 1234 port to remote" >> ~/ssh-world.log) &>/dev/null
注意:與主機 A 相比,主機 B 上的 1143 和 1144 連接埠發生了變化
在主機上A
連接到B
您運行ssh -p 1234 Buser@localhost
在主機上B
連接到A
您運行ssh -p 1234 Auser@localhost
在主機上C
連接到A
您運行ssh -p 1144 Auser@localhost
在主機上C
連接到B
您運行ssh -p 1143 Buser@localhost
可以看到正在運行的重連訊息cat ~/ssh-world.log
UPD
透過加入 ~/.ssh/config 來停止會話斷開/掛斷
Host *
ServerAliveInterval 15