You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何配置SSH端口转发实现远程用户无需登录宿主机即可直接SSH连接其上的虚拟机

如何配置SSH端口转发实现远程用户无需登录宿主机即可直接SSH连接其上的虚拟机

嗨,我来帮你捋捋问题出在哪!你已经走对了大部分流程,但有几个关键细节没处理到位,导致远程连接被拒绝:

问题根源分析

你之前执行的反向转发命令ssh -4 -R 2222:192.168.7.2:22 127.0.0.1,默认只会把端口绑定在宿主机的**127.0.0.1(本地回环地址)**上。这意味着只有宿主机自己能访问2222端口,外部用户通过公网IP(150.15.15.15)发起的连接根本碰不到这个转发端口,自然会显示“Connection refused”。

正确配置步骤

我把完整的修正步骤拆给你,一步步来:

1. 确保宿主机SSH服务允许端口转发到外部网卡

  • 编辑宿主机的SSH配置文件:sudo nano /etc/ssh/sshd_config
  • 找到GatewayPorts配置项,把它改成GatewayPorts yes(如果之前是注释状态,记得去掉前面的#
  • 重启SSH服务让配置生效:sudo systemctl restart sshd(Ubuntu老版本可以用sudo service ssh restart

2. 创建绑定所有网卡的反向SSH隧道

在宿主机上执行这条命令,重点是加上0.0.0.0:来指定监听所有网卡的2222端口:

ssh -4 -N -R 0.0.0.0:2222:192.168.7.2:22 127.0.0.1
  • -N参数:让SSH只做端口转发,不执行远程命令,避免不必要的终端会话
  • 执行完后用netstat -tulpn检查,应该能看到类似这样的输出(重点是0.0.0.0:2222):
    tcp        0      0 0.0.0.0:2222          0.0.0.0:*               LISTEN      -
    

3. 开放宿主机防火墙的2222端口

如果宿主机开启了防火墙(比如Ubuntu默认的ufw),必须放行2222端口,否则外部连接会被防火墙拦截:

sudo ufw allow 2222/tcp

如果用的是iptables,对应的命令是:

sudo iptables -A INPUT -p tcp --dport 2222 -j ACCEPT

4. 远程用户测试连接

现在远程用户就可以直接通过宿主机的公网IP和2222端口连接虚拟机了:

ssh root@150.15.15.15 -p 2222

额外小技巧:保持隧道稳定

普通SSH隧道如果断开(比如网络波动)就会失效,你可以用autossh工具来自动重连隧道:

  1. 先安装autossh:sudo apt install autossh
  2. 执行这条命令创建持久化隧道:
autossh -M 2223 -N -R 0.0.0.0:2222:192.168.7.2:22 127.0.0.1
  • -M 2223:指定一个监控端口,autossh会通过这个端口定期检查隧道状态,断开后自动重连

备注:内容来源于stack exchange,提问作者JaSON

火山引擎 最新活动