Amazon EC2 密钥对和 Linux 实例
密钥对(由私有密钥和公有密钥组成)是一组安全凭证,可在连接到实例时用来证明您的身份。Amazon EC2 存储公有密钥,您存储私有密钥。您可以使用私有密钥而不是密码来安全地访问您的实例。拥有您的私有密钥的任何人都可以连接到您的实例,因此将您的私有密钥存储在一个安全位置非常重要。
启动实例时,系统会提示您输入密钥对。如果您计划使用 SSH 连接到实例,则必须指定密钥对。您可以选择现有密钥对或创建新的密钥对。当您的实例首次启动时,您在启动时指定的公有密钥的内容将放置在 Linux 实例中的 ~/.ssh/authorized_keys
的条目中。在使用 SSH 连接到 Linux 实例时,要进行登录,您必须指定与公有密钥内容对应的私有密钥。有关连接到实例的更多信息,请参阅连接到您的 Linux 实例。有关密钥对和 Windows 实例的更多信息,请参阅 Amazon EC2 用户指南(适用于 Windows 实例) 中的 Amazon EC2 密钥对和 Windows 实例
由于 Amazon EC2 不保存私有密钥的副本,因此,如果您丢失私有密钥,则无法恢复它。但是,仍可通过一种方法连接到丢失了密钥对的实例。有关更多信息,请参阅丢失私有密钥时连接到 Linux 实例。
Amazon EC2 使用的密钥是 2048-bit SSH-2 RSA 密钥。每个地区最多可拥有 5,000 个密钥对。
目录
创建或导入密钥对
您可以使用 Amazon EC2 创建新的密钥对,也可以导入现有密钥对。
选项 1:使用 Amazon EC2 创建密钥对
您可以使用以下方法之一创建密钥对。
选项 2:将您自己的公有密钥导入到 Amazon EC2
如果不使用 Amazon EC2 创建密钥对,您可以使用第三方工具创建一个 RSA 密钥对,然后将公有密钥导入 Amazon EC2。例如,您可以使用 ssh-keygen(通过标准 OpenSSH 安装提供的工具)创建密钥对。或者,您可以使用 Java、Ruby、Python 和很多其他提供标准库的编程语言来创建 RSA 密钥对。
要求
-
支持以下格式:
-
OpenSSH 公有密钥格式 (格式为
~/.ssh/authorized_keys
)。如果您在使用 EC2 Instance Connect API 时使用 SSH 进行连接,则也支持 SSH2 公司。 -
Base64 编码的 DER 格式
-
SSH 公有密钥文件格式如 RFC4716
所指定 -
SSH 私有密钥文件格式必须为 PEM(例如,使用
ssh-keygen -m PEM
将 OpenSSH 密钥转换为 PEM 格式)
-
-
创建一个 RSA 密钥。Amazon EC2 不接受 DSA 密钥。
-
支持的长度为 1024、2048 和 4096。如果您在使用 EC2 Instance Connect API 时使用 SSH 进行连接,则支持的长度为 2048 和 4096。
要使用第三方工具创建密钥对
-
使用您选择的第三方工具生成密钥对。
-
将公有密钥保存至本地文件。例如,
~/.ssh/my-key-pair.pub
(Linux) 或C:\keys\my-key-pair.pub
(Windows)。此文件的文件扩展名并不重要。 -
将私有密钥保存至另一个扩展名为
.pem
的本地文件。例如,~/.ssh/my-key-pair.pem
(Linux) 或C:\keys\my-key-pair.pem
(Windows)。将私有密钥文件保存在安全位置。当您启动实例时,您将需要提供密钥对的名称;当您每次连接到实例时,您将需要提供相应的私有密钥。
创建密钥对后,使用以下方法之一将密钥对导入到 Amazon EC2。
标记密钥对
要对现有密钥对进行分类和管理,可以使用自定义元数据标记它们。有关标签的工作原理的更多信息,请参阅给您的 Amazon EC2 资源加标签。
您可以使用新的控制台和命令行工具查看、添加和删除标签。
检索密钥对的公有密钥
在本地 Linux 或 macOS 计算机上,可使用 ssh-keygen 命令检索密钥对的公有密钥。指定您已在其中下载私有密钥的路径(.pem
文件)。
ssh-keygen -y -f /
path_to_key_pair
/my-key-pair.pem
该命令返回公有密钥,如以下示例所示。
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQClKsfkNkuSevGj3eYhCe53pcjqP3maAhDFcvBS7O6V
hz2ItxCih+PnDSUaw+WNQn/mZphTk/a/gU8jEzoOWbkM4yxyb/wB96xbiFveSFJuOp/d6RJhJOI0iBXr
lsLnBItntckiJ7FbtxJMXLvvwJryDUilBMTjYtwB+QhYXUMOzce5Pjz5/i8SeJtjnV3iAoG/cQk+0FzZ
qaeJAAHco+CY/5WrUBkrHmFJr6HcXkvJdWPkYQS3xqC0+FmUZofz221CBt5IMucxXPkX4rWi+z7wB3Rb
BQoQzd8v7yeb7OzlPnWOyN0qFU0XA246RA8QFYiCNYwI3f05p6KLxEXAMPLE
如果该命令失败,请运行以下命令以确保更改对您的密钥对文件的权限,以便只有您才能查看该文件。
chmod 400
my-key-pair
.pem
通过实例元数据检索密钥对的公有密钥
您在启动实例时指定的公有密钥也可以通过实例元数据使用。要查看您在启动实例时指定的公有密钥,请从您的实例中使用以下命令:
如果您更改用于连接到实例的密钥对,我们不会更新实例元数据以显示新的公有密钥。相反,实例元数据将继续显示您在启动实例时指定的密钥对的公有密钥。有关更多信息,请参阅 检索实例元数据。
或者,在 Linux/ 实例中,公有密钥内容放在 ~/.ssh/authorized_keys
内的条目中。您可以在编辑器中打开此文件。以下是名为 my-key-pair
的密钥对的示例条目。它包括后跟密钥对名称的公有密钥。
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQClKsfkNkuSevGj3eYhCe53pcjqP3maAhDFcvBS7O6V
hz2ItxCih+PnDSUaw+WNQn/mZphTk/a/gU8jEzoOWbkM4yxyb/wB96xbiFveSFJuOp/d6RJhJOI0iBXr
lsLnBItntckiJ7FbtxJMXLvvwJryDUilBMTjYtwB+QhYXUMOzce5Pjz5/i8SeJtjnV3iAoG/cQk+0FzZ
qaeJAAHco+CY/5WrUBkrHmFJr6HcXkvJdWPkYQS3xqC0+FmUZofz221CBt5IMucxXPkX4rWi+z7wB3Rb
BQoQzd8v7yeb7OzlPnWOyN0qFU0XA246RA8QFYiCNYwI3f05p6KLxEXAMPLE my-key-pair
在实例上查找公有密钥
启动实例时,系统会提示您输入密钥对。如果您计划使用 SSH 连接到实例,则必须指定密钥对。您可以选择现有密钥对或创建新的密钥对。当您的实例首次启动时,您在启动时指定的公有密钥的内容将放置在 Linux 实例上的 ~/.ssh/authorized_keys
内的条目中。
在实例上查找公有密钥
-
连接到您的实例。有关更多信息,请参阅 连接到您的 Linux 实例。
-
在终端窗口中,使用您常用的文本编辑器(如 vim 或 nano)打开
authorized_keys
文件。[ec2-user ~]$
nano ~/.ssh/authorized_keys
文件
authorized_keys
将打开,显示公有密钥,如以下示例所示。ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQClKsfkNkuSevGj3eYhCe53pcjqP3maAhDFcvBS7O6Vhz2ItxCih+PnDSUaw+WNQn/mZphTk/a/gU8jEzoOWbkM4yxyb/wB96xbiFveSFJuOp/d6RJhJOI0iBXrlsLnBItntckiJ7FbtxJMXLvvwJryDUilBMTjYtwB+QhYXUMOzce5Pjz5/i8SeJtjnV3iAoG/cQk+0FzZqaeJAAHco+CY/5WrUBkrHmFJr6HcXkvJdWPkYQS3xqC0+FmUZofz221CBt5IMucxXPkX4rWi+z7wB3RbBQoQzd8v7yeb7OzlPnWOyN0qFU0XA246RA8QFYiCNYwI3f05p6KLxEXAMPLE
确定启动时指定的密钥对
启动实例时,系统会提示您输入密钥对。如果您计划使用 SSH 连接到实例,则必须指定密钥对。
确定启动时指定的密钥对
-
打开 Amazon EC2 控制台 https://console.amazonaws.cn/ec2/
。 -
在导航窗格中,选择 Instances,然后选择您的实例。
-
在描述选项卡上,密钥对名称字段会显示您在启动实例时指定的密钥对的名称。即使您更改实例上的公有密钥或添加密钥对,密钥对名称的值也不会更改。
(可选)验证您的密钥对的指纹
在 Amazon EC2 控制台的 Key Pairs (密钥对) 页面上,Fingerprint (指纹) 列显示从您的密钥对生成的指纹。AWS 根据密钥对是由 AWS 还是第三方工具生成以不同方式计算指纹。如果您是使用 AWS 创建的密钥对,则会使用 SHA-1 哈希函数计算指纹。如果您使用第三方工具创建了密钥对并将公有密钥上传到 AWS,或者如果您从一个现有的 AWS 创建的私有密钥生成了一个新的公有密钥并将其上传到 AWS,则会使用 MD5 哈希函数计算指纹。
您可以使用显示在 Key Pairs (密钥对) 页面上的 SSH2 指纹验证您本地计算机上的私有密钥是否与 AWS 中存储的公有密钥匹配。在您在其中已下载私有密钥文件的计算机中,从私有密钥文件生成 SSH2 指纹。输出应与控制台中显示的指纹匹配。
如果您使用 AWS 创建了密钥对,则可以使用 OpenSSL 工具生成指纹,如以下示例中所示:
$
openssl pkcs8 -in
path_to_private_key
-inform PEM -outform DER -topk8 -nocrypt | openssl sha1 -c
如果您使用第三方工具创建了密钥对并将公有密钥上传到 AWS,则可以使用 OpenSSL 工具生成指纹,如以下示例中所示。
$
openssl rsa -in
path_to_private_key
-pubout -outform DER | openssl md5 -c
如果您使用 OpenSSH 7.8 或更高版本创建了 OpenSSH 密钥对并将公有密钥上传到 AWS,则可以使用 ssh-keygen 生成指纹,如以下示例中所示。
$
ssh-keygen -ef
path_to_private_key
-m PEM | openssl rsa -RSAPublicKey_in -outform DER | openssl md5 -c
添加或替换实例的密钥对
您可以更改用于访问实例默认系统账户的密钥对。例如,如果组织中用户需要使用单独的密钥对访问系统用户账户,您可以向实例中添加一个密钥对。或者,如果某人有 .pem
文件的副本,而您想要防止他们访问实例 (例如在他们已离开组织的情况下),您可以将其替换为新密钥对。
要添加或替换密钥对,您必须能够连接到实例。如果您丢失了现有的私有密钥,或者在没有密钥对的情况下启动了实例,则您将无法连接到实例,因此无法添加或替换密钥对。如果您丢失了现有的私有密钥,则可以检索它。有关更多信息,请参阅 丢失私有密钥时连接到 Linux 实例。如果启动实例而没有密钥对,则将无法连接到此实例,除非您选择配置为允许用户以其他方式登录的 AMI。
这些程序用于修改默认用户账户的密钥对,例如 ec2-user
。有关向实例添加用户账户的更多信息,请参阅 在 Amazon Linux 实例上管理用户账户。
添加或替换密钥对
-
使用 Amazon EC2 控制台或第三方工具创建新的密钥对。
-
从新密钥对检索公有密钥。有关更多信息,请参阅 检索密钥对的公有密钥。
-
使用现有的私有密钥文件连接到实例。
-
使用您选择的文本编辑器,在实例上打开
.ssh/authorized_keys
文件。将新密钥对的公有密钥信息粘贴到现有公有密钥信息下。保存文件。 -
从实例分离,并测试能否使用新的私有密钥文件连接到实例。
-
(可选) 如果您要替换现有密钥对,请连接到实例并从
.ssh/authorized_keys
文件中删除原始密钥对的公有密钥信息。
如果您使用的是 Auto Scaling 组,请确保未在启动模板或启动配置中指定您要替换的密钥对。Amazon EC2 Auto Scaling 检测到运行不正常的实例时会启动替换实例;但是,如果找不到密钥对,实例启动将失败。
删除您的密钥对
当您删除密钥对时,仅删除公有密钥的 Amazon EC2 副本。删除密钥对不影响您计算机上的私有密钥或是已使用该密钥对启动的任何实例上的公有密钥。您不能使用已删除的密钥对启动新实例,不过,只要您仍然有私有密钥
(.pem
) 文件,就可以继续连接到使用已删除的密钥对启动的任何实例。
如果您使用的是 Auto Scaling 组(例如,在 Elastic Beanstalk 环境中),请确保您要删除的密钥对未在启动配置中指定。Amazon EC2 Auto Scaling 检测到运行不正常的实例时会启动替换实例;但是,如果找不到密钥对,实例启动将失败。
您可以使用以下方法之一删除密钥对。
如果您从一个实例创建了一个 Linux AMI,然后在不同区域或账户中使用该 AMI 启动一个新实例,则新实例将包含来自原始实例的公有密钥。这允许您使用与原始实例相同的私有密钥连接到新实例。您可以使用任意文本编辑器从
.ssh/authorized_keys
文件中删除此公有密钥的条目,从而从实例中删除此公有密钥。有关管理您的实例用户和使用特定密钥对提供远程访问的更多信息,请参阅在 Amazon Linux 实例上管理用户账户。