如果在首次启动后丢失了 SSH 密钥对,该如何连接到 Amazon EC2 实例?
我想连接到我的 Amazon Elastic Compute Cloud (Amazon EC2) 实例,但是丢失了 SSH 密钥对。如何连接到实例?
解决方法
重要提示:
方法 1、2 和 3 需要停止并启动实例。但应注意以下几点:
- 如果您的实例受实例存储支持或具有包含数据的实例存储卷,则在实例停止时数据将丢失。有关更多信息,请参阅确定实例的根设备类型。请务必备份您想保存在实例存储卷上的所有数据。
- 停止并重新启动实例会更改实例的公有 IP 地址。将外部流量路由到您的实例时,最佳做法是使用 Elastic IP 地址,而不是公有 IP 地址。
方法 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. 启动您的实例。
获取公钥:
Retrieve the public key material
On your local Linux or macOS computer, you can use the ssh-keygen command to retrieve the public key for your key pair. Specify the path where you downloaded your private key (the .pem file).
ssh-keygen -y -f /path_to_key_pair/my-key-pair.pem
The command returns the public key, as shown in the following example.
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQClKsfkNkuSevGj3eYhCe53pcjqP3maAhDFcvBS7O6V hz2ItxCih+PnDSUaw+WNQn/mZphTk/a/gU8jEzoOWbkM4yxyb/wB96xbiFveSFJuOp/d6RJhJOI0iBXr lsLnBItntckiJ7FbtxJMXLvvwJryDUilBMTjYtwB+QhYXUMOzce5Pjz5/i8SeJtjnV3iAoG/cQk+0FzZ qaeJAAHco+CY/5WrUBkrHmFJr6HcXkvJdWPkYQS3xqC0+FmUZofz221CBt5IMucxXPkX4rWi+z7wB3Rb BQoQzd8v7yeb7OzlPnWOyN0qFU0XA246RA8QFYiCNYwI3f05p6KLxEXAMPLE
If the command fails, run the following command to ensure that you’ve changed the permissions on your private key pair file so that only you can view it.
chmod 400 key-pair-name.pem
方法 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。
相关信息
AWS Systems Manager Automation
本章结束~ifan