无法SSH连接已接管的EC2实例,寻求排查解决方案
EC2实例SSH连接失败的排查方法
检查安全组与网络ACL配置
- 确认实例安全组的入站规则允许TCP 22端口,来源包含你的公网IP(或临时用
0.0.0.0/0测试);出站规则允许所有响应流量(如1024-65535端口)。 - 检查实例所在子网的网络ACL,入站规则需放行22端口,出站规则放行所有返回流量,避免数据包被拦截。
- 确认实例安全组的入站规则允许TCP 22端口,来源包含你的公网IP(或临时用
修正本地私钥文件权限
- SSH对私钥权限要求严格,你设置的
004权限过于限制,执行命令修改权限:chmod 0600 ~/.ssh/NewKeyName.pem - 修改后重新尝试SSH连接。
- SSH对私钥权限要求严格,你设置的
验证实例内部的authorized_keys配置
- 若能通过挂载根卷到其他EC2实例的方式访问目标实例的文件系统,检查
/home/rt/.ssh/authorized_keys是否包含新密钥对的公钥。 - 可通过AWS CLI获取新密钥对的公钥:
aws ec2 describe-key-pairs --key-name NewKeyName --query 'KeyPairs[0].PublicKey' --output text - 确保公钥完整写入authorized_keys,且文件权限为
0600,所有者为rt用户。
- 若能通过挂载根卷到其他EC2实例的方式访问目标实例的文件系统,检查
排查EC2 Instance Connect失败原因
- 确认实例所在子网具备互联网访问能力(或配置了NAT网关),因为EC2 Instance Connect需要实例连接AWS服务端点。
- 检查实例的IAM角色(若有)或你的IAM用户是否拥有
ec2-instance-connect:SendSSHPublicKey权限。 - 对于非Amazon Linux的系统(如Ubuntu),确认实例已安装
ec2-instance-connect包:sudo apt-get install ec2-instance-connect
检查串行控制台的访问条件
- 确认实例已启用串行控制台访问(在实例设置中开启)。
- 验证你的IAM用户拥有
ec2:StartInstanceConsoleSession权限。 - 查看实例的状态检查结果,若系统状态检查失败,可能是实例硬件或系统启动异常,需先修复实例运行状态。
通过用户数据注入公钥(需重启实例)
- 停止目标实例,编辑用户数据,添加以下内容(替换为你的公钥内容):
#!/bin/bash echo "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQ..." >> /home/rt/.ssh/authorized_keys chmod 600 /home/rt/.ssh/authorized_keys chown rt:rt /home/rt/.ssh/authorized_keys - 启动实例,等待5-10分钟后尝试SSH连接。
- 停止目标实例,编辑用户数据,添加以下内容(替换为你的公钥内容):
检查实例状态与系统日志
- 在AWS控制台查看实例的状态检查,确认系统状态和实例状态均通过。
- 获取实例的系统日志,检查是否有sshd启动失败、文件系统损坏、用户不存在等异常信息,定位启动或服务故障。
确认SSH连接用户名正确性
- 不同AMI的默认用户名不同:Amazon Linux为
ec2-user,Ubuntu为ubuntu,CentOS为centos。尝试使用默认用户名连接,验证rt是否为实例上存在的有效用户。
- 不同AMI的默认用户名不同:Amazon Linux为
内容的提问来源于stack exchange,提问作者UnknownFrequency
相关产品推荐
相关产品推荐

