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

2 分钟阅读
0

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

解决方法

重要事项:

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

方法 1: 输入用户数据

1.创建新密钥对

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

3.打开 Amazon EC2 控制台

4.停止实例

5.依次选择操作实例设置编辑用户数据

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.选择保存

8.启动实例

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

重要事项:由于脚本包含密钥对,因此应删除用户数据字段中的脚本。

10.停止实例

11.依次选择操作实例设置编辑用户数据

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

13.启动实例

方法 2: 使用 AWS Systems Manager

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

实例的新 SSH 私有密钥会被加密,保存在 Parameter Store(AWS Systems Manager 的一项功能)中。参数名称是 /ec2rl/openssh/instance_id/key。

使用以下命令从 Parameter Store 检索 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 Linux 2023,则可以使用 EC2 Instance Connect 连接到该实例。

方法 4: 使用 EC2 Serial Console

如果您启用了适用于 Linux 的 EC2 Serial Console,则可以将其用于对受支持的基于 Nitro 的实例类型进行故障排除。Serial Console 可帮助您解决启动问题、网络配置和 SSH 配置问题。Serial Console 无需有效的网络连接,即可连接到您的实例。您可以使用 Amazon EC2 控制台或 AWS 命令行界面(AWS CLI)来访问 Serial Console。

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

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

相关信息

启动时在 Linux 实例上运行命令

AWS Systems Manager Automation

AWS 官方
AWS 官方已更新 2 年前