Skip to content

救援无法登录的 EC2 实例

项目说明
难度初级
预计时间15-30 分钟
使用环境Ubuntu 24.04 LTS
最后更新2025-12

当 EC2 实例因以下原因无法通过 SSH 登录时,使用 SSM Session Manager 进行救援:

  • 丢失 SSH 密钥
  • 忘记用户密码
  • SSH 服务配置错误
  • 防火墙或安全组配置错误

在执行救援操作前,确认以下条件已满足:

  1. 实例已安装 SSM Agent(Ubuntu 24.04 官方 AMI 默认预装)
  2. 实例已附加包含 AmazonSSMManagedInstanceCore 策略的 IAM 实例角色
  3. 实例可访问 SSM 服务端点(通过公网、NAT Gateway 或 VPC Endpoint

验证 SSM 连接状态

在 AWS 控制台进入 Systems Manager > Fleet Manager,确认目标实例状态为 “Online”。

Fleet Manager 实例状态截图


最佳实践:使用 AWS 控制台

  1. 进入 EC2 > 实例,选择目标实例
  2. 点击 连接 > Session Manager > 连接

Session Manager 连接按钮截图

连接成功后进入 ssm-user 会话,执行以下命令切换到 root:

sudo -i

场景:原始密钥对丢失,需添加新公钥。

操作步骤

  1. 在本地生成新密钥对(如已有可跳过)
  2. 通过 Session Manager 连接实例
  3. 将新公钥追加到目标用户的授权文件
echo "ssh-rsa AAAA...你的公钥内容..." >> /home/ubuntu/.ssh/authorized_keys
  1. 确保文件权限正确
chmod 600 /home/ubuntu/.ssh/authorized_keys
chown ubuntu:ubuntu /home/ubuntu/.ssh/authorized_keys

验证

使用新密钥通过 SSH 连接实例,确认登录成功。


场景:需要密码登录但已遗忘。

操作步骤

  1. 通过 Session Manager 连接实例并切换到 root
  2. 重置目标用户密码
passwd ubuntu
  1. 按提示输入两次新密码

验证

如果实例启用了密码登录,使用新密码通过 SSH 连接验证。


场景:修改 /etc/ssh/sshd_config 后 SSH 服务无法启动。

操作步骤

  1. 通过 Session Manager 连接实例
  2. 检查 SSH 服务状态
systemctl status sshd
  1. 检查配置文件语法
sshd -t
  1. 根据错误提示修复配置文件,常见问题包括:

    • 拼写错误
    • 无效的参数值
    • 缺少必要的配置项
  2. 修复后重启 SSH 服务

systemctl restart sshd

验证

systemctl status sshd

确认状态为 active (running),然后通过 SSH 连接测试。


场景:iptables/ufw 规则或安全组阻止了 SSH 连接。

操作步骤

  1. 通过 Session Manager 连接实例
  2. 检查当前防火墙状态
# 检查 ufw
ufw status
# 检查 iptables
iptables -L -n
  1. 根据情况选择修复方式:

方式一(最佳实践):允许 SSH 端口

ufw allow 22/tcp

方式二:临时禁用防火墙

ufw disable

验证

通过 SSH 连接实例,确认可以正常登录。

操作步骤

  1. 进入 EC2 > 安全组
  2. 找到实例关联的安全组
  3. 在入站规则中添加:
    • 类型:SSH
    • 端口:22
    • 来源:你的 IP 或所需 CIDR

验证

通过 SSH 连接实例,确认可以正常登录。


Q: Session Manager 无法连接,实例显示 “Offline”

检查以下项目:

  1. 确认 IAM 角色已正确附加且包含 AmazonSSMManagedInstanceCore 策略
  2. 确认实例可以访问 SSM 端点(检查路由表、NAT Gateway 或 VPC Endpoint 配置)
  3. 通过 EC2 Serial Console 检查 SSM Agent 是否运行

Q: 修改 authorized_keys 后仍无法 SSH 登录

检查以下项目:

  1. 确认公钥格式正确,无换行或多余空格
  2. 确认文件权限为 600,目录权限为 700
  3. 确认 SELinux 未阻止访问(Ubuntu 默认未启用)

Q: 重置密码后仍无法使用密码登录

SSH 默认禁用密码登录。如需启用,修改 /etc/ssh/sshd_config

PasswordAuthentication yes

然后重启 sshd 服务。