场景描述

如果在一台AWS的云主机当中,当你的EC2密钥丢失了。你现在没办法登陆上去。如何解决这个问题?

解决思路

在我们的知识库中,有很多小伙伴也写了同样的文章。总结起来有以下几种方式:

硬盘重新挂载

我在这里不做演示,知识库有其他小伙伴了。这里说一下大概实现的思路

首先需要把ec2关机----->分离该磁盘的根卷------>重新挂载到一个其他EC2主机上--->把新的公钥写入到磁盘中---->然后分离该磁盘,重新挂载到密钥丢失的主机上–→重启主机

以上就是硬盘重新挂载的实现思路。在这个过程中,我们需要注意的是,磁盘挂载的路径。比如原先你的云主机叫xvda,那么你重新挂载上去的也要叫这个名字


UserData方法

此方法相对于上面的硬盘挂载,简单一些。底层原理使用的是Cloud-init这个工具进行操作

如果感兴趣的话,可以自行去google搜索一下这个工具的使用

这里给一个bilibili的视频,供大家学习和参考:https://www.bilibili.com/video/BV1Cf4y1U7pQ?vd_source=150012ad60c5ae615617199bc2bd090a

第一步:生成一个新的密钥对

因为你的旧密钥丢失了,因此这里需要去生成一个新的密钥对。我们后期也会去用新的密钥去登陆


创建完成密钥对之后,会进行下载。这也是有且只有一次的下载。因此,要妥善保管

第二步:利用私钥生成公钥

私钥生成公钥的方法有很多。无非就是使用命令去操作。这里给展示几种平台不同的操作

Mac平台利用私钥生成公钥的方法

chmod 400 /Users/lemon/Downloads/2023-07-06.pem

ssh-keygen -yf  '/Users/lemon/Downloads/2023-07-06.pem'

windows平台利用私钥生成公钥的方法


Centos平台利用私钥生成公钥的方法

 ssh-keygen -yf zrm.pem


停机-修改用户的UserData

停止实例

先去停止实例,要想修改用户数据,必须是停止状态,才可以。你没有办法修改


编辑用户数据


用户数据参考

Content-Type: multipart/mixed; boundary="//"
MIME-Version: 1.0

--//
Content-Type: text/cloud-config; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment; filename="cloud-config.txt"

#cloud-config
cloud_final_modules:
- [users-groups, once]
users:
  - name: ec2-user
    ssh-authorized-keys: 
    - ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCWJxbuMK5sj1htO8YHgcjXOi0vpgzw/cyTWIs+XFVAuSl1MB3OKPZXg1PUuz0rymZR+l9gg7M9XxKkU4DLe+Ij5Og85+8Y6T2PKBWtRQ4kF95tqesaB3GGNAGbuSXMmlX2ywTh4gX4Qg2dDx2IhpadTzh2Pv+8uIFmkL+bIzslKNoE135XnrNrleYsu1ggTMxtkgUZOaGJzEYyFrkEAa237sEPQ/TsRnVcXRa15R/nOh8TtVSDYGGPkLq9blqSsqYUzzb8cACiEakyohjGSGcV949spMxFE670UZTAjNZelS8VqBvxbMYocglYi7oFuowL2Lo2KQ/vuejkvBm0sOhj

解释:上面我们需要注意的是:一个是username,有的服务器登陆是ubuntu名字、有的是root、有的是ec2-user。所以根据你的实际情况来

下面是私钥生成的公钥。你需要替换成你自己的。

上面需要修改的地方:就一个,username和你的公钥

重启服务器

重启之后,使用新的密钥去链接