本文针对 Linux 实例 SSH 连接排查,Windows 实例请使用 RDP 远程桌面。大多数连接超时是因为安全组规则未放行 SSH 端口或实例缺少公网 IP,建议优先在 AWS 控制台检查安全组入站规则。
先说结论:连接超时通常意味着网络包被丢弃,重点排查安全组、网络 ACL 和实例公网地址。
- 先确认安全组是否允许你的本地 IP 访问 22 端口
- 先处理实例状态和路由表配置确保网络可达
- 再验证本地网络是否存在拦截或 DNS 问题
命令速用版
在本地终端执行以下命令,观察卡顿在哪一步:
ssh -v -i your-key.pem ec2-user@your-instance-ip若命令卡在 connecting 阶段,典型超时输出如下:
debug1: Connecting to 54.123.45.67 [54.123.45.67] port 22.
debug1: connect to address 54.123.45.67 port 22: Operation timed out如果希望单纯测试端口连通性,可以使用 nc(推荐)或 telnet:
nc -vz your-instance-ip 22
telnet your-instance-ip 22注意:现代 macOS 和 Windows 默认可能未安装 telnet,若命令不存在,macOS 需执行 brew install telnet,Linux 需执行 yum install telnet 或 apt install telnet。
为什么会这样
Connection timed out 表示客户端发出的请求没有在指定时间内收到服务器的响应,数据包可能在途中被丢弃。在 AWS EC2 环境中,常见原因包括:
- 安全组(Security Group):相当于实例级别的防火墙,如果入站规则没有放行你的 IP 访问 22 端口,包会被直接丢弃。
- 网络 ACL(Network ACL):相当于子网级别的防火墙,规则配置错误可能拦截流量。
- 路由表(Route Table):如果子网没有关联互联网网关(IGW),实例无法与公网通信。
- 实例状态:实例未运行、正在停止或系统状态检查失败,也会导致无法连接。
分步处理
第一步:检查实例状态和公网 IP
登录 AWS 控制台,进入 EC2 仪表板 -> 实例。选中目标实例,查看下方描述标签页,确认公有 IPv4 地址字段有值。如果没有公网 IP,且不在内网环境中,你需要绑定弹性 IP 或通过 bastion 主机跳转。
第二步:检查安全组入站规则
在实例详情页点击安全组 ID,查看“入站规则(Inbound rules)”。确保有一条规则允许 TCP 端口 22,来源设置为你的本地公网 IP 地址(例如 123.123.123.123/32)。生产环境严禁使用 0.0.0.0/0,仅限临时调试且需立即收回,否则极易遭受暴力破解攻击。
第三步:检查网络 ACL 和路由表
进入 VPC 控制台,找到实例所在的子网。检查关联的网络 ACL,确保入站和出站规则允许 ephemeral ports(临时端口)和 SSH 端口。检查路由表,确保有一条指向 internet-gateway 的路由(0.0.0.0/0 -> igw-xxx)。
第四步:本地防火墙与网络自查
若 AWS 侧配置无误,检查本地环境是否拦截出站流量:
- Windows:打开控制面板 -> Windows Defender 防火墙 -> 允许应用通过防火墙,确认终端软件(如 PowerShell 或 Putty)未被拦截。
- macOS:系统设置 -> 网络 -> 防火墙,尝试暂时关闭测试。
- 公司网络:部分公司网络策略拦截 22 端口,尝试切换手机热点验证。
第五步:使用 EC2 实例连接或 SSM
如果 SSH 始终不通,可以尝试在控制台使用“实例连接(EC2 Instance Connect)”功能,这需要实例上安装了相关代理且安全组放行。如果配置了 Systems Manager (SSM),可以通过会话管理器登录,无需开放 SSH 端口。
怎么验证是否生效
执行 nc 或 telnet 命令,如果屏幕显示 Connected 或出现 SSH 版本信息,说明网络层已通:
nc -vz your-instance-ip 22执行 SSH 命令,如果能成功登录看到命令行提示符,说明问题解决。如果仍然超时,请在本地网络更换热点或网络环境再次尝试,排除本地运营商拦截。
常见坑
- ssh -v 输出解读:若卡在
Connecting to...通常是网络不通(安全组/路由);若卡在Authenticating...通常是密钥或权限问题。 - 编辑了错误的安全组:实例可能关联了多个安全组,确保修改的是实际生效的那个。
- 本地 IP 变动:家庭宽带公网 IP 可能变化,导致之前白名单失效,超时再次出现。
- NACL 临时端口:出站规则需要允许高位临时端口(1024-65535),否则回包被拦,表现为超时。
- 实例过载:极高负载可能导致 SSH 守护进程无法及时响应,表现为超时,需通过控制台监控查看 CPU 和状态检查。
参考来源
- AWS Official Documentation, Troubleshooting connecting to your Linux instance, https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/TroubleshootingInstancesConnecting.html
- AWS Official Documentation, Security groups for your VPC, https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/security-group-rules.html