A 公司在 AWS 云平台上的测试环节中构建了一台 AWS EC2 Linux 实例。由于长时间没有使用,忘记了登录该实例的SSH 私有密钥,因此无法登录该实例。项目中的成员不太熟悉 AWS EC2 相关的知识,需要提供一个便捷的解决方案。
采用更新实例的 SSH 密钥文件的方式。
利用其它的AWS EC2 Linux 实例,挂载需要恢复SSH 私有密钥的实例的根设备卷;然后更新该根设备卷中的公有密钥。
本次采用AWS Console界面完成作业。
注意:根据项目的具体情况,可以采用不同的实施方法。比如使用命令行(CLI)部署、代码部署 (CloudFomation、Terraform等)、以及其它开发语言(SDK)完成作业。
步骤一:生成新的密钥对
1. 登录到AWS EC2控制台页面。
2. 在网络和安全(Network & Security)页面创建新的密钥对。
步骤二:需要恢复密钥的实例的作业
1. 记录需要恢复密钥的实例的下列信息
在存储(Storage)选项卡中,记录根设备名称(例如/dev/sda1或/dev/xvda),在存储卷(Block devices)下找到对应的卷ID(Volume ID)。
2. 停止需要恢复密钥的实例
3. 分离根设备卷
将需要恢复密钥的实例的根设备卷从原始实例中分离(Detach Volume),等待其状态变为可用(available)。
步骤三:临时实例的操作
1. 创建或者启动一个可登录的临时实例。
2. 附加需要恢复密钥的实例的根设备卷,并挂载
将需要恢复密钥的实例的根设备卷附加到临时实例上,并记下附加时设置的设备名称(例如/dev/xvdf),然后挂载需要恢复密钥的实例的根设备卷。通过SSH连接到临时实例,使用lsblk命令确定卷是否已经分区。如果已分区,将带有“part”类型的分区(如/dev/xvdf1)进行挂载;否则挂载原始设备(如/dev/xvdf)。
3. 更新 SSH 密钥文件
在临时实例上,找到挂载的根设备卷中的.ssh目录,将新的公钥添加到authorized_keys文件中(如果文件不存在,则创建它)。
关键命令:
[ec2-user@ip-172-31-16-198 ~]$ mount -t xfs -o nouuid /dev/xvdb1 /data
4. 从临时实例上卸载需要恢复密钥的实例的根设备卷。
步骤一:在需要恢复密钥的实例中重新附加根设备卷
将其重新附加到原始实例上,确保设备名称与原始设置一致(如/dev/sda1)。
步骤二:启动需要恢复密钥的实例
在EC2控制台中启动需要恢复密钥的实例,等待实例状态变为运行(running)。
步骤三:连接需要恢复密钥的实例
使用新的密钥对尝试通过SSH连接到原始实例,如果连接成功,则说明SSH密钥恢复完成。