恢复丢失的 AWS EC2 密钥对

Recovering lost AWS EC2 Key Pairs

这里是 AWS 菜鸟。我在我的 AWS 账户下创建了几个 EC2 实例,并为所有实例重复使用相同的密钥对。我相信 (IIRC) 我从 AWS 内部生成了密钥对,但这可能是错误的。

在过去的这个周末,我卖掉了我的旧笔记本电脑(在完全擦除硬盘后)并买了一台新笔记本电脑。我现在想起来 (:facepalm) 我忘记将我所有的 SSH 私钥复制到闪存驱动器并且我不再拥有它们了。

我 want/need 要做的就是通过 SSH 连接到我的 EC2 实例,但为此我需要我的 SSH 密钥。我仍然可以访问 AWS 控制台,并且可以登录并查看我的所有 EC2 密钥对。但是我没有看到任何用于下载它们或使用新密钥对更新我的 EC2 实例的选项。

所以我问:

  1. 我是否可以通过某种方式恢复我现有的密钥对,以便我可以通过 SSH 连接到我的 EC2 实例?我可以再次登录 AWS 控制台。 如果没有,那么...
  2. 是否可以为我现有的密钥对生成另一个密钥对和"swap it out"?

我真的不想拆除我的旧 EC2 实例并重新配置新实例,这将花费我大约一周的时间(尽管可以说,这对我来说是对的!)。

重建不应该是必要的。我建议选项 2 因为它更快更容易。

1.> 可以 change/append 一个新密钥吗?

  • 关闭您要访问的 ec2 实例 ("target")。

  • 创建一个新的 ("temporary") 实例。

  • 从目标实例分离主 EBS 卷(注意其当前附件!)。

  • Attach/mount 临时实例上的目标卷。

  • 编辑已安装卷上的适当 authorized_keys 文件。

  • 卸载目标卷,并重新连接到目标 ec2 实例(使用分离时记下的配置)

  • 启动目标实例并使用新密钥登录。

  • 删除临时实例

2.> 是的。快照实例。从选择不同密钥的快照提供新实例(在启动向导结束时单击启动时会出现密钥对弹出窗口)

将 ec2 用户数据更改为多部分 mime。

零件:

  • 云配置
cloud_final_modules:
- [scripts-user, always]
</pre>
  • shell 脚本

覆盖/home/ec2-user/.ssh/authorized_keys

参考这篇博文replace ec2 ssh key

  • 第 1 步:转到 IAM。
  • 第 2 步:创建具有权限的策略 “AmazonSSMManagedInstanceCore”。
  • 第 3 步:创建新角色并附加 之前为该角色创建的策略。
  • 第 4 步:转到 EC2,select “操作”中的实例 ==> “安全” ==> “修改 IAM 角色” select 创建的角色并保存。
  • 第 5 步:等待 1 小时。这需要一些 是时候解决了。
  • 第 6 步:Select EC2,点击“连接”==> “会话管理器”==>“连接”

您将获得一个会话,您可以将新密钥添加到授权密钥中。

您可以使用用户数据或系统管理器替换新密钥。

使用用户数据:

  1. 从 AWS EC2 控制台创建新密钥对

  2. 使用以下命令从下载的密钥对生成 Public 密钥: ssh-keygen -y -f .pem

  3. 停止 EC2 实例并编辑实例的用户数据并传递以下脚本并启动实例

    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:
       - <**Paste the Public key here**>
    

    现在,您将能够使用下载的密钥对登录到 EC2 实例。

使用系统管理器:

  1. 如果实例是 AWS Systems Manager 中的托管实例,您可以使用 AWSSupport-ResetAccess 文档来恢复丢失的密钥对。
  2. 打开 AWS Systems Manager 控制台,select 左侧导航窗格中的自动化,单击执行自动化。在亚马逊拥有的自动化文档部分 select 中。在 运行 图书列表中,搜索 AWSSupport-ResetAccess
  3. 在执行自动化文档页面中,选择简单执行。在文档详细信息部分,验证文档版本是否设置为默认。在输入参数部分,在参数中指定实例ID、子网ID和实例类型并执行。
  4. Automation完成后,新的ssh私钥被保存并加密到parameter store中,parameter store命名为/ec2rl/openssh//key

更详细的步骤可以参考下面link:

https://cloudsolutionsonline.blogspot.com/2021/11/connect-to-linux-ec2-instance-if-ssh.html?m=1