Ssh

反向 SSH 隧道適用於 SSH,但不適用於 HTTP

  • May 10, 2017

什麼有效

我有以下設置:

server <-NAT-> VPS <-> client

我已經通過反向隧道和以下設置將 ssh 設置到我的伺服器:

  • 在 VPS 上,

GatewayPorts yes

  • 在伺服器上:

autossh -f -M 57575 -N -R <VPS ip>:9991:localhost:<server ssh port> vps

通過此設置,我可以簡單地ssh -p 9991 <server user>@<VPS ip>從客戶端登錄到我的伺服器。

什麼不

  • 在 VPS 上,

GatewayPorts yes, 否則設置與 SSH 案例相同

  • 在伺服器上:

autossh -f -M 57576 -N -R <VPS ip>:9992:localhost:8988 vps

python -m http.server 8988啟動 http 伺服器。我可以確認它已綁定0.0.0.0並且我可以在本地機器上訪問它。

但是,當我嘗試通過http://<VPS ip>:9992ERR_EMPTY_RESPONSE 訪問該網站時。

查看 netstat,這兩種情況似乎相同。在 VPS 上:

tcp 0 0 0.0.0.0:9992 0.0.0.0:* LISTEN -

tcp 0 0 0.0.0.0:9991 0.0.0.0:* LISTEN -

在伺服器上:

tcp 0 0 0.0.0.0:8988 0.0.0.0:* LISTEN 21003/python

tcp 0 0 0.0.0.0:<ssh port> 0.0.0.0:* LISTEN 550/sshd

tcpdump顯示與 VPS 上的 9992 埠建立了連接,但沒有任何東西到達 8988 上的埠server。連接FIN立即在 VPS 上建立。

當完全類似的 SSH 情況發生時,為什麼這不起作用?

您應該先啟動伺服器,然後再啟動遠端埠轉發。不是反過來。

我不知道為什麼會這樣,但顯然它解決了這個問題。

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