丢失AWS Key Pair如何替换?运行中EC2实例密钥对替换求助
AWS EC2实例丢失密钥对恢复方案
以下方案均不会销毁正在运行实例的原有数据,可根据你的实际环境选择:
方案1:通过AWS Systems Manager Session Manager直接访问(无需停机,适用已配置SSM权限的实例)
- 适用前提:实例关联的IAM角色包含
AmazonSSMManagedInstanceCore权限,且实例网络可访问SSM服务端点(公有子网实例具备公网IP/私有子网实例已配置SSM VPC端点) - 操作步骤:
- 登录AWS控制台,进入EC2服务页,找到目标运行实例,确认实例状态为正常
- 进入Systems Manager服务,选择「会话管理器」-「启动会话」
- 在可访问实例列表中选中目标实例,点击启动会话,直接进入实例命令行界面
- 执行
sudo su - ec2-user(Amazon Linux系统,Ubuntu系统替换为ubuntu)切换到实例默认用户 - 编辑SSH授权文件:
vi ~/.ssh/authorized_keys,将你提前新生成的密钥对的公钥内容粘贴进文件保存,后续即可使用新私钥SSH登录实例
方案2:挂载根卷到临时实例修改授权(通用方案,无SSM配置也可操作)
注意:如果你的实例根卷为实例存储类型,不要使用该方案,停机后实例存储卷数据会永久丢失
- 操作步骤:
- 先在EC2控制台「密钥对」页面生成新的密钥对,下载并妥善保存私钥文件,复制对应的公钥内容
- 停止目标运行实例,在实例详情页找到根卷信息,记录根卷的设备名(通常为
/dev/xvda或/dev/sda1) - 分离目标实例的根EBS卷
- 在同一可用区启动一台临时EC2实例(系统版本尽量和目标实例保持一致),将刚才分离的根卷作为数据卷挂载到临时实例,挂载设备名可设置为
/dev/sdf - SSH登录临时实例,执行
sudo lsblk确认挂载的卷对应的实际设备名,创建挂载目录:sudo mkdir /mnt/rescue - 挂载卷分区:
sudo mount /dev/xvdf1 /mnt/rescue(设备名根据lsblk返回结果调整,操作对象为卷的第一个分区而非整块磁盘) - 编辑授权文件:
sudo vi /mnt/rescue/home/ec2-user/.ssh/authorized_keys,粘贴新密钥对的公钥内容后保存 - 卸载数据卷:
sudo umount /mnt/rescue - 回到EC2控制台,将该卷从临时实例分离,重新挂载回原目标实例,挂载设备名填写之前记录的根卷设备名
- 启动原目标实例,即可使用新的密钥对SSH登录
注意事项
- 操作EBS卷前建议先对根卷创建快照备份,避免误操作导致数据损坏
- 若目标实例为Windows实例,可通过挂载根卷到临时实例后修改管理员密码完成恢复,操作逻辑和上述方案2一致
内容的提问来源于stack exchange,提问作者Terence - AI FX
相关产品推荐
相关产品推荐

