需求分析

现状:

  • 服务器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访问
file
默认情况下,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
版权所有,转载注明来源