Amazon EC2丢失密钥解决方法

2020-11-10

AWS实例的密钥登录机制

AWS创建EC2实例时会生成一个密钥文件,有了这个密钥才能使用SSH登录实例。可以使用 AWSSupport-ResetAccess 文档在 Amazon EC2 Windows 实例上自动重新启用本地管理员密码生成,以及在 Amazon EC2 Linux 实例上生成新 SSH 密钥。

工作原理

使用自动化和 AWSSupport-ResetAccess 对实例进行故障排除的工作原理如下:

  1. 您为实例指定 ID 并运行 Automation 工作流程。
  2. 系统创建一个临时 VPC,然后运行一系列 Lambda 函数以配置该 VPC。
  3. 系统在与您的原始实例相同的可用区内为您的临时 VPC 标识一个子网。
  4. 系统启动一个临时的启用了 SSM 的帮助程序实例。
  5. 系统停止您的原始实例并创建备份。然后,它将原始根卷附加到帮助程序实例。
  6. 系统使用 Run Command 在帮助程序实例上运行 EC2Rescue。在 Windows 上,EC2Rescue 通过在附加的原始根卷上使用 EC2Config 或 EC2Launch 为本地管理员启用密码生成。在 Linux 上,EC2Rescue 生成并注入新的 SSH 密钥并将私有密钥加密保存到 Parameter Store 中。完成后,EC2Rescue 重新将根卷附加回原始实例。
  7. 系统根据您的实例创建新 Amazon 系统映像 (AMI),现在密码生成已启用。您可以使用此 AMI 创建新 EC2 实例,并根据需要关联新密钥对。
  8. 系统重启您的原始实例,并终止临时实例。系统也将终止临时 VPC 和在自动化开始时创建的 Lambda 函数。
  9. Windows:您的实例生成一个新密码,您可以使用分配给实例的当前密钥对从 EC2 控制台对该密码进行解码。

Linux:您可以使用存储在 Systems Manager Parameter Store 中的 SSH 密钥(格式为 /ec2rl/openssh/instance_id/key),通过 SSH 连接到实例。

使用AWSSupport-ResetAccess重置EC2(Linux)密钥

第一步:使用CloudFormation创建角色

在 CloudFormation 中创建所需的 IAM 角色,复制 Output 中的 Value,这是后续 AssumeRole 的 ARN。

第二步:进入 AWSSupport-ResetAccess

在 AWS Systems Manager 控制台中,找到 AWSSupport-ResetAccess 自动化文档并打开。

第三步:输入参数

  • InstanceID:指定无法访问实例的 ID。
  • EC2RescueInstanceType:为 EC2Rescue 实例指定实例类型,默认实例类型为 t2.small。
  • SubnetId:指定您指定的实例所在可用区中某个现有 VPC 的子网。
  • AssumeRole:从 CloudFormation 控制台复制的 AssumeRole ARN。

第四步:执行自动化

点击执行,等待自动化流程完成。

第五步:检查结果

控制台显示执行成功后,前往 Parameter Store,路径 /ec2rl/openssh/instance_id/key 就是连接到服务器的密钥,通过 SSH 即可连接到服务器。

陈汉卿

云业务事业部 | 高级系统架构师

神州泰岳软件股份有限公司 · AWS战略合作伙伴

返回技术博客