SSH 端口轉發(fā)與自動維護

1 ssh 端口轉發(fā)

ssh(Secure Shell)是一種網絡傳輸協(xié)議,它能夠在客戶端和服務器之間創(chuàng)建安全的隧道連接法褥。最常見的功能就是遠程登錄,這不是本文的重點,不過也會涉及到密鑰登錄(避免輸入密碼)墨微。本文將使用ssh做端口轉發(fā),ssh端口轉發(fā)有三種模式:

  • 本地端口轉發(fā)(Local Port Forwarding)
  • 遠程端口轉發(fā)(Remote Port Forwarding)
  • 動態(tài)端口轉發(fā)(Dynamic Port Forwarding)

1.1 本地端口轉發(fā)

本地主機登錄服務器后扁掸,將本地主機指定的端口映射到服務器指定的端口翘县,從而實現(xiàn)用戶在訪問本地主機時,就等于訪問服務器的效果谴分。例如:服務器上有一個web站點訪問地址是http://192.168.0.3:5000 ,服務器防火墻上并沒有開啟5000端口锈麸,如果直接輸入網址,是訪問不到該web站點的牺蹄。這時可以利用本地端口轉發(fā)功能忘伞,將請求本地主機的4000端口的數(shù)據(jù)轉發(fā)到服務器上的5000端口上,具體做法如下:

ssh -fNL 4000:192.168.0.3:5000 root@192.168.0.3

上面命令的中

  • -f 選項表示本地主機的ssh客戶端在后臺運行

  • -N 選項表示不執(zhí)行遠程命令,只用于轉發(fā)端口氓奈,及本地主機在登錄了192.168.0.3后翘魄,不會分配一個tty窗口。

  • -L 選項表示這是一個本地轉發(fā)模式探颈,它的參數(shù)是 port:host:hostport熟丸,對應到這里是4000:192.168.0.3:5000

    • port 參數(shù)表示本地主機的端口,及要通過該端口轉發(fā)數(shù)據(jù)到目標主機

    • host:hostport 參數(shù)表示經過遠程服務器(及使用ssh登錄的服務器ssh root@192.168.0.3)轉發(fā)的目標主機和端口伪节。在這個例子中光羞,目標主機和遠程服務器都是192.168.0.3。既然他們是一臺主機怀大,那么也可以用下面的命令來代替:

    • ssh -fNL 4000:localhost:5000 root@192.168.0.3
      # 或者
      ssh -fNL 4000:127.0.0.1:5000 root@192.168.0.3
      

      上面的localhost和127.0.0.1是相對于通過ssh登錄的遠程服務器的纱兑。

  • root@192.168.0.3 是ssh的登錄命令,只有登錄了遠程服務器后化借,才能執(zhí)行端口轉發(fā)

執(zhí)行完上面的命令后潜慎,可以在本地主機的瀏覽器上輸入http://localhost:4000 訪問遠程服務器192.168.0.3:5000上的web站點。

現(xiàn)在蓖康,假如有另外一臺服務器10.1.1.10铐炫,上面部署了一個web應用(地址為http://10.1.1.10 ,端口為80),本地主機不能直接訪問該站點的web服務器蒜焊,而192.168.0.3上能夠訪問得到這臺服務器倒信。根據(jù)上面的知識,我們知道泳梆,10.1.1.10:80是我們的目標主機和端口鳖悠,192.168.0.3作為遠程服務器,與我們本地主機和目標主機的網絡都是連通的优妙,我們就可以通過以下命令將本地主機的4000端口的數(shù)據(jù)轉發(fā)到目標主機(10.1.1.10)的80端口上乘综。

ssh -fNL 4000:10.1.1.10:80 root@192.168.0.3

此時,我們輸入http://localhost:4000套硼,就能訪問到http://10.1.1.10站點的內容

1.2 遠程端口轉發(fā)

遠程端口轉發(fā)是將遠程服務器端口映射到本地端口卡辰,方便其他不能直接訪問本地網絡的主機訪問。比如熟菲,家里的電腦要訪問公司內部服務器(192.168.0.5)上的web站點(部署在80端口上)看政,因為它們是不能直接通信的,所以需要有一臺遠程服務器(比如:123.123.123.123)作端口轉發(fā)抄罕。

此時允蚣,我們需要在遠程服務器上開一個端口,這里假設為8000端口呆贿,將8000端口與內部服務器上的80端口做綁定嚷兔,然后我們在家里只需要訪問遠程服務器的8000端口森渐,即可與訪問到內部服務器的web站點。具體做法是冒晰,在內部服務器192.168.0.5上執(zhí)行如下指令:

ssh -fNR 8000:localhost:80 root@123.123.123.123

在上面的命令中:

  • -R 選項代表的是遠程端口轉發(fā)模式同衣,它的參數(shù)是port:host:hostport,對應這里的是8000:localhost:80
    • port-L 參數(shù)中的port不同壶运,-L參數(shù)中port代表的是本地的端口耐齐,而這里的port代表的是遠程服務器123.123.123.123的端口。
    • host:hostport 參數(shù)表示要綁定的本地端口蒋情,這里的localhost代表的我們操作的內部服務器埠况,即192.168.0.5,也可以變?yōu)?27.0.0.1或192.168.0.5棵癣≡玻可以是這臺內部服務器能訪問的任何其他服務器資源,這里就不在贅述狈谊。

執(zhí)行完上面的命令后喜命,我們在家里通過輸入http://123.123.123.123:8000,即可訪問內部服務器上http://192.168.0.5 的站點河劝。

1.3 動態(tài)端口轉發(fā)

當目標主機不定時壁榕,我們就需要使用動態(tài)端口轉發(fā)。比如赎瞎,公司內部只有一臺服務器192.168.0.3能夠訪問外網护桦,現(xiàn)在我們需要到網上去查詢一些資料,這些資料的來至不同的服務器煎娇,也就是我們的目標地址是不固定的,那么我們就需要這臺服務器192.168.0.3為我們做動態(tài)端口轉發(fā)贪染。具體指令如下:

ssh -fND 8000 root@192.168.0.3
  • -D 參數(shù)表示使用動態(tài)端口轉發(fā)模式缓呛,8000表示本地主機要綁定的端口。當本地主機登錄遠程服務器后杭隙,8000端口所收到的數(shù)據(jù)將會轉發(fā)到服務器192.168.0.3上哟绊,再由這臺服務器為我們動態(tài)的轉發(fā)到目標地址。

比如痰憎,我們要訪問百度票髓,我們需要將瀏覽器發(fā)出的請求先轉發(fā)到localhost:8000端口上,由8000端口將數(shù)據(jù)傳輸?shù)椒掌?92.168.0.3上铣耘,再由服務器動態(tài)的將請求轉發(fā)至百度服務器上洽沟,及實現(xiàn)了本地主機上網查找資料的目的。這里后面的兩步都已經完成蜗细,只需要將第一步在本地主機上把瀏覽器的請求轉發(fā)到本地的8000端口上裆操。我們可以使用瀏覽器的socks代理怒详,將其請求發(fā)送到本地端口即可。

2 使用autossh自動維護連接

不論使用哪種模式踪区,SSH做端口轉發(fā)時昆烁,都需要在本地主機和遠程服務器之間建立連接(隧道)。這種連接是不穩(wěn)定的缎岗,當網絡情況不好時静尼,連接可能會中斷。autossh可以解決這種問題传泊,它會在本地主機和遠程服務器上做連接檢查(發(fā)送測試數(shù)據(jù)到指定端口)鼠渺,如果發(fā)現(xiàn)連接中斷后,會自動重連或渤。

上面的描述中系冗,有兩個問題需要解決

  1. 在什么端口做連通性檢測
  2. 如何重連

2.1 使用密鑰登錄服務器

使用ssh連接服務器時,使用用戶名密碼登錄薪鹦,每次都要輸入密碼掌敬。如果是自動重連,我們就需要免密登錄服務器池磁。這里我們要解決的是ssh連接遠程服務器時需要輸入用戶名密碼的問題奔害。ssh除了用戶名密碼登錄外,還有一種登錄方式是使用密鑰登錄地熄,大致過程如下:

我們在本地主機上生成一個密鑰對华临,將公鑰放在遠程服務器中,私鑰保存在本地主機上端考,當使用密鑰登錄遠程服務器時雅潭,流程如下:

  1. 客戶端發(fā)起連接請求,并將公鑰發(fā)送至服務器
  2. 服務器比對客戶端發(fā)送的公鑰是否與本地的公鑰相同却特,如相同則用公鑰加密一個隨機字符扶供,發(fā)送給客戶端,這個認證機制叫challenge/response(質疑-應答認證)
  3. 客戶端在收到challenge后裂明,使用私鑰解密椿浓,并將結果回傳給服務器
  4. 服務器驗證客戶端回傳的數(shù)據(jù)后,建立ssh連接

生成密鑰

使用ssh-keygen生成密鑰對闽晦,ssh-keygen有很多參數(shù)選項扳碍,下面列出我用到的:

  • -t 表示生成密鑰的類型,有dsa仙蛉,rsa等笋敞,一般用rsa加密算法
  • -C 后面跟附加信息,一般我是跟的個人的名字
ssh-keygen -t rsa -C zebra

這里在輸入私鑰密碼時荠瘪,選擇為空液样,為后續(xù)autossh自動重連提供方便振亮。生成完后,默認會在用戶家目錄的.ssh目錄下生成id_rsa和id_rsa.pub兩個文件鞭莽。id_rsa為私鑰文件坊秸,id_rsa.pub為公鑰文件,可以看到id_rsa.pub公鑰文件的最后有我們-C選項的附加信息zebra澎怒,這樣我們將公鑰上傳至服務器后褒搔,能夠很方便的找到自己的公鑰。

上傳公鑰

使用ssh-copy-id上傳公鑰文件

ssh-copy-id -i root@123.123.123.123

在ssh-copy-id命令中喷面,-i選項后面跟公鑰文件的路徑星瘾,如果不加參數(shù),默認是找~/.ssh/id_rsa.pub公鑰文件惧辈,我們使用的默認公鑰文件琳状,root@123.123.123.123是指要將公鑰數(shù)據(jù)存放在遠程服務器的root用戶下,注意:端口轉發(fā)必須是連接root用戶盒齿。執(zhí)行完上面的命令后念逞,會在root家目錄下的.ssh目錄中,生成authorized_keys文件边翁,里面保存做上傳的公鑰內容翎承。

2.2 使用autossh維護連接

在客戶端使用命令yum install autossh安裝autossh,autossh在ssh的基礎上新增加一個參數(shù)-M來檢查隧道的連通性符匾,原理是這樣的叨咖,autossh會在-M指定的端口上發(fā)送測試數(shù)據(jù),并在這個端口+1的端口上接收回響數(shù)據(jù)啊胶。比如:我們設置-M 20000甸各,autossh 會在20000端口上發(fā)送測試數(shù)據(jù),并在20001端口上接收回傳數(shù)據(jù)焰坪。

舉例說明痴晦,我要執(zhí)行遠程端口轉發(fā)的功能,將本地80端口映射到遠程服務器的8000端口琳彩,使用ssh命令如下:

ssh -fNR 8000:localhost:80 root@123.123.123.123

如果使用autossh可執(zhí)行這個命令

autossh -M 20000 -fNR 8000:localhost:80 root@123.123.123.123

autossh會在20000和20001端口上檢查本地客戶端和遠程服務器的連通性,如果發(fā)現(xiàn)隧道斷開了部凑,會在執(zhí)行自動連接露乏,因為我們使用了密鑰登錄,且沒有設置密鑰的密碼涂邀,所以就會達到自動重連的效果瘟仿。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市比勉,隨后出現(xiàn)的幾起案子劳较,更是在濱河造成了極大的恐慌驹止,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,204評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件观蜗,死亡現(xiàn)場離奇詭異臊恋,居然都是意外死亡,警方通過查閱死者的電腦和手機墓捻,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評論 3 395
  • 文/潘曉璐 我一進店門抖仅,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人砖第,你說我怎么就攤上這事撤卢。” “怎么了梧兼?”我有些...
    開封第一講書人閱讀 164,548評論 0 354
  • 文/不壞的土叔 我叫張陵放吩,是天一觀的道長。 經常有香客問我羽杰,道長渡紫,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,657評論 1 293
  • 正文 為了忘掉前任忽洛,我火速辦了婚禮腻惠,結果婚禮上,老公的妹妹穿的比我還像新娘欲虚。我一直安慰自己集灌,他們只是感情好,可當我...
    茶點故事閱讀 67,689評論 6 392
  • 文/花漫 我一把揭開白布复哆。 她就那樣靜靜地躺著欣喧,像睡著了一般。 火紅的嫁衣襯著肌膚如雪梯找。 梳的紋絲不亂的頭發(fā)上唆阿,一...
    開封第一講書人閱讀 51,554評論 1 305
  • 那天,我揣著相機與錄音锈锤,去河邊找鬼驯鳖。 笑死,一個胖子當著我的面吹牛久免,可吹牛的內容都是我干的浅辙。 我是一名探鬼主播,決...
    沈念sama閱讀 40,302評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼阎姥,長吁一口氣:“原來是場噩夢啊……” “哼记舆!你這毒婦竟也來了?” 一聲冷哼從身側響起呼巴,我...
    開封第一講書人閱讀 39,216評論 0 276
  • 序言:老撾萬榮一對情侶失蹤泽腮,失蹤者是張志新(化名)和其女友劉穎御蒲,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體诊赊,經...
    沈念sama閱讀 45,661評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡厚满,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,851評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了豪筝。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片痰滋。...
    茶點故事閱讀 39,977評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖续崖,靈堂內的尸體忽然破棺而出敲街,到底是詐尸還是另有隱情,我是刑警寧澤严望,帶...
    沈念sama閱讀 35,697評論 5 347
  • 正文 年R本政府宣布多艇,位于F島的核電站,受9級特大地震影響像吻,放射性物質發(fā)生泄漏峻黍。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,306評論 3 330
  • 文/蒙蒙 一拨匆、第九天 我趴在偏房一處隱蔽的房頂上張望姆涩。 院中可真熱鬧,春花似錦惭每、人聲如沸骨饿。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,898評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽宏赘。三九已至,卻和暖如春黎侈,著一層夾襖步出監(jiān)牢的瞬間察署,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,019評論 1 270
  • 我被黑心中介騙來泰國打工峻汉, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留贴汪,地道東北人。 一個月前我還...
    沈念sama閱讀 48,138評論 3 370
  • 正文 我出身青樓休吠,卻偏偏與公主長得像扳埂,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子蛛碌,可洞房花燭夜當晚...
    茶點故事閱讀 44,927評論 2 355

推薦閱讀更多精彩內容

  • http://blog.csdn.net/pipisorry/article/details/52269785 什...
    950545c4cd64閱讀 83,355評論 0 13
  • 加密算法 對稱加密算法 加密和解密使用同一個密鑰 DES、3DES辖源、AES蔚携、Blowfish希太、Twofish、ID...
    毛利卷卷發(fā)閱讀 1,590評論 0 4
  • CA和證書安全協(xié)議(SSL/TLS)OpenSSH 一酝蜒、CA和證書 (一) PKI(Public Key Infr...
    哈嘍別樣閱讀 1,391評論 0 0
  • 名詞延伸 通俗的說,域名就相當于一個家庭的門牌號碼霉咨,別人通過這個號碼可以很容易的找到你蛙紫。如果把IP地址比作一間房子...
    楊大蝦閱讀 20,602評論 2 57
  • ??本文將介紹兩種應用場景的SSH端口轉發(fā),分別是SSH本地轉發(fā)以及SSH遠程轉發(fā)途戒。 簡介 ??SSH(Secur...
    KingFighting閱讀 1,477評論 0 5