首 先看下面這張圖,咱們所面臨的大部分狀況都和它相似。咱們的電腦在右上角,經過公司帶有防火牆功能的路由器接入互聯網(固然可能還有交換機什麼的在中間連 接着你和路由器,可是在咱們的問題中交換機並不起到什麼關鍵性的做用)。左下腳的部分是一個網站的服務器,它是咱們公司防火牆策略的一部分,也就是說公司 不但願咱們訪問這個服務器。在左上還有一臺機器,它也是屬於咱們的。可是這臺機器並不在咱們公司裏面,換句話說他不受到公司防火牆的限制。最後也是最重 要的一點是,咱們可以在公司經過互聯網直接訪問這臺機器。或者說這臺位於公司防火牆外面的機器須要擁有一個獨立的互聯網IP,同時公司的防火牆規則不會屏 蔽這臺機器,而且這臺機器運行着一個OpenSSH服務器。html
現 在,咱們清楚地知道了本身所處的網絡環境。而且不難理解咱們在公司沒法訪問那個服務器的緣由是:線路A-B-C上A-B之間的防火牆屏蔽了對那個服務器的 訪問。與此同時,咱們也很快注意到,線路A-B-D之間、D-C之間是不受阻礙的。相信你已經想到了,在A-B之間的防火牆不會屏蔽對機器d的訪問。所以 咱們能夠經過機器d創建一個通道A-B-D-C,從而訪問到機器c上的數據。服務器
這條通道能夠用不少技術來創建,這裏咱們僅僅介紹如何使用SSH服務器來創建這樣一個通道-他被稱爲SSH隧道。網絡
在咱們計劃創建一個本地SSH隧道以前,咱們必須清楚下面這些數據:ssh
如今,咱們把上面這張圖變得具體一些,給這些機器加上IP地址。而且根據下面這張圖列出咱們的計劃:ide
如今咱們使用下面這條命令來達成咱們的目的網站
ssh -N -f -L 2121:234.234.234.234:21 123.123.123.123 ftp localhost:2121 # 如今訪問本地2121端口,就能鏈接234.234.234.234的21端口了
這裏咱們用到了SSH客戶端的三個參數,下面咱們一一作出解釋:spa
咱們再重複一下-L參數的行爲。-L X:Y:Z的含義是,將IP爲Y的機器的Z端口經過中間服務器映射到本地機器的X端口。.net
在這條命令成功執行以後,咱們已經具備繞過公司防火牆的能力,而且成功訪問到了咱們喜歡的一個FTP服務器了。3d
使用SSH的方式不夠穩定,使用AutoSSH能夠自動在鏈接斷開時自動重連,再把AutoSSH加入系統服務自動啓動,則能夠作到穩定的鏈接。orm
autossh是個很好的東西,他是用來保證SSH隧道鏈接穩定性的。在Ubuntu下安裝
apt-get install autossh
使用方法很簡單,好比原來直接用ssh的命令:
ssh -N -v -D localhost:8527 root@remote_ssh_server -p remote_ssh_port
如今改爲:
autossh -M 5122 -N -v -D localhost:8527 root@remote_ssh_server -p remote_ssh_port
本文出自http://www.javashuo.com/article/p-qbqtzrxe-bp.html
autossh原理解析參考https://blog.csdn.net/wesleyflagon/article/details/85304336