Linux
與本地網路共享 SSH 埠隧道
我已經成功地在本地 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