Help us improve the AWS re:Post Knowledge Center by sharing your feedback in a brief survey. Your input can influence how we create and update our content to better support your AWS journey.
运行状况检查通过后,为什么我无法连接到我的 Amazon EC2 Linux 实例?
即使运行状况检查通过,我也无法连接到我的 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 的流量。
本地防火墙设置
检查操作系统级别的防火墙,例如 iptables 或 firewalld。要对阻塞的连接进行故障排除,请检查您的防火墙配置。
与 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 实例进行故障排除?
