恢复丢失的 AWS EC2 密钥对

Posted

技术标签:

【中文标题】恢复丢失的 AWS EC2 密钥对【英文标题】:Recovering lost AWS EC2 Key Pairs 【发布时间】:2018-09-19 20:19:17 【问题描述】:

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

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

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

所以我问:

    我是否可以通过某种方式恢复现有的密钥对,以便通过 SSH 连接到我的 EC2 实例?我可以再次登录 AWS 控制台。 如果没有,那么…… 是否可以为我现有的密钥对生成另一个密钥对并“换掉”?

我真的不想拆除旧的 EC2 实例并重新配置新的实例,这需要我大约一周的时间才能完成(尽管可以说,这对我很有帮助!)。

【问题讨论】:

【参考方案1】:

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

使用用户数据:

    从 AWS EC2 控制台创建一个新的密钥对

    使用以下 cmd 从下载的密钥对生成公钥: ssh-keygen -y -f .pem

    停止 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 实例。

使用系统管理器:

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

您可以参考以下链接了解更详细的步骤:

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

【讨论】:

虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接答案可能会失效。 - From Review 感谢反馈,提供分步说明【参考方案2】: 第 1 步:转到 IAM。 步骤 2:创建具有权限的策略 “AmazonSSMManagedInstanceCore”。 步骤 3:创建新角色并附加 之前为该角色创建的策略。 第 4 步:转到 EC2,选择 “操作”中的实例 ==>“安全”==>“修改 IAM 角色”选择 创建的角色并保存。 步骤 5:等待 1 小时。这将需要一些 是时候解决了。 第 6 步:选择 EC2,点击“连接”==> “会话管理器” ==> “连接”

您将获得与该会话的会话,您可以将新密钥添加到授权密钥。

【讨论】:

【参考方案3】:

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

零件:

云配置
cloud_final_modules:
- [scripts-user, always]
shell 脚本

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

参考这篇博文replace ec2 ssh key

【讨论】:

【参考方案4】:

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

1.> 是否可以更改/附加新密钥?

关闭要访问的 ec2 实例(“目标”)。

创建一个新的(“临时”)实例。

从目标实例中分离主 EBS 卷(注意它当前的连接!)。

在临时实例上附加/装载目标卷。

在已装载的卷上编辑适当的 authorized_keys 文件。

卸载目标卷,然后重新附加到目标 ec2 实例(使用您在分离时记下的配置)

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

删除临时实例

2.> 是的。快照实例。从快照中配置一个新实例,选择不同的密钥(当您在启动向导结束时单击启动时会出现密钥对弹出窗口)

【讨论】:

有趣的方法

以上是关于恢复丢失的 AWS EC2 密钥对的主要内容,如果未能解决你的问题,请参考以下文章

重新启动后丢失 aws ec2 磁盘数据

Amazon EC2 密钥对

在 ec2 实例中部署 eb 后,ruby 应用程序 aws 数据丢失

[AWS][计算][EC2] Windows OS 通过SSM RunCommand 登录EC2

如何获取 AWS EC2 密钥对创建日期?

使用 python boto 创建和下载 AWS ec2 密钥对