實(shí)現(xiàn)外網(wǎng)利用ssh反向隧道訪問內(nèi)網(wǎng)主機(jī)
準(zhǔn)備
實(shí)現(xiàn)內(nèi)網(wǎng)穿透都需要一臺外網(wǎng)主機(jī)晃跺,而且是可以訪問的
內(nèi)網(wǎng)主機(jī)A
- IP:192.168.189.128
- ssh端口:22
- 用戶名:usera
- 密碼:passwda
外網(wǎng)主機(jī)B
- IP:123.123.123.123
- ssh端口:22
- 用戶名:userb
- 密碼:passwdb
- 要綁定內(nèi)網(wǎng)主機(jī)的外網(wǎng)端口:2222
配置
外網(wǎng)主機(jī)配置
修改/etc/ssh/sshd_config
文件,如果沒有添加即可
GatewayPorts yes
重啟sshd服務(wù)
sudo service sshd restart
內(nèi)網(wǎng)主機(jī)配置
ssh -NfR 2222:localhost:22 userb@123.123.123.123
參數(shù) | 說明 |
---|---|
-f | 建立成功后在后臺運(yùn)行 |
-c | 允許壓縮數(shù)據(jù) |
-N | 只建立連接,不打開shell |
-R | 將遠(yuǎn)程主機(jī)的某個(gè)端口轉(zhuǎn)發(fā)到本地主機(jī)的指定端口 |
-L | 將本地主機(jī)的某個(gè)端口轉(zhuǎn)發(fā)到遠(yuǎn)程主機(jī)的指定端口 |
會提示輸入外網(wǎng)主機(jī)的密碼
通過ssh的2222端口連接外網(wǎng)主機(jī)茬腿,就可以代理到內(nèi)網(wǎng)主機(jī),外網(wǎng)主機(jī)執(zhí)行下面命令測試
ssh localhost -p 2222
改進(jìn)
至此怀浆,完全可以通過外網(wǎng)主機(jī)作為橋梁實(shí)現(xiàn)對內(nèi)網(wǎng)主機(jī)的ssh訪問爹梁,但是維持ssh的時(shí)間是有限的,一段時(shí)間沒有數(shù)據(jù)傳輸急侥,外網(wǎng)主機(jī)和內(nèi)網(wǎng)主機(jī)的連接會斷開砌滞。
使用autossh
內(nèi)網(wǎng)主機(jī)配置
安裝autossh
sudo apt install autossh
在上面操作中,連接外網(wǎng)主機(jī)每次需要輸入密碼坏怪,autossh 為了維持連接需要使用非密碼登錄贝润,這里設(shè)置秘鑰登錄
生成秘鑰,如果有ssh秘鑰直接進(jìn)行下步操作
ssh-keygen -t rsa -C "your_email@example.com"
將秘鑰添加到外網(wǎng)主機(jī)的authorized_keys里面
ssh-copy-id userb@123.123.123.123
會提示輸入外網(wǎng)主機(jī)密碼
內(nèi)網(wǎng)主機(jī)執(zhí)行
autossh -M 55555 -NfR 2222:localhost:22 userb@123.123.123.123
參數(shù) | 說明 |
---|---|
-M | 外網(wǎng)主機(jī)接收內(nèi)網(wǎng)主機(jī)信息的端口 |
其他參數(shù)和ssh一致铝宵,在隧道斷開的時(shí)候打掘,autossh會自動重新連接而ssh不會,-M參數(shù)就是外網(wǎng)主機(jī)監(jiān)聽內(nèi)網(wǎng)主機(jī)發(fā)送的信息的端口號鹏秋,內(nèi)網(wǎng)主機(jī)檢測到異常就會自動重連尊蚁。
外網(wǎng)主機(jī)測試
ssh localhost -p 2222