簡說 SSH 隧道-- Local 與 Remote 端口轉發

一、用 LocalForward 訪問遠端不能直接訪問的東西

1.1 遠端被牆了

假定你所在的網絡無法直連某個服務器,比如 goodle.com,但你有一臺 vps 可以連接 goodle.com,你可以這樣

ssh -L 8888:goodle.com:80 [email protected]
-L 表示 Local 轉發
這一句表示 forward my (local)localhost port 8888 to goodle.com at port 80

連接成功之後,打開你的瀏覽器,輸入 http://localhost:8888 哇,Goodle 能夠訪問了!

1.2 遠端沒有被牆,但它只允許自己(localhost)訪問自己

比如你那臺數據庫服務器,只允許 localhost 訪問。可你….就是想遠程訪問嘛

ssh -L 3406:localhost:3306 [email protected]
這一句表示 forward my (local)localhost port 3406 to (remote)localhost at port 80
許多人被兩個端口之間夾着的 localhost 迷惑,我上面這句解釋夠清楚了,希望你不要犯糊塗。

連接成功之後,

mysql -u uname -p pass -P 3406 -hlocalhost
這一句裏的 localhost 當然是 (local)localhost

你現在就可以愉快地玩耍了。

二、用 RemoteForward 讓遠端訪問你本地的東西

假設你做了個好玩的網站,想展示給你網上的朋友看。然而你並沒有公網IP,或者你雖然有公網IP,但是你沒有路由器管理密碼… 總之他沒有法子直接連接你的機器。

然而你有一臺vps,那就好辦了

ssh -R 8888:localhost:80 [email protected]
-R 表示Remote 轉發
這一句表示 forward my (local)localhost port 80 to (remote)machine at port 8888

你現在訪問

http://yourvps.com:8888

理論上就可以看到你本地機器上運行的新奇網站了。當然,這只是理論上,你也有可能看不到,如果你 vps 上的配置不太合適的話。假定你遇到了這種情況….(其實大部分情況下都會遇到,因爲 sshd 的默認配置是不允許這種事情發生的

首先登錄到 vps 機器,然後
sudo vim /etc/ssh/sshd_config
把下面這行配置放到 sshd_config 的末尾(其實放別的位置也可以的
GatewayPorts yes
然後 sudo service ssh restart , 再來一遍。

三、別急,還有一點技巧要說

你也許注意到我們在創建隧道的同時,每次都登錄進遠端機器並且拿到一個終端(而且還不能隨便關閉….,一關隧道就斷了)。這確實有點蛋疼多此一舉,畢竟我們只想開個隧道。

ssh -nNT -R 8888:localhost:80 [email protected]

注意上面的黑體參數。 -nNT 可以保你只開隧道,不進終端。

這其實是一篇翻譯文章(然而並不忠實原文)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章