如何解决AWS EC2中SSH端口22连接超时错误
解决AWS EC2 SSH连接超时的问题
这种SSH连接超时的情况我碰到过好多次,大概率是网络或者EC2的配置问题,咱们一步步来排查:
1. 优先检查EC2安全组配置(最常见原因)
这是90%以上SSH超时问题的根源:
- 登录AWS控制台,找到你的EC2实例,点击实例详情里的安全组链接
- 进入安全组的「入站规则」页面,确认存在一条规则:
- 类型:SSH(端口22)
- 源:填写你的本地公网IP(可以通过搜索引擎查询,格式如
xxx.xxx.xxx.xxx/32),如果不确定可以临时用0.0.0.0/0测试(注意:测试完成后一定要改回你的IP,否则会暴露SSH端口给所有人)
- 添加或修改规则后,等待1-2分钟再尝试SSH连接
2. 检查子网的网络ACL(容易被忽略)
如果安全组没问题,就看看网络ACL:
- 在EC2控制台找到实例所在的子网,查看关联的网络ACL
- 确认入站规则允许22端口的TCP流量(源任意或你的IP)
- 确认出站规则允许临时端口(1024-65535)的TCP流量(这是SSH响应需要的)
3. 验证实例的公网IP和状态
- 确保EC2实例处于running状态,并且有有效的公网IP(或弹性IP)
- 用
ping ec2-XX-XX-XX-XX.compute-1.amazonaws.com测试域名解析的IP是否和实例的公网IP一致,如果解析错误,可能是DNS问题或者实例的公网IP已经更换
4. 排查本地网络限制
很多时候是本地网络的问题:
- 切换到手机热点再尝试连接,排除公司/家庭路由器屏蔽22端口的可能
- 检查本地防火墙(比如Windows防火墙)是否阻止了SSH的出站流量
- 用
telnet ec2-XX-XX-XX-XX.compute-1.amazonaws.com 22测试端口连通性,如果telnet也超时,说明本地到EC2的22端口链路不通
5. 其他次要排查项
- 密钥权限:虽然你是超时不是权限错误,但还是确认下GitBash里密钥文件的权限:
chmod 600 portfolioec2key.pem,权限不对会导致SSH报错,但不是超时 - 实例初始化:如果是刚启动的实例,可能还在初始化系统,等3-5分钟再尝试
- 实例内部防火墙:如果能通过AWS Systems Manager的Session Manager连接到实例,检查Ubuntu的ufw状态:
sudo ufw status,默认ufw是关闭的,如果开启了要确保允许22端口
按照这个顺序排查,基本能解决问题。
内容的提问来源于stack exchange,提问作者Walluri




