(原創(chuàng)文峻凫,謝絕轉(zhuǎn)載)
作為Linux系統(tǒng)中自帶的工具ssh纫事,功能很強(qiáng)大勘畔,大家喜聞樂見。除了將ssh作為遠(yuǎn)程管理工具外丽惶,其Port Forwarding功能也是很有趣的炫七,下面將通過三個(gè)例子來詳細(xì)解說ssh的Port Forwarding 功能。
Local Port Forwarding
簡單的說钾唬,就是
ssh本地端口->ssh服務(wù)器->遠(yuǎn)程端口
舉個(gè)例子万哪,我在家里的電腦A面前,能連上公司的服務(wù)器B抡秆,公司的服務(wù)器B能連上公司內(nèi)網(wǎng)的服務(wù)器C奕巍。外網(wǎng)是無法直接訪問C的mysql(端口3306),我在家里想訪問C的數(shù)據(jù)庫儒士,于是我在A上設(shè)置
ssh -L 3000:address.of.serverC:3306 usr@address.of.serverB
輸入管理員同志私底下給你的serverB的密碼后
再使用mysql -hlocalhost -p3000 -uuser -ppassword就能訪問C的數(shù)據(jù)庫鳥的止。
也就是說,通過Local Port Forwarding着撩, 使得我們跟localhost:3000交流與跟serverC:3306交流的效果是一毛一樣的冲杀。有點(diǎn)像蟲洞或者縮地之術(shù)啥的。
Remote Port Forwarding
大概是這么個(gè)意思:
老板A的電腦->ssh服務(wù)器端口->你的本地端口
舉例子睹酌,公司里的老板想看看你在家里弄數(shù)據(jù)庫弄得怎樣了,可是你家里電腦A沒有公有IP地址,還好你控制著一個(gè)有公網(wǎng)ip的服務(wù)器B剩檀。3306是本地?cái)?shù)據(jù)庫的端口憋沿,于是,你使用了
ssh -R 3000:localhost:3306 user@serverB
你老板在電腦C上訪問serverB:3000跟在電腦前訪問localhost:3306一毛一樣沪猴。而且mysql的root用戶也可以遠(yuǎn)程登錄了辐啄。
Dynamic Port Forwarding
跟Local Port Forwarding差不多,區(qū)別是不用指定目標(biāo)機(jī)和端口了运嗜,由連上來的應(yīng)用決定目標(biāo)和端口壶辜。
舉個(gè)例子,你從前不讓員工用公司的網(wǎng)絡(luò)上外網(wǎng)担租,當(dāng)然就你的某個(gè)電腦A能上外網(wǎng)砸民。某天你大發(fā)慈悲了,決定讓員工也能上上網(wǎng)。你決定用自己的電腦A做個(gè)代理岭参,讓員工通過你的電腦上網(wǎng)反惕,于是,你輸入
ssh -D 8080 me@myserver
員工在瀏覽器中設(shè)置好代理服務(wù)器 myserver:8080 就能上上網(wǎng)啥的演侯。
注意事項(xiàng)
連不上端口用netstat -antp 查看ssh服務(wù)器姿染,是不是127.0.0.1連著端口,這個(gè)ip是就沒法從遠(yuǎn)程訪問的秒际。要從遠(yuǎn)程訪問ssh轉(zhuǎn)發(fā)的端口就需要設(shè)置/etc/ssh/sshd_config悬赏, 在最末加一句GatewayPorts yes。重啟ssh服務(wù)娄徊。127.0.0.1變成0.0.0.0就OK了闽颇。