關(guān)于 ssh 端口轉(zhuǎn)發(fā)稚伍,以前只知道下面第一種方式视卢,但其實有三種方式雏逾。注意要打開 ssh 服務(wù)器的端口轉(zhuǎn)發(fā)功能嘉裤,即檢查其配置 AllowTcpForwarding=yes
郑临。
一栖博、本地端口轉(zhuǎn)發(fā)
將連接從客戶端主機轉(zhuǎn)發(fā)到 SSH 服務(wù)器主機,然后轉(zhuǎn)發(fā)到目標主機端口厢洞。
ssh -NfC -L [LOCAL_IP:]LOCAL_PORT:DESTINATION:DESTINATION_PORT [USER@]SSH_SERVER
*[LOCAL_IP:]LOCAL_PORT
- 本地 IP 和端口號仇让,LOCAL_IP 默認是 localhost
*DESTINATION:DESTINATION_PORT
- 目標機器的 IP 地址和端口號
*[USER@]SERVER_IP
- 遠程 SSH 地址和登錄用戶
其實只要 -L
參數(shù)即可生效,其他參數(shù)的意思是
-
-N
不實際登錄SSH_SERVER
躺翻,只進行端口轉(zhuǎn)發(fā) -
-f
進程進入后臺運行 -
-C
壓縮傳輸數(shù)據(jù)以節(jié)省帶寬 -
-q
也可加一個這個參數(shù)進入安靜模式丧叽,沒有任何輸出信息
上面命令意思是把本地的 LOCAL_IP:LOCAL_PORT
端口通過 SSH_SERVER
轉(zhuǎn)發(fā)到遠程的 DESTINATION:DESTINATION_PORT
端口。注意 LOCAL_IP
是當前電腦的本地 IP公你,因為一臺電腦可以有多個 IP踊淳,這里可以指定針對哪個 IP 有效,當然如果不指定的話默認是 localhost,多數(shù)情況下默認即可迂尝。該命令會打開本地的 LOCAL_PORT
端口脱茉,如果該端口已被占用或該用戶沒有權(quán)限打開該端口的話會報錯。目標機器DESTINATION
是指以SSH_SERVER
的身份能訪問到的IP垄开, 如果指定為 locahost 則是相對于SSH_SERVER
來說的琴许,也就SSH_SERVER
本機,當然也可以指定其他機器(本地機無法直接訪問但是SSH_SERVER
可以訪問的機器)溉躲“裉铮總之,本地端口轉(zhuǎn)發(fā)的應(yīng)用場景就是:對于當前電腦不能直接訪問但是SSH_SERVER
能夠訪問的機器锻梳,可以通過這種登錄SSH_SERVER
的方式將目標端口映射為本地端口箭券,然后通過訪問本地端口來達到訪問目標端口的目的。
例:使用本地地址 127.0.0.1:1000 連接遠程的 192.168.22.1:1000疑枯,同時使用本地地址 127.0.0.1:2000 連接遠程的 192.268.22.2:1000邦鲫,192.168.22.1 是 ssh 服務(wù)器且能訪問 192.168.22.2
ssh -NfC -L 1000:192.168.22.1:1000 -L 2000:192.168.22.2:1000 user@192.168.22.1
ssh -NfC -L 1000:localhost:1000 -L 2000:192.168.22.2:1000 user@192.168.22.1
注意上面兩種寫法原則上是等價的,只要 192.168.22.1 的 1000 端口對該機器的所有 IP 都綁定了即可神汹。而且可以看出庆捺,可以使用多個 -L
參數(shù)同時建立多個轉(zhuǎn)發(fā)通道。
二屁魏、遠程端口轉(zhuǎn)發(fā)
遠程端口轉(zhuǎn)發(fā)與本地端口轉(zhuǎn)發(fā)相反滔以,它允許將遠程(ssh 服務(wù)器)機器上的端口轉(zhuǎn)發(fā)到本地(ssh 客戶端)機器上的端口,然后再轉(zhuǎn)發(fā)到目標機器上的端口氓拼。遠程端口轉(zhuǎn)發(fā)主要用于向外部人員提供對內(nèi)部服務(wù)的訪問權(quán)限你画。
ssh -R [REMOTE:]REMOTE_PORT:DESTINATION:DESTINATION_PORT [USER@]SSH_SERVER
*[REMOTE:]REMOTE_PORT
- 遠程服務(wù)器地址和端口號,REMOTE
默認支持SSH_SERVER
的所有地址桃漾,應(yīng)該是 0.0.0.0
*DESTINATION:DESTINATION_PORT
- 本地能訪問的目標機器的 IP 地址和端口號
*[USER@]SSH_SERVER
- 遠程 SSH 地址和登錄用戶
注意該命令會在 SSH_SERVER
上打開 REMOTE_PORT
端口坏匪,將本機能訪問的本地網(wǎng)絡(luò)中的端口DESTINATION:DESTINATION_PORT
映射到遠端 SSH_SERVER
上的 REMOTE_PORT
,使得在 SSH_SERVER
以及其所在網(wǎng)絡(luò)上通過訪問 REMOTE_PORT
來達到訪問本地目標機器的目的撬统。其應(yīng)用場景是:本地網(wǎng)絡(luò)上有一個目標服務(wù)DESTINATION:DESTINATION_PORT
适滓,本地可以沒有 ssh 服務(wù)器,通過以該方式登錄SSH_SERVER
來讓SSH_SERVER
能通過訪問自己的REMOTE_PORT
端口來訪問本地的目標服務(wù)恋追。
例:本機 IP 為 192.168.100.1凭迹, 它可以訪問本地局域網(wǎng)的 192.168.100.5:1000 服務(wù),想讓 ssh 服務(wù)器 10.20.30.40 通過 2000 端口也能訪問這個服務(wù)
ssh -NfC -R 2000:192.168.100.5:1000 user@10.20.30.40
這樣就會在 10.20.30.40 上打開 2000 端口苦囱,將其映射為本地的 192.168.100.5:1000 端口嗅绸。
三、動態(tài)端口轉(zhuǎn)發(fā)
動態(tài)端口轉(zhuǎn)發(fā)允許在本地(ssh 客戶端)機器上創(chuàng)建一個套接字撕彤,它充當 SOCKS 代理服務(wù)器鱼鸠。 當客戶端連接到這個端口時,連接被轉(zhuǎn)發(fā)到遠程(ssh 服務(wù)器)機器,然后被轉(zhuǎn)發(fā)到目標機器上的動態(tài)端口蚀狰。這個功能比較強大漆弄,說白了就是相當于建立了一個V屁N代理。
ssh -D [LOCAL_IP:]LOCAL_PORT [USER@]SSH_SERVER
*[LOCAL_IP:]LOCAL_PORT
- 本地 IP 地址和端口號造锅,LOCAL_IP 默認為 localhost
*[USER@]SERVER_IP
- 遠程 SSH 地址和登錄用戶
例:在本地打開 socks5 代理端口 1000撼唾,通過這個代理的連接都是以 10.20.30.40 的身份訪問的,相當于進入到了 10.20.30.40 所在的局域網(wǎng)
ssh -NfCq -D 1000 user@10.20.30.40
應(yīng)用場景:ssh服務(wù)器所在的遠端局域網(wǎng)內(nèi)部的機器本來沒法訪問哥蔚,這樣建立端口轉(zhuǎn)發(fā)后就可通過本地的 socks5 代理來訪問了倒谷。