自从我们的 EC2 实例中的 1 个几天以来,我一直在连接超时。
我之前能够连接到 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 上远程登录到一个工作实例,没有问题像魅力一样工作,但是到有问题的实例的远程登录不起作用,它只是挂起。
- iptables 没有被修改(据我所知,我是唯一可以连接到实例的人,但我没有这样做)
- 检查密钥对所有者和文件权限是否处于预期值
- 尝试使用终端而不是客户端进行 SSH,结果相同
- 检查了系统日志(这可以通过 EC2 仪表板获得)并且没有错误,系统启动正常,apache2 正在运行并且站点可以访问。
服务器正在运行 ubuntu 18.04,我们完成了更新和默认升级。
我不确定我还能做什么,但如果有人有任何建议或需要更多信息,我会很乐意提供。
谢谢你。
检查是否允许端口 22 上的出站连接通过 AWS 防火墙和计算机上的 iptables。您可以使用检查所有 iptables 规则
iptables -nvL
。确保 iptables 中的输出链设置为 ALLOW 而不是 DROP,或者确保为输出链配置了允许新的、已建立的和相关连接的正确规则。
或者,执行 a
netstat -npl
并检查 SSH 正在侦听的确切位置。如果您将其绑定到一个已更改的非弹性 IP 地址,则会遇到问题。编辑:由于您提到您无法通过 SSH 访问发出命令,您可以使用 AWS 控制台发出这些命令并观察它们的输出:
https://docs.aws.amazon.com/systems-manager/latest/userguide/rc-console.html