今天同事提出這樣一個需求,咱們在客戶那放了一臺linux服務器,這個服務器在局域網內,可是咱們又須要經過ssh鏈接到此服務器進行調試,可是又不能經過端口映射的方式來操做。因此就須要經過ssh反向鏈接的方式來進行操做。linux
ssh反向鏈接即某一臺主機在局域網內,可是咱們有須要鏈接它的時候,這個時候可讓這臺主機鏈接到一臺公網的服務器,並把它的ssh端口映射到公網這臺服務器的某一端口,而後咱們鏈接公網服務器的指定端口既能夠鏈接到局域網這臺主機。
這是以前的狀態:
這是作了ssh反向鏈接以後的狀態:
服務器
ssh -NfR 2022:localhost:22 root@192.168.200.222 #鏈接到192.168.200.222這臺公網主機,而後把本身的22端口映射到公網主機的2022端口,-N:不執行任何命令,用於進行端口轉發;-f:後臺執行;-R:將遠程主機的某個端口轉發到本地的指定端口,若是是特權端口,則只能經過root登陸才能轉發
注意ssh兩個端口位置表明的意義:
ssh -NfR remote_port:localhost:localsshportssh
ssh -fCNL "*:2033:localhost:2022" localhost #在公網服務器把本地的2022端口映射到2033端口,這樣經過直接ssh公網服務器的2033端口既能夠鏈接到局域網主機
實際工做過程當中發現經過ssh作轉發的時候鏈接隧道老是斷掉,可能端口還在,可是就是鏈接不上。因此經過autossh代替ssh,autossh能夠監聽隧道,若是隧道斷了會自動重連。調試
autossh -M 5678 -NR 2022:localhost:22 root@192.168.200.222 #-M 5678表示經過5678端口監聽隧道狀態,若是隧道關閉則自動重連,-NR表示進行端口轉發,autossh不須要-f選項,由於其默認即在後臺運行
這樣端口轉發的問題就解決了。code