ssh反向鏈接配置

需求

今天同事提出這樣一個需求,咱們在客戶那放了一臺linux服務器,這個服務器在局域網內,可是咱們又須要經過ssh鏈接到此服務器進行調試,可是又不能經過端口映射的方式來操做。因此就須要經過ssh反向鏈接的方式來進行操做。linux

ssh反向鏈接

ssh反向鏈接即某一臺主機在局域網內,可是咱們有須要鏈接它的時候,這個時候可讓這臺主機鏈接到一臺公網的服務器,並把它的ssh端口映射到公網這臺服務器的某一端口,而後咱們鏈接公網服務器的指定端口既能夠鏈接到局域網這臺主機。
這是以前的狀態:

這是作了ssh反向鏈接以後的狀態:
服務器

配置方法

  1. 在局域網主機執行以下命令
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

  1. 此時在公網主機經過netstat -tnl命令能夠看到已經啓用了2022端口,可是此端口只監聽到127.0.0.1的地址,此時鏈接還須要先登陸到公網服務器,而後再經過公網服務器ssh本身的2022端口才能鏈接到局域網主機。若是須要直接ssh公網服務器的2022端口則須要再作一次轉發:
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

相關文章
相關標籤/搜索