Amazon EC2运行实例无法SSH及80端口访问求助
Hey there, let's work through this EC2 connectivity issue step by step—since you could access it before, we can narrow down the most likely culprits.
排查EC2实例SSH与HTTP访问故障的分步指南
1. 先确认实例基础状态与网络标识
- 检查EC2实例的系统状态检查和实例状态检查:在EC2控制台的实例详情页「状态检查」标签下,确保两项均显示「正常」。若有失败,优先尝试软重启实例,无效再进行硬重启操作。
- 核实实例公网IP是否变更:如果实例未绑定弹性IP,重启后普通公网IP可能会改变,确认你当前使用的IP与实例面板显示的公网IP一致。
2. 重新核验安全组与网络ACL配置
虽然你提到安全组已启用SSH入站规则,还是建议再仔细核对:
- SSH规则的源地址:确认规则中的源IP是你当前的本地公网IP(若更换了网络环境,本地IP可能已变化)。排查阶段可临时添加
0.0.0.0/0作为源地址测试(测试完成后务必删除,避免安全风险)。 - HTTP(80端口)入站规则:检查安全组是否存在允许
0.0.0.0/0或你的本地IP访问80端口的规则。 - 子网网络ACL:网络ACL是子网层面的防火墙,默认允许所有出入站流量,但如果被修改过,可能会阻断22/80端口。确保入站规则允许22、80端口,出站规则允许1024-65535端口的响应流量。
3. 排查实例内部的服务与防火墙状态
因为之前能正常访问,大概率是实例内部配置出现了变化:
- 若实例已启用串行控制台,可通过EC2控制台直接登录,检查以下内容:
- SSH服务状态:运行
systemctl status sshd(systemd系统)或service ssh status(SysVinit系统),确认服务是否正常运行、有无报错日志。 - 本地防火墙设置:执行
ufw status(Ubuntu)或firewall-cmd --list-all(CentOS/RHEL),核实是否存在阻断22/80端口的规则。 - HTTP服务状态:运行
systemctl status nginx或systemctl status httpd,查看服务是否正常启动、是否绑定了80端口。
- SSH服务状态:运行
- 若串行控制台无法登录,可创建实例卷的快照,将快照挂载到另一台正常运行的EC2实例上,检查系统日志(如
/var/log/auth.log、/var/log/syslog),查找SSH或网络相关的错误信息。
4. 利用ssh -vvvv输出精准定位问题
你提到的ssh -vvvv输出是关键排查依据,不同阶段的报错对应不同问题:
- 若输出停在
connect to host X.X.X.X port 22: Connection timed out:基本可判定是网络层面的阻断(安全组、网络ACL或路由问题)。 - 若停在
Permission denied (publickey):大概率是密钥权限或~/.ssh/authorized_keys文件被修改(比如权限设置错误、密钥被移除)。 - 若停在
Host key verification failed:可能是实例主机密钥发生变化(如系统重装),可删除本地~/.ssh/known_hosts中对应IP的条目后重试。
如果能提供ssh -vvvv的完整输出,就能更快锁定问题根源啦!
内容的提问来源于stack exchange,提问作者Prabhat Subedi
相关产品推荐
相关产品推荐

