从几天前开始,我们的其中一个 EC2 实例就出现连接超时的情况。
我之前能够连接到 SSH,但突然它停止工作了。服务器仍在运行,HTTPS 工作正常,我可以通过浏览器访问服务,但无法使用 SSH。
以下是我迄今为止尝试过的步骤:
- 使用密钥对从 PAC(Linux SSH 客户端)进行 SSH:超时。之前可以正常工作,连接没有变化
- 使用公共主机从另一个 EC2 实例进行 SSH。获取超时
- 使用私有 IP 从另一个 EC2 实例进行 SSH。获取超时
- 然后我停止/启动了该实例,获取了一个新的 IP,更改了路由 53 中的信息,站点恢复运行,但使用上述步骤的 SSH 仍然不起作用。
- 我检查了安全组(以防万一它以某种方式发生变化),端口 22 被允许入站。另一个运行良好的实例使用了相同的安全组。
- 我还把我的 IP 添加到组中以防万一,但仍然不起作用。我在同一个可用区中有 4 个实例,但有问题的实例具有不同的 IP 范围(之前也不同)有问题的公共 IP 以 35.182 开头。其他 3 个正常工作的实例公共 IP 以 99.79 开头。
我按照以下链接中的故障排除步骤进行操作:https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/TroubleshootingInstancesConnecting.html
连接到您的实例时出错:连接超时
- 检查您的安全组规则。您需要一个安全组规则,允许来自您的公共 IPv4 地址的正确端口上的入站流量。如上所述,附加的安全组已允许端口 22 入站
- 检查子网的路由表。您需要一条路由,将所有发往 VPC 外部的流量发送到 VPC 的互联网网关。有一个互联网网关连接到我的 VPC(与我的其他实例相同的 VPC)
- 检查子网的网络访问控制列表 (ACL)。网络 ACL 必须允许来自本地 IP 地址的正确端口上的入站和出站流量。默认网络 ACL 允许所有入站和出站流量。检查并使用默认设置,0.0.0.0/0 的所有流量和端口均被允许
- 如果您的计算机位于公司网络中,请询问您的网络管理员内部防火墙是否允许从您的计算机通过端口 22(对于 Linux 实例)或端口 3389(对于 Windows 实例)进行入站和出站流量。如果您的计算机上有防火墙,请验证它是否允许从您的计算机通过端口 22(对于 Linux 实例)或端口 3389(对于 Windows 实例)进行入站和出站流量。我可以连接到其他实例,但这不相关。
- 检查您的实例是否具有公共 IPv4 地址。如果没有,您可以将弹性 IP 地址与您的实例关联。有关更多信息,请参阅弹性 IP 地址。该实例包含一个公共 ipv4 地址,还有一个公共 DNS,这是我可以看到此实例与其他实例之间的区别的地方,这个特定实例是唯一一个具有以 35.182 开头的公共 IP 的实例。而其他实例都以 99.79 开头。这以前不是问题,因为 IP 也不同,这是否以某种方式相关?
- 检查实例上的 CPU 负载。CPU 负载和其他一切都正常,没有维持峰值。
以下是我做过的一些事情:
- 通过端口 22 进行 telnet 连接到正在运行的实例,没有任何问题,但是通过 telnet 连接到有问题的实例却不起作用,它只是挂起了。
- iptables 没有被修改(据我所知,我是唯一一个可以连接到实例的人,但我没有这样做)
- 检查密钥对所有者和文件权限是否达到预期值
- 尝试使用终端而不是客户端进行 SSH,结果相同
- 检查了系统日志(可以通过 EC2 仪表板获取),没有错误,系统启动正常,apache2 正在运行并且站点可以访问。
服务器正在运行 ubuntu 18.04,我们已完成更新和默认升级。
我不确定我还能做什么,但如果有人有任何建议或需要更多信息,我会很乐意提供。
谢谢。
答案1
检查是否通过 AWS 防火墙和计算机上的 iptables 允许端口 22 上的出站连接。您可以使用 检查所有 iptables 规则iptables -nvL
。
确保 iptables 中的输出链设置为 ALLOW 而不是 DROP,或者确保配置了允许输出链的新建、已建立和相关连接的适当规则。
或者,执行netstat -npl
并检查 SSH 究竟在监听什么。如果您已将其绑定到此后已更改的非弹性 IP 地址,则会出现问题。
编辑:由于您提到您无权通过 SSH 发出命令,因此您可以使用 AWS 控制台发出这些命令并观察其输出:
https://docs.aws.amazon.com/systems-manager/latest/userguide/rc-console.html