重磅升级云速管多云管理系统 V5.0 重磅发布!新版能力全面升级,全线云账户充值即赠大额代金券,欢迎体验!
平台指南 3 次浏览 Fri, 16 Oc TG @yunshuguoji

亚马逊云国际代理商:AWS EC2 SSH 连不上?安全组放行 22 端口后的全链路排障指南

针对 AWS EC2 实例安全组已放行 22 端口但 SSH 仍无法连接的问题,本文提供全链路排障指南。涵盖 VPC 路由、Internet Gateway、NACL 无状态规则、公网 IP 验证及系统内部 sshd 服务检查,助您快速定位并解决 Connection timed out 与 Connection refused 报错。

相关分类:AWS 亚马逊云

本文由 亚马逊云站代理商『云枢国际@yunshuguoji撰写』如需转载请注明!

在管理 Amazon EC2 实例时,配置安全组(Security Group)放行 TCP 22 端口是基础操作。但即便入站规则已设置为 0.0.0.0/0,仍常遇到 Connection timed out 或 Connection refused 错误。

安全组仅是 AWS 网络安全的一环。一个完整的 SSH 链路涉及客户端网络、公网路由、网关、子网 ACL、实例防火墙及系统服务。本文将按链路顺序执行 EC2 SSH 排障,分析安全组之外的常见断点。

一、 网络外围层:子网路由与 Internet Gateway (IGW)

若 SSH 客户端返回 Connection timed out,通常意味着数据包未到达实例。应首先检查 VPC 路由配置。

1. 检查子网路由表

EC2 实例位于特定的 VPC 子网中,其访问互联网的能力由关联的路由表决定。
- 在 VPC 控制台查看实例所在子网的 Route Table。
- 确认存在目标为 0.0.0.0/0 且下一跳指向 Internet Gateway (IGW)(如 igw-xxxx)的条目。
- 注意:若 0.0.0.0/0 指向的是 NAT 网关,则该子网为私有子网。即使实例有公网 IP,外部也无法主动发起入站 SSH 连接。

2. 确认 IGW 状态

  • 确保 Internet Gateway 已正确附加(Attach)至该 VPC。未附加的 IGW 无法处理流量。

二、 子网边界层:Network ACL (NACL) 的无状态特性

安全组是有状态的(Stateful),而 Network ACL 是无状态的(Stateless)。这是排障中极易忽略的点。

1. 状态差异的影响

  • 安全组:允许入站流量后,响应流量会自动放行。
  • NACL:入站与出站规则独立。即使入站允许了 22 端口,若出站规则未配置,响应包也会被拦截。

2. 临时端口(Ephemeral Ports)配置

SSH 连接时,客户端会使用随机的高位端口作为源端口。
- 排查标准:检查子网关联的 NACL 出站规则。必须允许向目标 IP(或 0.0.0.0/0)发送 TCP 1024-65535 范围的流量。若出站规则缺失,客户端将因收不到回包而超时。

三、 寻址层:公网 IPv4 与 Elastic IP 验证

  1. 公网 IP 分配:确认实例是否具备公网 IPv4 地址。若启动时未启用“自动分配公网 IP”,实例仅有内网地址,无法直接从公网访问。
  2. Elastic IP (EIP) 映射:若使用固定 IP,需确认 EIP 已处于 Associated 状态并绑定至实例的主网卡(eth0)。请核对 SSH 命令中的目标地址是否为该 EIP。

四、 故障速查矩阵

根据报错特征快速定位问题层级:

客户端报错现象常见底层原因优先排查层级建议操作
Connection timed out路由缺失、安全组/NACL 拦截、无公网 IP网络基础设施层检查 IGW 路由、安全组入站规则、NACL 出站临时端口
Connection refused流量已达实例,但端口未监听或被系统拦截操作系统内部检查 sshd 服务状态、系统内防火墙(ufw/iptables)
Permission denied密钥不匹配、权限错误、用户名错误认证与配置层确认私钥文件、执行 chmod 400、核对默认用户名
Host key verification failed实例重建导致公钥变更本地客户端清理 ~/.ssh/known_hosts 中的旧记录

五、 操作系统内部与客户端排查

若网络路径通畅但连接被拒,需检查实例内部配置。

1. 系统防火墙

  • Ubuntu/Debian:检查 ufw 状态,确保已执行 sudo ufw allow 22/tcp。
  • RHEL/CentOS:检查 firewalld,确认放行了 SSH 服务。

2. sshd 服务状态

若 sshd 未运行,内核会返回 RST 包导致 Connection refused。
- 检查服务:systemctl status sshd
- 检查监听:ss -tulpn | grep :22
- 确认 /etc/ssh/sshd_config 中未修改默认端口。

3. 用户名与密钥

  • 默认用户名:Amazon Linux 使用 ec2-user,Ubuntu 使用 ubuntu,Debian 使用 admin。
  • 权限要求:本地私钥文件必须限制权限,否则 SSH 客户端会拒绝加载:chmod 400 key.pem。

4. 应急接入工具

若无法通过 SSH 修复,可使用:
- EC2 Serial Console:基于 Nitro 架构实例的带外连接。
- AWS Systems Manager (SSM) Session Manager:无需公网 IP 和安全组放行 22 端口,直接通过控制台获取 Shell。

六、 常见问题解答 (FAQ)

Q1:AWS VPC是什么,适合哪些场景,选型时要确认什么?

答:AWS VPC 是逻辑隔离的虚拟网络,允许用户自定义网段、子网、路由表和网关。它适合需要网络隔离、多层安全防护或混合云接入的业务。选型时需根据业务规模规划 IP 空间(CIDR),考虑跨可用区的高可用设计,并评估 NAT 网关、EIP 及跨区流量的成本。

Q2:EC2 报 Connection timed out 和 Connection refused 在排障上有何本质区别?

答:Connection timed out(超时)通常发生在网络层,表示数据包在途中被丢弃(如路由缺失、安全组或 NACL 拦截),客户端未收到任何响应。Connection refused(拒绝)则表示数据包已到达实例,但被系统内核拒绝,通常是因为 sshd 服务未启动或系统内部防火墙显式拦截了连接。

Q3:为什么安全组放行了 22 端口,Network ACL (NACL) 依然会导致 SSH 失败?

答:因为安全组是有状态的,回包自动放行;而 NACL 是无状态的,入站和出站规则必须分别配置。SSH 连接需要客户端的高位临时端口接收回包,若 NACL 出站规则未放行 1024-65535 端口,响应包会在子网边界被拦截,导致连接超时。