內(nèi)網(wǎng)機(jī)器:A
公網(wǎng)機(jī)器:B
1、內(nèi)網(wǎng)機(jī)器(A)安裝autossh
apt-get -y install autossh
配置免密登錄
ssh-keygen
ssh-copy-id -i .ssh/id_rsa.pub root@123.123.123.123//此地址只用作舉例
啟動(dòng)端口(A)
autossh -fNR 8888:localhost:22 -p 40022 root@123.123.123.123//此地址只用作舉例
參數(shù)解釋:
-f:是指autossh后臺(tái)運(yùn)行,不會(huì)阻塞shell繼續(xù)向下執(zhí)行;
-N:是指建立的ssh連接只用于轉(zhuǎn)發(fā)數(shù)據(jù),不解析命令;
-R:是指建立反向隧道,一般我們ssh某個(gè)服務(wù)器是正向隧道;
8888:是公網(wǎng)服務(wù)器上的代理端口;
localhost:22:是指代理到本機(jī)時(shí)需要訪問(wèn)的ip和端口,即內(nèi)網(wǎng)機(jī)器A的ip地址+端口;
-p 40022:是外網(wǎng)機(jī)器B的ssh端口;
最后是公網(wǎng)服務(wù)器的地址,autossh會(huì)調(diào)用ssh建立到它的ssh反向隧道。
注意:autossh只有三個(gè)命令,其他命令都是通過(guò)調(diào)用ssh提供的,autossh在這里只是起到了監(jiān)聽(tīng)ssh是否斷開(kāi)并將其自動(dòng)拉起的作用。執(zhí)行完這條命令,將會(huì)在外網(wǎng)機(jī)器(B)123.123.123.123上啟動(dòng)并監(jiān)聽(tīng)8888端口,如下(外網(wǎng)機(jī)器查看)

clipboard.png
可知,該端口是默認(rèn)綁定在lo地址上的,所以在外網(wǎng)機(jī)器上反向登陸服務(wù)器時(shí),可用localhost或者127.0.0.1,但是不能使用真實(shí)網(wǎng)卡的地址去連接。
以上操作,除過(guò)查看端口的操作外,其他操作全部在內(nèi)網(wǎng)機(jī)器完成。
2、外網(wǎng)機(jī)器連接內(nèi)網(wǎng)服務(wù)器
ssh -p 8888 localhost
或
ssh -p 8888 127.0.0.1
3、添加到系統(tǒng)服務(wù),方便管理
cd /etc/systemd/system/ && vim autossh.service
[Unit]
Description=Front autossh
After=sshd.target
[Service]
User=root
Type=simple
ExecStart=/usr/bin/autossh -p 40022 -NR 8888:localhost:22 root@123.123.123.123
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=always
[Install]
WantedBy=multi-user.target
啟停autossh
systemctl stop|start|status autossh.service
- 附:如果啟動(dòng)成功后,使用ps -ef |grep autossh可以看到autossh已經(jīng)啟動(dòng),但是在B上卻無(wú)法連接,也看不到啟動(dòng)的端口,那么一般就是忘記配置ssh免密登陸啦,再檢查一下咯。*
- 以上內(nèi)容僅為個(gè)人的理解,有不對(duì)的地方歡迎指正*