如果在首次启动后丢失了 SSH 密钥对,该如何连接到 Amazon EC2 实例?

上次更新日期:2022 年 10 月 7 日

我想连接到我的 Amazon Elastic Compute Cloud (Amazon EC2) 实例,但是丢失了 SSH 密钥对。如何连接到实例?

解决方法

重要提示:

方法 1、2 和 3 需要停止并启动实例。但应注意以下几点:

方法 1:输入用户数据

1.    创建新密钥对

2.    如果您在 Amazon EC2 控制台中创建私有密钥,则检索密钥对的公有密钥

3.    打开 Amazon EC2 控制台

4.    停止您的实例

5.    依次选择 Actions(操作)、Instance settings(实例设置)、Edit user data(编辑用户数据)。

6.    将下列脚本复制到编辑用户数据对话框中:

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: username
    ssh-authorized-keys: 
    - PublicKeypair

username 替换为您的用户名,如 ec2-user。您可以输入默认用户名,或者如果先前已为该实例设置了自定义用户名,则输入此用户名。有关默认用户名的列表,请参阅连接到实例的一般先决条件

PublicKeypair 替换为第 2 步中检索到的公钥。确保输入以 ssh-rsa 开头的完整公钥。

7.    选择 Save(保存)。

8.    启动您的实例

9.    cloud-init 阶段完成后,请验证公有密钥是否已被替换

重要提示:由于脚本包含密钥对,请删除用户数据字段中的脚本。

10.    停止您的实例

11.    依次选择 Actions(操作)、Instance Settings(实例设置)、Edit user data(编辑用户数据)。

12.    删除Edit user data(编辑用户数据)对话框中的所有文本,然后选择 Save(保存)

13.    启动您的实例

方法 2:使用 AWS Systems Manager

如果您的实例是 AWS Systems Manager 中的托管实例,则可以使用 AWSSupport-ResetAccess 文档恢复丢失的密钥对。通过在指定的 EC2 实例上使用适用于 Linux 的 EC2 Rescue 工具,AWSSupportResetAccess 将自动生成并添加新的 SSH(公共/私有)密钥对。

实例的新 SSH 密钥被加密并保存在参数存储中,这是 AWS Systems Manager 的一项功能。参数名称为 /ec2rl/openssh/instance_id/key

使用以下命令从参数存储库中检索 SSH 密钥:

$ aws ssm get-parameters --names "/ec2rl/openssh/instance_id/key" --with-decryption --output json --query  "Parameters[0].Value" | sed 's:\\n:\n:g; s:^"::; s:"$::' >  key-pair-name

注意:请务必将 instance_id 替换为您的实例 ID,并将 key-pair-name 替换为密钥对的名称。

使用此参数的值作为内容创建一个新的 .pem 文件,并将其用于连接您无法访问的实例。使用以下命令将密钥转换为 .pem 文件:

$ ssh-keygen -f key-pair-name -e -m pem > key-pair-name.pem

注意:请确保将 key-pair-name 替换为您的密钥对的名称。

自动化工作流程会创建一个备份且启用密码的亚马逊云机器镜像(AMI)。新的 AMI 不会自动删除,而是保留在您的账户中。

要找到这些 AMI:

1.    打开 Amazon EC2 控制台,然后选择 AMI

2.    在搜索字段中输入自动化执行 ID。

方法 3:使用 Amazon EC2 Instance Connect

如果您的实例为 Amazon Linux 2 2.0.20190618 或更高版本,则可以使用 Amazon EC2 Instance Connect 连接到该实例。

方法 4:使用 EC2 Serial Console

如果您已为 Linux 启用 EC2 Serial Console,则可以用来排查受支持的基于 Nitro 的实例类型的问题。串行控制台可帮助您排查启动问题、网络配置和 SSH 配置问题。串行控制台无需网络连接即可连接到您的实例。您可以使用 Amazon EC2 控制台或 AWS Command Line Interface(AWS CLI)访问串行控制台。

在使用串行控制台之前,请在账户层面授予对串行控制台的访问权限。然后,创建 AWS Identity and Access Management (IAM) 策略,授予对 IAM 用户的访问权限。此外,每个使用串行控制台的实例都必须至少包含一个使用密码访问的用户。如果您的实例无法访问,并且尚未配置对串行控制台的访问权限,请按照方法 1、方法 2 或方法 3 中的说明进行操作。有关为 Linux 配置 EC2 串行控制台的信息,请参阅配置对 EC2 串行控制台的访问权限

注意:如果在运行 AWS CLI 命令时收到错误信息,请确保您使用的是最新版本的 AWS CLI


这篇文章对您有帮助吗?


您是否需要账单或技术支持?