创建一对新的 key密钥(可以通过AWS创建XXX.pem)
停止出问题的 EC2(最好再打个快照做备份)
记下原实例的根卷 ID、可用区、根设备名
在同一可用区新建一台临时救援机
把原实例根卷分离,挂到救援机。(救援机此时也需要关机才可以附加)
挂载磁盘,往原系统用户的 ~/.ssh/authorized_keys 里加入新公钥
修正权限
卸载磁盘,挂回原实例
启动原实例,用新私钥登录
这个步骤是恢复系统用户登录的,如果不再需要恢复登录只是为了原来数据,挂载后将问题机器数据copy到新机器上即可
注意事项
1.创建机器网络设置这里选择编辑可以指定区域

实例先关机才可以分离和附加卷

2.查看新密钥的公钥内容
将新密钥文件上传到救援机器执行:ssh-keygen -y -f xxx.pem 输出信息就是公钥保存好
3.挂载原系统根分区
sudo mkdir -p /mnt/recovery
lsblk 查看分区,比如分区是 /dev/nvme1n1p1
mount /dev/nvme1n1p1 /mnt/recovery 挂载分区到刚才创建的目录。这一步不报错就可以看到之前机器的磁盘数据了。
df -h
4.把新公钥写入原系统
如果原实例是 Ubuntu:
sudo mkdir -p /mnt/recovery/home/ubuntu/.ssh
sudo vim /mnt/recovery/home/ubuntu/.ssh/authorized_keys
如果原实例是 Amazon Linux / CentOS:
sudo mkdir -p /mnt/recovery/home/ec2-user/.ssh
sudo vim /mnt/recovery/home/ec2-user/.ssh/authorized_keys
把新公钥追加进去,不要删原有内容。
5.修正权限
ls -l /mnt/recovery/home/ubuntu/.ssh 查看是否为700
ls -l /mnt/recovery/home/ubuntu/.ssh/authorized_keys 此文件必须为600
如果权限不对执行以下命令授权
sudo chmod 700 /mnt/recovery/home/ubuntu/.ssh
sudo chmod 600 /mnt/recovery/home/ubuntu/.ssh/authorized_keys
sudo chown -R 1000:1000 /mnt/recovery/home/ubuntu/.ssh 但 uid/gid 不一定固定,最稳的是先看原系统用户 UID,或是改成原有用户的权限
#查看原用户ID
sudo grep ec2-user /mnt/recovery/etc/passwd
sudo grep ubuntu /mnt/recovery/etc/passwd 例如返回:ubuntu:x:1000:1000:Ubuntu:/home/ubuntu:/bin/bash 那就用1000
6.卸载并挂回原实例
救援机 sudo umount /mnt/recovery 再关机,分离旧机器的磁盘
将分离的问题机器卷再附加到原来的问题机器上,然后开机使用新密钥连接即可。