运行状况检查通过后,为什么我无法连接到我的 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 实例进行故障排除?
相关内容
- 已提问 5 个月前lg...
- AWS 官方已更新 3 年前
- AWS 官方已更新 2 个月前
- AWS 官方已更新 3 个月前
- AWS 官方已更新 1 年前