使用AWS re:Post即您表示您同意 AWS re:Post 使用条款

运行状况检查通过后,为什么我无法连接到我的 Amazon EC2 Linux 实例?

2 分钟阅读
0

即使运行状况检查通过,我也无法连接到我的 Amazon Elastic Compute Cloud (Amazon EC2) Linux 实例。

解决方案

**注意:**最佳做法是保留实例和数据的备份。在进行故障排除或进行更改之前,请创建 AMI创建 EBS 卷的快照

“Connection timeout”(连接超时)错误

要对“ssh: connect to host <hostname> port 22: Connection timed out”(ssh:连接到主机端口 22:连接超时)错误进行故障排除,请检查是否存在以下问题:

安全组、路由或网络 ACL 配置错误
检查安全组入站规则是否允许来自您的源服务器的端口 22。检查出站安全组规则是否允许流向 0.0.0.0/0 的流量。有关安全组规则的详细信息,请参阅从计算机连接到实例的规则

要从本地客户端连接到私有实例,请检查您的本地网络和 Amazon Virtual Private Cloud (VPC) 之间是否存在 VPN 连接。或者,从同一 VPC 或子网内的另一台跳转服务器连接到实例。

如果可以连接,则问题可能出在您的本地客户端和 AWS Site-to-Site VPN 连接上。

如果您有严格的网络访问控制列表(网络 ACL)设置,请检查入口规则是否允许端口 22。检查出口规则是否允许所有流向 0.0.0.0/0 的流量。

本地防火墙设置
检查操作系统级别的防火墙,例如 iptablesfirewalld。要对阻塞的连接进行故障排除,请检查您的防火墙配置

与 SSH 相关的 OOM 问题
检查您的实例是否存在 OOM 问题。如果存在 OOM 错误,则操作系统 (OS) 无响应或严重降级,网络请求超时。要解决与 SSH 相关的 OOM 问题,请检查系统日志和资源使用情况。

检查系统日志:

通过 AWS Systems Manager 或 EC2 Serial Console(如果 SSH 不可用)访问系统日志。

要查看 OOM 消息,请运行以下命令:

dmesg | grep -i oom

要查看 Amazon Linux、RHEL 或 CentOS 系统日志,请运行以下命令:

sudo less /var/log/messages

要查看 Ubuntu 或 Debian 系统日志,请运行以下命令:

sudo less /var/log/syslog

您收到的输出类似于以下示例:

Aug 17 10:00:01 ip-172-31-1-1 kernel: [123456.789012] Out of memory: Kill process 1234 (myprocess) score 950 or sacrifice child
Aug 17 10:00:01 ip-172-31-1-1 kernel: [123456.789013] Killed process 1234 (myprocess) total-vm:500000kB, anon-rss:200000kB, file-rss:50000kB
Aug 17 10:00:01 ip-172-31-1-1 kernel: [123456.789014] oom_reaper: reaped process 1234 (myprocess), now anon-rss:0kB, file-rss:0kB
Aug 17 10:00:01 ip-172-31-1-1 kernel: [123456.789015] OOM killer disabled.

监控资源使用情况:
要监控系统的资源使用情况,请从以下命令中选择:

要检查内存使用情况,请运行以下命令:

 free -m

要检查进程,请运行以下命令:

 top

然后,记下消耗大部分系统资源(例如内存或 CPU)的进程。

要检查交换空间使用情况,请运行以下命令:

 sudo swapon --show

使用 sar 命令检查历史资源使用情况。
如果未安装 sysstat 软件包,请先运行以下命令进行安装:

 sudo yum install sysstat

要查看历史内存使用情况,请运行以下命令:

 sar -r

要查看历史 CPU 使用情况,请运行以下命令:

 sar -u

要确定消耗内存的进程,请运行以下命令:

ps -eo pmem,pid,user,args | sort -k 1 -r | head -10

要检查消耗最多 CPU 的进程,请运行以下命令:

ps -eo pid,user,ppid,cmd,%mem,%cpu --sort=-%cpu | head

检查根卷使用率是否为 100%:

df -Th

如果您预计会有更高的资源使用量,但看不到,请升级您的实例类型。有关详细信息,请参阅使用系统活动报告器 (SAR) 监控性能配置监控工具

如果未为该实例配置串行控制台,则请参阅 EC2 Serial Console 访问将其激活。

如果您无法使用串行控制台,请使用救援实例来调查系统日志。请参阅步骤 1-8 对操作系统级别的问题进行故障排除,然后检查 /var/log/messages/varlog/syslog

“Connection refused”(连接被拒绝)错误

如果您收到“Connection refused”(连接被拒绝)错误,请通过串行控制台连接到实例以对问题进行故障排除

“Host key verification failed”(主机密钥验证失败)错误

如果您收到“Host key verification failed”(主机密钥验证失败)错误,则 SSH 客户端检测到服务器主机密钥与先前存储的密钥不匹配。当服务器的主机密钥由于服务器重新安装或安全问题而发生更改时,就会出现这种情况。

移除旧的主机密钥
要修复验证错误,请从 known_hosts 文件中移除过时或不正确的主机密钥。
该文件位于基于 Unix 的系统(Linux、macOS)上的 ~/.ssh/known_hosts 或 Windows 上的 C:\Users\YourUsername\.ssh\known_hosts

要从 known_hosts 文件中删除与指定主机名或 IP 地址关联的旧主机密钥条目,请运行以下命令:

 ssh-keygen -R your hostname or IP address

**注意:**将 YourUsername 替换为您的用户名。将 your hostname or IP address(您的主机名或 IP 地址)替换为要连接的服务器的地址。

重新连接到服务器
删除旧的主机密钥后,使用 SSH 重新连接到服务器。验证新的主机密钥指纹。接受新的主机密钥以将其添加到 known_hosts 文件中。

“Permission Denied (publickey)”(权限被拒绝(公钥))错误

如果您收到“Permission Denied (publickey)”(权限被拒绝(公钥))错误,则 SSH 客户端无法使用提供的凭证通过服务器进行身份验证。要对该错误进行故障排除,请确保该实例的私钥和用户名正确

会话管理器自动检查常见的 SSH 问题

如果实例配置了会话管理器,请运行 AWSSupport-TroubleshootSSH 自动化运行手册。该运行手册将安装适用于 Linux 的 Amazon EC2Rescue 工具。然后,运行手册使用该工具检查或修复阻止通过 SSH 远程连接到 Linux 计算机的常见问题。

相关信息

如何对因操作系统问题而未能通过实例状态检查的 EC2 Linux 实例进行故障排除?

为什么我的 EC2 Linux 实例无法访问并且其状态检查失败?

为什么无法使用会话管理器连接到 Amazon EC2 实例?

AWS 官方
AWS 官方已更新 3 个月前