如果PEM文件丢失,如何访问EC2实例

22

我丢失了EC2实例的PEM密钥。 我按照以下步骤进行操作:

即使PEM文件丢失也可以访问EC2实例的方法

如果您丢失了pem文件,仍然可以轻松访问EC2实例。

  1. 首先,通过创建新的访问文件创建一个新实例,称为具有与丢失的pem文件实例相同区域和VPC的“helper”实例。

  2. 现在停止丢失的pem文件实例。请记住不要终止实例,而是将其停止。

  3. 转到EBS卷,选择丢失的pem文件实例的根卷并分离它。

  4. 现在再次选择分离的卷,这次您必须将此卷附加到我们之前创建的helper实例上。由于helper实例默认具有/ dev / sda1作为根卷,因此新附加的卷将是辅助卷(例如:/ dev / sdf)。

  5. 使用helper实例的pem文件登录。

  6. 执行以下命令:

    # mount /dev/xvdf1 /mnt
    # cp /root/.ssh/authorized_keys /mnt/root/.ssh/
    # umount /mnt
    
  7. 将辅助实例上的次要卷分离。

  8. 再将卷附加回我们的恢复实例。启动实例。终止辅助实例。

使用辅助实例pem文件登录恢复实例。


5
你需要什么样的帮助?你卡在哪一步了?EC2实例有pem文件可以允许SSH连接,它们还拥有存储在卷中的存储,你可以通过跟踪实例ID和卷ID来追踪这些存储。以下是创建新EC2实例并下载新pem文件,分离存储卷,将其附加到新的EC2实例,为其提供新的pem并通过SSH连接到新EC2实例所需的步骤。如果您加密了存储,则可能会遇到困难。说“请帮助”或“我已经按照所有步骤操作了”不能帮助任何人确定您需要什么帮助。希望这可以帮助您至少开始第一步。 - devssh
我没有PEM文件。 在安装了HTTPS插件后,我无法连接到我的网站的WP管理页面。为了编辑wp-config文件,我需要通过Filezilla或Putty访问文件,但是如果没有PEM文件,则无法连接。以上是我尝试在没有PEM文件的情况下访问的步骤。 - A K
1
这篇博客应该可以帮助我们在没有.pem文件的情况下连接到EC2。https://aws.amazon.com/premiumsupport/knowledge-center/user-data-replace-key-pair-ec2/ - Pratheek Reddy
5个回答

7

很高兴看到您的回答。关于此事,AWS已经分享了官方教程,因此在此分享:https://youtu.be/F8jXE-_hdfg

从这个视频中我们可以发现,AWS支持团队一直收到用户提出的这些问题,因此制作了详细的结构说明。

这是一个详细的步骤说明。希望这能有所帮助。


1
这应该作为注释而不是答案更好。 - No Name
3
这个答案以及附带的视频让我省下了很多时间和精力,真的有效,谢谢! - barbariania
1
今天视频被设为私人,我很失望,因为我正在跟进它。 - viion

6
几周前,AWS宣布了SSM Session Manager。这允许您访问(登录)EC2实例,而无需密钥对、密码、开放端口等。支持Windows和Linux。
最新的AMI没有最新版本的SSM代理。您需要首先更新它,可以通过SSM控制台或AWS CLI进行更新。 AWS Systems Manager Session Manager 连接到系统后,您可以纠正任何问题。例如,您可以在AWS控制台中创建一个新的密钥对,然后将公钥复制到`~/.ssh/authorized_keys,以便再次通过SSH访问您的系统。
对于Windows系统,如果管理员密码被遗忘,甚至可以更改该密码。这可能是一个救命稻草。

如何在AMI上安装SSM?如何连接并重新生成SEM密钥? - A K
你有看我附上的文档链接吗?对于大多数 AMI,代理已经安装好了,你只需要更新它即可。 - John Hanley
如果您需要通过ssh连接到实例,可以使用我的SSH ProxyCommand脚本。它在连接到目标实例期间临时添加您的公共ssh密钥到目标实例。然后,它将建立一个通过SSM Session Manager隧道传输的ssh连接。AWS SSM SSH ProxyComand -> https://gist.github.com/qoomon/fcf2c85194c55aee34b78ddcaa9e83a1 - qoomon

1

以下是在密钥对丢失后即时访问EC2实例的步骤:

  1. 在相同区域使用新密钥对创建一个新实例,并将其命名为TEST。
  2. 现在连接到新实例,并从.ssh目录(/.ssh/authorized_keys)中复制authorized_keys的数据。
  3. 进入丢失pem文件实例的安全组,并允许EC2实例连接的ssh(请通过命令curl -s https://ip-ranges.amazonaws.com/ip-ranges.json| jq -r '.prefixes[] | select(.region=="us-east-1") | select(.service=="EC2_INSTANCE_CONNECT") | .ip_prefix')检查特定区域的IP范围)。
  4. 完成安全组更改后,使用EC2实例连接连接到丢失的文件实例。
  5. 现在打开.ssh/authorized_keys并用TEST实例的authorized_keys替换它。
  6. 您现在可以使用新密钥对访问丢失的密钥文件实例。
  7. 终止TEST实例并更改安全组。

请注意,此解决方案可能会暴露您的实例端口22一段时间。

谢谢。


此解决方案使用 EC2 Instance Connect,它是一个基于 Web 的 SSH 控制台,加上向实例“发送”临时 SSH 密钥的能力。如果实例是从 Amazon Linux AMI 启动的,则它可以很好地工作,因为该 AMI 已安装了必要的软件。第三步的复杂性在于 SSH 连接实际上将通过 EC2 Instance Connect 服务而不是您自己的计算机进行。该步骤可以通过将端口 22(SSH)打开到 0.0.0.0/0 来替换,但这不是一个很好的安全实践,因此一旦恢复访问权限,请删除此规则。 - John Rotenstein

0

你可以使用的一个选项是 AWS cli ec2-instance-connect ssh option,它在 版本 2.12.0 中添加:

aws ec2-instance-connect ssh --instance-id "$BASTION_INSTANCE_ID" --connection-type direct

内部它将创建一个临时的ssh密钥,并将公钥部分上传到实例。

-1
在我的情况下,启用了自动扩展组,因此很容易将实例附加到新的密钥对。以下是我遵循的步骤:
  1. 在EC2仪表板下创建新的密钥对 -> 密钥对(在此步骤中下载.pem文件)
  2. 转到Auto Scaling -> Launch Configurations
  3. 选择所需的Launch Configuration,然后复制Launch Configuration
  4. 在审查启动配置时,您可以创建一个新的密钥对,也可以选择在步骤1中创建的现有密钥对
  5. 创建新的启动配置后,转到自动扩展组
  6. 选择自动缩放组,然后从下拉列表中选择新的启动配置
  7. 完成此操作后,如果停止自动扩展组实例,则会使用新的启动配置(带有新的密钥对)创建一个新实例
  8. 列表项

OP没有提到他们有现有的自动扩展组。因此,没有要复制的启动配置。 - John Rotenstein

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