You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AWS EC2实例SSH反向端口转发外部访问失败问题排查

SSH反向端口转发外部访问失败排查思路

问题概述

此前可通过SSH反向端口转发将本地9999端口映射至远程AWS EC2实例的9999端口并正常使用,但新创建EC2实例后仅部分功能可用:

  • 本地执行curl "127.0.0.1:9999"可正常访问本地服务
  • 反向转发命令ssh -R 9999:localhost:9999 -i "/home/example/XXX.pem" ubuntu@ec2-xx-xx-xx-xx-xx.compute.amazonaws.com可成功建立连接,在该SSH会话内执行curl "127.0.0.1:9999"能访问本地服务
  • 外部执行curl "ec2-xx-xx-xx-xx-xx.compute.amazonaws.com:9999"提示curl: (7) Failed to connect to ec2-xx-xx-xx-xx-xx.compute.amazonaws.com port 9999 after 59 ms: Connection refused
  • EC2安全组已开放TCP 9999端口允许0.0.0.0/0访问,且80端口(Apache2)可正常被外部访问
  • 已关闭UFW防火墙,问题仍存在
  • 反向转发会话内执行php -S 0.0.0.0:9999 -t .提示端口被占用,但普通SSH会话启动该服务后,外部可正常访问EC2的9999端口

排查步骤

1. 检查SSH反向转发的绑定地址

默认情况下,ssh -R 9999:localhost:9999仅会将转发端口绑定到EC2的127.0.0.1回环地址,仅本地会话可访问,外部无法连接。需调整配置让端口绑定到所有网卡:

  • 临时测试:修改转发命令,明确指定绑定到0.0.0.0:
    ssh -R 0.0.0.0:9999:localhost:9999 -i "/home/example/XXX.pem" ubuntu@ec2-xx-xx-xx-xx-xx.compute.amazonaws.com
    
  • 持久化配置:编辑EC2实例的/etc/ssh/sshd_config,确保GatewayPorts参数设置为yes或clientspecified(clientspecified允许客户端指定绑定地址),修改后重启sshd服务:
    sudo systemctl restart sshd
    

2. 验证EC2上端口的监听状态

在EC2的普通SSH会话中,执行以下命令查看9999端口的监听地址:

ss -tulpn | grep 9999
# 或兼容旧系统的命令:
netstat -tulpn | grep 9999
  • 如果结果显示127.0.0.1:9999,说明转发仅绑定回环,外部无法访问;
  • 如果显示0.0.0.0:9999,则端口已对外开放,可排除绑定地址问题。

3. 确认sshd服务的转发权限

检查EC2的全局sshd配置,确保TCP转发未被禁止:

  • 编辑/etc/ssh/sshd_config,确认AllowTcpForwarding参数设置为yes(默认通常为yes,但需排查是否被修改);
  • 同时检查PermitOpen参数,确保未限制转发到9999端口。

4. 测试简化版转发命令

尝试添加-N参数(仅建立端口转发,不执行远程shell命令),避免会话内其他进程干扰:

ssh -N -R 0.0.0.0:9999:localhost:9999 -i "/home/example/XXX.pem" ubuntu@ec2-xx-xx-xx-xx-xx.compute.amazonaws.com

执行后在外部再次测试访问EC2的9999端口。

5. 排查用户级SSH配置限制

检查EC2上登录用户的~/.ssh/config文件,是否存在限制端口转发的配置(比如GatewayPorts的用户级覆盖),如有则注释或删除相关规则。


内容的提问来源于stack exchange,提问作者bob dylan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 01:15:54