Ssh

將遠端 tcp 埠轉發到本地埠

  • September 25, 2022

我有以下設置: 設置圖

該設備不斷嘗試連接到特定已知埠上的遠端伺服器。

在遠端伺服器上,除了打開的 TCP 埠之外什麼都沒有。

我想將遠端伺服器的埠轉發到我的電腦並打開一個 TCP 伺服器來讀取數據。

最終,我想使用 Python 來實現這一點,

但與此同時,我正在嘗試使用 ssh 來執行此操作:ssh -N -R 10000:localhost:10000 username@hostname

並且在我這邊(我的電腦),我試圖打開一個套接字(使用 python)來收聽10000埠,嘗試打開Hercules模擬TCP伺服器,但沒有收到任何數據。

顯然,缺少了什麼,它是什麼?

ps 在遠端伺服器上打開 TCP 伺服器將獲取數據,

但我需要控制來自 My Pc 的連接。

以下是關於-Rinssh手冊頁的相關部分:

-R [bind_address:]port:host:hostport

$$ … $$ 預設情況下,伺服器上的 TCP 偵聽套接字將僅綁定到環回介面。這可以通過指定 bind_address 來覆蓋。空的bind_address 或地址 ‘’**表示遠端套接字應偵聽所有介面。**僅當啟用***了伺服器選項時,指定遠端 bind_address 才會成功(請參閱 參考資料)。GatewayPortssshd_config(5)

遠端伺服器上的偵聽套接字僅在本地主機上偵聽,因此來自 UNIT 的連接被拒絕(即:它是“關閉的”)。

因此,如果伺服器已經允許它,只需使用它就可以了:

ssh -N -R :10000:localhost:10000 username@hostname

請注意:前面有“一個空的 bind_address”(也可以使用實際的遠端伺服器面向 UNIT 的 IP 地址)。這應該改進為:

ssh -o ExitOnForwardFailure=yes -N -R :10000:localhost:10000 username@hostname

以防止錯誤地執行它兩次。

但是預設情況下通常不允許使用這種類型的綁定地址,需要更改遠端伺服器的sshd配置。GatewayPorts在遠端伺服器上,配置文件通常/etc/ssh/sshd_config應該被修改為有一個(未註釋的)條目,如下所示:

GatewayPorts clientspecified

並且應該重新載入 ssh 守護程序以使用其新配置。

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