解决问题:内网主机没有公网IP,无法从外网登录
流程
首先去阿里云租一台最便宜的服务器作为中转服务器
登录中转服务器(cloudserver)
ssh [cloudserver]
# 开放对应中转服务
ufw allow [remote_port] #remote_port 2222
vim /etc/ssh/sshd_config
将对应的GatewayPorts
改为Yes
, 即开启中转服务
重启ssh服务
systemctl restart ssh
登录我们内网的机器
使用
ssh -f -N -T -R [remote_port]:localhost:22 [cloudserver]
其他机器登录内网机器
ssh -p [remote_port] [cloudserver]
配置自动重连
在配置之前先关掉之前2222端口进程
lsof -i :2222
杀掉进程
kill [pid]
然后内网机器使用:
autossh -M 0 -f -N -T -q -o "ServerAliveInterval 60" -o "ServerAliveCountMax 3" -R [remote_port]:localhost:22 [cloudserver]
-M 0
:这个选项用于设置控制连接的监视端口。0
表示不启用控制连接。在这种配置下,autossh
仅依赖于 SSH 本身的 ServerAlive 机制(见后文)来检测连接状态。-f
:此选项告诉autossh
在建立连接后将自身放入后台运行。即使你关闭终端,autossh
仍会继续运行-N
:这个选项告诉 SSH 不要执行远程命令。因为我们只需要创建一个端口转发,而不需要在远程主机上执行命令,所以使用-N
。-T
:禁用伪终端分配。因为我们只关心端口转发,所以不需要分配一个伪终端。-q
:这个选项告诉autossh
以安静模式运行。在这种模式下,autossh
不会输出任何信息,除非发生错误。-o
"ServerAliveInterval 60"
:这个选项设置了 SSH 客户端向服务器发送空闲数据包的频率,以保持连接活跃。在这里,我们设置了 60 秒发送一次。如果在指定时间内没有其他数据包通过连接,客户端会自动发送一个数据包。-R [remote_port]:localhost:22
:这是 SSH 反向代理的关键选项。-R 表示反向代理,[remote_port] 是中转服务器上用于监听请求的端口,localhost:22 表示内网主机的 SSH 服务地址。将流量从中转服务器的 [remote_port] 转发到内网主机的端口 22(SSH 服务默认端口)。
REFERENCE
up