Linux

與本地網路共享 SSH 埠隧道

  • September 21, 2015

我已經成功地在本地 linux 伺服器上創建了一個到我們的雲 postgresql 伺服器的 SSH 隧道,使用以下命令:

ssh -N -f -L 5431:localhost:xxxx mycloudserver.com

(其中 xxxx 是遠端埠)

使用此命令,我可以通過埠 5431 訪問遠端 PostgreSQL 數據庫,但只能在此 linux 伺服器上。

現在我想與網路上的其他電腦“共享”這個連接,這樣我就可以使用 ODBC 驅動程序連接到 linux_server:5431 並讀取雲數據庫,而無需在客戶端上安裝任何 SSH 軟體。用 iptables 打開埠 5431 不起作用。

iptables -A INPUT -p tcp -s 0/0 --sport 1024:65535 -d 192.168.128.5 --dport 5431 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp -s 192.168.128.5 --sport 5431 -d 0/0 --dport 1024:65535 -m state --state ESTABLISHED -j ACCEPT

已經試過了

ssh -N -f -L 5431:0.0.0.0:xxxx mycloudserver.com

也。隧道已成功建構並在伺服器上執行,但我無法“看到”來自客戶端的連接。

您需要修改命令以指定 bind_address ,例如:

ssh -N -f -L 0.0.0.0:5431:localhost:xxxx mycloudserver.com

這將使它在所有介面上偵聽。要驗證,請使用:

netstat -lnp | grep 5431

這確實是錯誤的做法。不要使用 SSH 隧道。相反,在雲伺服器上設置 SSL 並進行直接 SSL 連接,如果需要,使用 IP 地址限制。

或者,如果您必須使用 VPN,請使用專為該角色設計的 VPN,而不是將 ssh 混入工作中。

SSH 通過 TCP 建立 TCP 隧道,這會導致擁塞控制、重傳和視窗縮放算法出現問題。它對於臨時工作來說是一個很好的實用程序,但我不建議對使用大量頻寬的事情進行生產多使用者操作。

如果你真的必須*,那麼你可以使用你的綁定地址-L,例如

-L *:5431:localhost:xxxx

或為該主機設置,或通過GatewayPorts yes命令行選項設置,例如:.ssh/config``-o

-o GatewayPorts=yes

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