1. 使用情景
經常會有如下場景伐憾,你在內網有一臺服務器A,可以訪問內網肺蔚,也可以訪問外網,當你想從外網訪問到這個這臺內網服務器時儡羔,就需要用到ssh反向代理了宣羊;
例如你想在外網ssh到主機A,因為你的服務器A沒有公網IP所以你無法直接訪問汰蜘;這時你可以借助公網主機B來實現(xiàn)仇冯。
如上圖,擁有公網IP的主機B如何ssh到內網主機A呢族操?
2. 構建反向ssh隧道
在主機A上執(zhí)行如下命令
ssh -p2803 -qngfNTR 6023:192.168.0.2:22 root@96.45.*.*
執(zhí)行后輸入主機B的密碼苛坚,保持連接不要斷開
-p 表示公網主機的ssh端口為2803
上面語句表示,可以通過在主機B上執(zhí)行ssh localhost -p 6023 登陸到主機A
原理是通過主機A主動ssh訪問主機B并留下反訪問自己的端口2803
3. 打洞
通過公網主機色难,構建隧道泼舱,使分別位于nat后的主機可以通訊。如果想要使任何其它外網主機C都可以通過主機B遠程ssh到主機A枷莉,則需要修改主機B上的SSH服務配置文件
操作如下:
1娇昙、 在主機B上編輯sshd配置文件/etc/ssh/sshd_config
GatewayPorts yes
2、 然后重啟sshd
sudo systemctl restart sshd
4. 維持隧道穩(wěn)定
上面隧道已經建立成功笤妙,可是如果主機A的ssh連接斷開(超時或者重啟)冒掌,隧道就會消失,那么有沒有辦法自動維持ssh穩(wěn)定呢蹲盘?在ssh連接斷開時自動重連股毫,或者在開機時自動連接ssh。
有召衔,autossh
維持隧道穩(wěn)定可以使用autossh
4.1铃诬、安裝autossh
在線安裝
redhat下安裝
$ yum install autossh
離線安裝
????????$ sudo apt-get install gcc make
$ wget http://fossies.org/linux/privat/autossh-1.4e.tgz
$ tar -xf autossh-1.4e.tgz
$ cd autossh-1.4e
$ ./configure
$ make
$ sudo make install
4.2、修改命令
ssh -p2803 -qngfNTR 6023:192.168.0.2:22 root@96.45.*.*
修改為
autossh -p 2803 -M 6777 -NR '*:6023:192.168.0.2:22' root@96.45.*.*
注釋:
-M 為監(jiān)聽端口苍凛,與轉發(fā)無關
如果需要后臺執(zhí)行趣席,可以加-f參數,可是后臺執(zhí)行無法輸入密碼毫深,需要提前配置好ssh密鑰
5吩坝、 隧道傳輸文件
在主機B上可以使用scp命令傳輸文件
如將主機B上/home/hi.txt 傳輸到主機A上,可以在主機B上輸入命令
scp -P 6023 /home/hi.txt root@localhost:/home/
如將主機A上/home/hi.txt 傳輸到主機B上哑蔫,可以在主機B上輸入命令
scp -P 6023 root@localhost:/home/hi.txt /home/