autossh介紹:web
autossh 是一個用來啓動 ssh 並進行監控的程序,可在須要時重啓 ssh,若是程序問題或者是網絡問題。其靈感和機制來自於 rstunnel (Reliable SSH Tunnel). autossh 1.2 的方法已經改變:autossh 使用 ssh 來構造一個 ssh 重定向循環(本地到遠程和遠程到本地),而後發送測試數據並得到返回結果。shell
內網主機主動鏈接到外網主機,又被稱做反向鏈接(Reverse Connection),這樣NAT路由/防火牆就會在內網主機和外網主機之間創建映射便可相互通訊了。但這種映射是路由網關自動維持的,不會持續下去,若是鏈接斷開或者網絡不穩定都會致使通訊失敗,這時內網主機須要自動重連機制了。瀏覽器
安裝:服務器
yum install autossh網絡
實例:less
autossh -M 9090 -fCNR 18081:10.10.3.x:8080 root@x.x.x.xssh
autossh -M 9091 -fCNR 18082:10.10.3.x:80 root@x.x.x.xide
autossh -M 9091 -fCNR 18083:127.0.0.1:80 root@x.x.x.x測試
這樣將在'x.x.x.x'主機上開啓一個本地偵聽地址:18081,訪問本地18081將轉發至10.10.3.x:8080this
-M 9090參數,負責經過9090端口監視鏈接狀態,鏈接有問題時就會自動重連。
-M 是服務器echo機制使用的端口。
autossh -M 5678 -CqTfnN -D 192.168.0.2:7070 freeoa@remote-host
參數解釋:
-M爲autossh參數, -CqTfnN -D 爲ssh參數
-M 5678 : 負責經過5678端口監視鏈接狀態,鏈接有問題時就會自動重連
-C :啓動數據壓縮傳輸
-q :安靜模式運行,忽略提示和錯誤
-T :不佔用shell
-f :後臺運行
-n :配合 -f 參數使用
-N :不執行遠程命令,專爲端口轉發度身打造
-D 192.168.0.2:7070 :指定一個本地機器 「動態的「 應用程序端口轉發,若是不加IP地址,默認只監聽127.0.0.1
使用場景:
場景:A是內網服務器192.168.1.10(內部屢次nat,沒法使用公網IP),B是內網用戶轉發代理服務器192.168.1.12,C是公網服務器x.x.x.x,D是用戶PC
需求:D訪問A內網服務器web 8080
方法:
1.B安裝autossh
2.B執行autossh -M 9091 -fCNR 18080:192.168.1.10:8080 root@x.x.x.x
3.設置B能夠無密碼登錄C
4.D上打開putty,設置正向代理,點擊Add,save保存
5.D上打開瀏覽器:http://127.0.0.1:18080 ,訪問到內網A服務器web應用
補充:
注意幾個參數:
AUTOSSH_MAXLIFETIME: Sets the maximum number of seconds the process should live for before killing off the ssh child and exiting. AUTOSSH_POLL: poll time in seconds; default is 600.
在實際應用中,發現每隔10分鐘,會斷線重連,這對應用形成很大影響。
使用AUTOSSH_MAXLIFETIME參數設定轉發存活時間,在這個時間內不會斷,可是時間到後,會kill掉進程,沒法重連。
使用AUTOSSH_POLL,能夠指定多長時間斷線重連,官網原話,實際上沒看懂,但願理解的同道指點。
AUTOSSH_POLL - poll time in seconds; default is 600. Changing this will also change the first poll time, unless AUTOSSH_FIRST_POLL is used to set it to something different. If the poll time is less than twice the network timeouts (default 15 seconds) the network timeouts will be adjusted downward to 1/2 the poll time.
在實際中,使用這個參數,依然沒法解決個人問題,authossh其實是調用ssh,能夠再加上 -o TCPKeepAlive=yes -o ServerAliveInterval=30 ,解決頻繁斷線問題。
一個例子:
autossh -M 9098 -CNR x.x.x.x:443:10.x.x.x:443 root@x.x.x.x -f AUTOSSH_POLL 86400 -o TCPKeepAlive=yes -o ServerAliveInterval=30