第一步、登陆外网服务器,开放外网服务器端口
修改ssh配置文件
vim /etc/ssh/sshd_config
将下面的注释取消,并且修改为下面的结果,直接添加进去也行
GatewayPorts yes
TCPKeepAlive yes
ClientAliveInterval 60
ClientAliveCountMax 3
重启sshd服务
systemctl restart sshd
在阿里防火墙规则中添加一个端口
第二步、登陆内网服务器
安装autossh
centos服务器请使用yum安装,最好先yum update更新一下软件包索引缓存
yum install autossh -y
ubuntu服务器请使用apt安装,最好先apt update更新一下软件包索引缓存
apt install autossh -y
为了方便后面使用,我们先实现内网服务器无密码登陆外网服务器
ssh生成公钥和私钥文件
ssh-keygen -t rsa
3次回车即可(如果之前使用过则输入y覆盖原文件即可,然后一直回车即可,也可不覆盖直接将公钥发给外网服务器)
将公钥发给外网服务器
通过命令将公钥传给外网服务器
分别是外网服务器的
用户名:root
.和外网服务器地址:huashengshu.top
需要输入密码
(以后输入ssh root@huashengshu.top就不用输密码)
ssh-copy-id root@huashengshu.top
第三步通过内网服务器的autossh与外网服务器开放的端口建立连接
还是在内网服务器内操作!
下面的60003
是内网服务器端口,用来监听连接状态用的。8888
是前面防火墙添加的开放端口8080
是内外服务器对外提供服务的端口
-f 选项时后台运行
autossh -M 60003 -NR 60002:127.0.0.1:8080 root@huashengshu.top -f
前面设置了无密登陆,所以不需要输入密码。
如果没有设置无密登陆会要求输入密码,并且每次连接都需要输入密码
如果报错信息提示
Warning: remote port forwarding failed for listen port 外网端口号
则说明外网服务外网端口好被占用,登陆外网服务器通过netstat -nltp查看对应端口的PID
再通过kill -9 PID 杀死该进程。重新在内网服务器输入命令即可
验证
输入外网服务器地址 huashengshu.top
端口60002
优点
可以实现一台外网服务器,进行多台服务器的内网穿透。而且操作简单
缺点
依然需要一台外网服务器,既然有外网服务器对于一般的用户没必要这样做。
唯一的好处在于,内网服务器可以提供更好的性能做计算,而外网服务器只是一个流量转发。
在分布式系统中可以使用自己的内网服务器部署集群环境,然后需要的时候进行内网穿透。
最后一步、开机自启连接60002端口
开机自启示例
只需要将例子中的倒数第二行node的命令替换成
autossh -M 60003 -NR 60002:127.0.0.1:8080 root@huashengshu.top -f
即可