内网机器:A
公网机器:B
1、内网机器(A)安装autossh
apt-get -y install autossh
配置免密登录
ssh-keygen
ssh-copy-id -i .ssh/id_rsa.pub root@123.123.123.123//此地址只用作举例
启动端口(A)
autossh -fNR 8888:localhost:22 -p 40022 root@123.123.123.123//此地址只用作举例
参数解释:
-f:是指autossh后台运行,不会阻塞shell继续向下执行;
-N:是指建立的ssh连接只用于转发数据,不解析命令;
-R:是指建立反向隧道,一般我们ssh某个服务器是正向隧道;
8888:是公网服务器上的代理端口;
localhost:22:是指代理到本机时需要访问的ip和端口,即内网机器A的ip地址+端口;
-p 40022:是外网机器B的ssh端口;
最后是公网服务器的地址,autossh会调用ssh建立到它的ssh反向隧道。
注意:autossh只有三个命令,其他命令都是通过调用ssh提供的,autossh在这里只是起到了监听ssh是否断开并将其自动拉起的作用。执行完这条命令,将会在外网机器(B)123.123.123.123上启动并监听8888端口,如下(外网机器查看)
![](https://img.haomeiwen.com/i15150269/7160233275c3de9d.png)
可知,该端口是默认绑定在lo地址上的,所以在外网机器上反向登陆服务器时,可用localhost或者127.0.0.1,但是不能使用真实网卡的地址去连接。
以上操作,除过查看端口的操作外,其他操作全部在内网机器完成。
2、外网机器连接内网服务器
ssh -p 8888 localhost
或
ssh -p 8888 127.0.0.1
3、添加到系统服务,方便管理
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
- 附:如果启动成功后,使用ps -ef |grep autossh可以看到autossh已经启动,但是在B上却无法连接,也看不到启动的端口,那么一般就是忘记配置ssh免密登陆啦,再检查一下咯。*
- 以上内容仅为个人的理解,有不对的地方欢迎指正*
网友评论