需求分析
现状:
- 服务器A 192.168.1.3(有公网地址)
- 服务器B 192.168.1.7(没有公网地址)
- 服务器A和B在同一个局域网内
需求:
用户需要在异地通过ssh访问没有公网地址的服务器B
配置
配置服务器B:
ssh -R 0.0.0.0:10024:localhost:22 root@192.168.1.3 -N -f
这会通过服务器A创建一个反向隧道,将服务器B的SSH服务(端口22)映射到服务器A的10024端口。接下来,用户可以通过服务器A的公网地址访问服务器B的SSH服务。
在服务器B上,检查隧道是否正常运行:
ps aux | grep ssh
看到有以下进程则证明正常运行
root 3788 0.0 0.0 14312 5852 ? Ss May08 0:00 ssh -R 10024:0.0.0.0:22 root@192.168.1.3 -N -f
配置服务器A
编辑 /etc/ssh/sshd_config,确认以下配置:
GatewayPorts yes
重启服务
sudo systemctl restart sshd
检查服务器A的防火墙,允许10024端口的入站连接
sudo ufw allow 10024
或者其他防火墙工具,确保允许10024端口访问
检查是否正常监听:
netstat -ntlp | grep 10024
如果看到的如下图所示,则10024无法被其他IP访问

默认情况下,SSH 的反向隧道(-R)只会绑定到 127.0.0.1,这是为了安全起见,防止未经授权的外部访问。
确保在服务器B上执行的是
ssh -R 0.0.0.0:10024:localhost:22 root@192.168.1.3 -N -f
如果有安全组,要放行10024端口
使用
假设服务器A的公网IP是 203.0.113.10,用户在异地可以通过以下命令访问服务器B:
ssh -p 10024 user@203.0.113.10
版权所有,转载注明来源

评论(0)