Linux 系统 EC2 密钥对丢失应对指南

发布时间:2024 年 5 月 7 日
Amazon EC2
Linux
计算
密钥对
备份
教程
亚马逊云科技
Olawale Olaleye
亚马逊云科技使用经验
100 - 初级
完成所需时间
10 分钟
所需费用
免费
受众

开发者

上次更新时间
2024 年 5 月 7 日
相关产品

本文中提到了五种方法,可用于在丢失密钥对的情况下,重新获取 EC2 Linux 实例的访问权限。

什么是 EC2 密钥对?

EC2 密钥对是安全使用 SSH 访问 Linux 实例的基石。其原理是公钥和私钥的组合,公钥储存在实例中,私钥则由您储存在本地。当您尝试使用 SSH 连接时,两种密钥共同参与身份验证。实例启动期间,您必须指定一个密钥对,尤其是 SSH 连接。您可根据安全需求在不同实例中使用相同的密钥对,也可使用不同的密钥对。实例启动后,指定的公钥会存放在~/.ssh/authorize_keys 中,要通过 SSH 登陆,就必须提供相应的私钥。

现在已经了解什么是 EC2 密钥对了。接下来看看如果您丢失了密钥对,该如何重新获取 EC2 实例的访问权限。解决办法多种多样,但本文仅讨论其中的几种。

恢复方法 1:使用 EC2 用户数据

使用 EC2 用户数据重新获取访问权限时,您必须遵循以下步骤:

  1. 创建一个新的密钥对,然后复制公钥。如上图所示,EC2 实例中的圆形表示旧密钥对,方形表示新密钥对。
  2. 您必须停止实例,并更新 EC2 用户数据。如果您的 EC2 用户数据采用了上图所示的云端配置格式,将在每次启动 EC2 实例时运行。
  3. 您要在用户数据中添加名称和 SSH 授权密钥(如上图),这意味着下一次 EC2 实例启动时,将会查找 EC2 用户数据,创建新的用户名,并添加 SSH 授权密钥。
  4. 完成 EC2 用户数据的一次性设置后,就可以删除了,这样 EC2 实例就不会在每次启动时都写入新密钥。注意:这种方法只会添加授权密钥,实质上不会删除或覆盖任何现有公钥。

恢复方法 2:使用 Amazon Systems Manager

  1. 安装 SSM 代理,配置适当的 IAM 角色,在您的 EC2 实例中运行 Amazon Systems Manager。
  2. 访问 Amazon Systems Manager 控制台,启动 AWSSupport-ResetAccess 等自动化任务,从而生成新的密钥对(公钥和私钥),并自动将密钥存储在参数仓库中。
  3. 从参数仓库中检索私钥,出于安全考虑,需要从参数仓库中删除该条目,使用该密钥通过 SSH 连接到您的实例。这种方法适用于 Linux 和 Windows 这两种环境。

注意:务必正确安装 SSM 代理,且 EC2 实例上配置了正确的 IAM 角色,以确保安全地存储和访问参数仓库中的密钥。

恢复方法 3:使用 EC2 Instance Connect

  1. 该方法需要利用 EC2 Instance Connect 建立与您 EC2 实例的临时连接。
  2. 要使用这项服务,请确保您的实例配备了 EC2 Instance Connect,Amazon Linux 2 或 Ubuntu 16 及更高的版本预装了该工具。
  3. 启动 EC2 Instance Connect Service ,通过 SSH 连接到您的实例。随后添加一个新的 SSH 公钥,更新 SSH 授权密钥文件,以实现安全访问。
  4. 配置更新后的 SSH 密钥后,就可从本地计算机无缝连接到 EC2 实例,以简化流程,实现高效管理。

恢复方法 4:使用 EC2 Serial Console

  1. 如果基于 Nitro 系统的 EC2 实例遇到网络连接问题,那么可使用 EC2 Serial Console 作为替代方案。
  2. 事先确保在账户级别启用 EC2 Serial Console 。
  3. 通过终端访问连接到 EC2 Serial Console,利用新公钥更新 SSH 授权密钥文件。
  4. 在实施 EC2 Serial Console 解决方案的过程中,需要确保网络的畅通。

恢复方法 5:使用 EBS Volume Swap

  1. 准备新密钥对:创建用于访问实例的新密钥对(私钥和公钥)。
  2. 交换 EBS 卷:停止原始 EC2 实例,从原始实例中分离 EBS 根卷,启动新的 EC2 实例,再将分离后的 EBS 卷(包含授权密钥文件)附加到新实例中。
  3. 修改授权密钥:连接到新实例(使用新建的密钥对),编辑附加 EBS 卷(原始实例的根卷)上的 authorized_keys 文件,再将丢失的密钥对中的公钥添加到该文件中。
  4. 重新连接并访问:从新实例中分离 EBS 卷,将 EBS 卷重新附加到原始 EC2 实例上,再启动原始 EC2 实例。现在应该可以使用丢失的密钥对中的私钥通过 SSH 连接到原始实例了。从原始实例中分离 EBS 根卷,启动新的 EC2 实例,最后将分离后的 EBS 卷(包含授权密钥文件)附加到新实例上。

注意事项

安全第一:使用密钥对时始终优先考虑安全因素。千万不要分享您的私钥,利用强密码进行额外保护。

备份很重要:定期备份您的实例,包括用户数据脚本,以确保发生紧急情况时能顺畅地恢复。

结论

由于丢失密钥对而无法访问 EC2 实例,可能给您带来压力,但天还没塌。遵照本文所述的操作步骤,您可以重新访问实例,并迅速恢复正常操作。谨记,采取最佳措施来妥善保管密钥对,最大限度地降低未来发生此类事件的风险。