亚马逊 EC2:如何恢复 ~/.ssh/authorized_keys 文件?

3
我不小心覆盖了 .ssh/authorized_keys 中的条目。 现在我无法使用我的 .pem 文件连接到 EC2 实例。 我尝试生成一个新的 .pem 文件,希望这个过程会向 .ssh/authorized_keys 中添加条目,但是没有成功。我尝试阅读文档,但对我来说有点困惑。 能够给出简化的说明/指示的人将不胜感激。
不幸的是,没有活动的 ssh 会话.. :(

您的实例中是否有任何活动的ssh会话? - helloV
没有活动的SSH会话.. :( - Remis Haroon - رامز
你运气不好。有一个繁琐的过程需要分离根卷,附加到另一个实例,修复文件,然后重新连接等等,虽然仍然有可能挽救你的实例,但需要一些工作来完成。 - helloV
我有一个活动的ssh会话,这种情况下该怎么办?@helloV - RBz
@RBz 使用活动会话来修复问题并进行测试。 - helloV
1个回答

7
如果实例是基于EBS的,您可以执行以下操作:
  1. 准备一个正确的authorized_keys文件副本。从其他实例获取它,或从头开始重建它,或从快照中获取它,或使用新的pem文件,或任何其他方法。

  2. 停止您无法访问的实例(不要终止它)。这个步骤是不可避免的。如果无法停止实例,因为它正在运行重要的任务,那么您将无法进行下一步操作。

  3. 从已停止的实例中卸载根卷。它应该类似于/dev/sda1。一定要给它一个名称,以便您可以在卷列表中找到它。

  4. 将其附加到另一个实例的另一个挂载点,例如/dev/sdp

  5. 将该卷挂载到该实例上的tmpdir中。例如,使用mkdir /tmp/myrootvol && mount /dev/xvdp /tmp/myrootvol。请注意,设备名称将根据您使用的Linux版本(如果您完全使用Linux)而有所不同。更旧的版本将使用不同的命名规则。

  6. 此时,您有一个文件系统,一个根卷,挂载在/tmp/myrootvol。修复authorized_keys文件,然后卸载设备并分离卷。

  7. 将卷重新附加到原始实例的/dev/sda1或其他设备名称上。

  8. 重新启动该实例。

这样,您就可以访问EC2实例了。但是,哇,这真是一件痛苦的事情,不是吗?


我卡在第四步了,不确定如何进行ssh连接,因为它仍然显示Permission Denied (publickey)。 - Hoan Dang
在第5步,我不得不挂载/dev/xvdp和分区号,因此无法挂载引导分区。请注意,该内容仅供翻译,不涉及任何解释。 - chdev77

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接