一晌块、前言
網絡上有很多強大的內網穿透軟件爱沟,但對于某些很簡單的需求來說可以通過SSH來實現更為方便。
二匆背、配置
配置思路:在 A 機器上做到 B 機器的反向代理呼伸;在 B 機器上做正向代理本地端口轉發(fā)。
主機編號 | IP地址 | 用戶名 | 備注 |
---|---|---|---|
A | A.A.A.A | usera | 客戶端 |
B | B.B.B.B | userb | 服務器 |
-
建立客戶端A到服務器B的反向代理(在客戶端A上操作)
ssh -CNR 8081:localhost:80 userb@B.B.B.B # 8081為服務器B端口钝尸,用來與客戶端A的80端口綁定括享。 # 可通過 -f 參數實現后臺運行
到這里客戶端A的80端口已經映射到服務器B的8081端口闽铐,可以在通過服務器B的8080端口訪問客戶端A的80端口,但注意只支持服務器B本地訪問奶浦。
-
建立服務器B上的正向代理用作本地轉發(fā)(在服務器B上操作)
因為綁定后的端口只支持服務器B本地訪問,所以我們需要把已經映射的端口轉發(fā)出去踢星。ssh -CNL "*:8080:localhost:8081' localhost # 8080為本地轉發(fā)端口,將數據轉發(fā)到先前已經映射的8081端口澳叉,實現外網訪問。 # 其中的*表示接受來自任意機器的訪問沐悦。 # 可通過 -f 參數實現后臺運行
現在可以通過服務器B的8080端口訪問到客戶端A的80端口成洗。
-
實現持久化連接和無密碼登陸
我們配置完代理后可以正常使用了,但不幸的是這種ssh反向連接會因為超時而關閉藏否,如果關閉了那從外網連通內網的通道就無法維持了瓶殃,為此我們需要另外的方法來提供穩(wěn)定的ssh反向代理隧道。無密碼登陸
a.通過設置KEY登陸(操作略)
b.使用sshpass命令(需安裝):
sshpass -p "ssh密碼" ssh -CNR 8081:localhost:80 userb@B.B.B.B
c.使用plink工具連接(windows):
plink.exe -pw "ssh密碼" ssh -CNR 8081:localhost:80 userb@B.B.B.B
-
用autossh(需安裝)建立穩(wěn)定隧道
autossh的參數與ssh的參數是一致的副签,但是不同的是在隧道斷開的時候遥椿,autossh會自動重新連接而ssh不會;另外不同的是-M
參數淆储,該參數指定一個端口用于外網的主機用來接收內網主機的信息冠场,若隧道不正常則返回給內網主機重新連接。autossh -M 5678 -f -CNR 8081:localhost:80 userb@B.B.B.B # 參數 -f 為后臺運行
可使用sshpass與autossh組合使用:
sshpass -p "ssh密碼" autossh -M 5678 -CNR 8081:localhost:80 userb@B.B.B.B
注:使用sshpass本砰,那么autossh不能加-f參數碴裙,因為sshpass需要autossh在前臺請求密碼才能實現輸入(這點和expect差不多),而加上-f參數放后臺后會無效点额,所以若要使用sshpass請務必不要加-f參數舔株,建議使用autossh然后配合-i參數使用用key認證登陸。 最后可以把命令加入開機啟動項實現開機啟動还棱。
-
附 SSH命令參數說明
-f 后臺運行 -C 允許壓縮數據 -N 不執(zhí)行任何命令 -R 將端口綁定到遠程服務器载慈,反向代理 -L 將端口綁定到本地客戶端,正向代理