Amazon EC2 密钥对和 Windows 实例 - Amazon Elastic Compute Cloud

Amazon EC2 密钥对和 Windows 实例

密钥对(由私有密钥和公有密钥组成)是一组安全凭证,可在连接到实例时用来证明您的身份。Amazon EC2 存储公有密钥,您存储私有密钥。您可以使用私有密钥来安全地访问您的实例。拥有您的私有密钥的任何人都可以连接到您的实例,因此将您的私有密钥存储在一个安全位置非常重要。

启动实例时,系统会提示您输入密钥对。如果您计划使用 RDP 连接到实例,则必须指定密钥对。您可以选择现有密钥对或创建新的密钥对。对于 Windows 实例,您可以使用私有密钥获取管理员密码,然后使用 RDP 进行登录。有关连接到实例的更多信息,请参阅连接到 Windows 实例。有关密钥对和 Linux 实例的更多信息,请参阅 Amazon EC2 用户指南(适用于 Linux 实例) 中的 Amazon EC2 密钥对和 Linux 实例

由于 Amazon EC2 不保存私有密钥的副本,因此,如果您丢失私有密钥,则无法恢复它。但是,仍可通过一种方法连接到丢失了密钥对的实例。有关更多信息,请参阅丢失私有密钥时连接到 Windows 实例

Amazon EC2 使用的密钥是 2048-bit SSH-2 RSA 密钥。每个地区最多可拥有 5,000 个密钥对。

创建或导入密钥对

您可以使用 Amazon EC2 创建新的密钥对,也可以导入现有密钥对。

选项 1:使用 Amazon EC2 创建密钥对

您可以使用以下方法之一创建密钥对。

新控制台

创建密钥对

  1. 打开 Amazon EC2 控制台 https://console.aws.amazon.com/ec2/

  2. 在导航窗格中的 NETWORK & SECURITY 下,选择 Key Pairs

  3. 选择 Create key pair (创建密钥对)

  4. 对于 Name (名称),输入密钥对的描述性名称。Amazon EC2 将公有密钥与您指定作为密钥名称的名称相关联。密钥名称最多可包含 255 个 ASCII 字符。它不能包含前导空格或尾随空格。

  5. 对于 File format (文件格式),选择要保存私有密钥的格式。要以可与 OpenSSH 一起使用的格式保存私有密钥,请选择 pem。要以可与 PuTTY 一起使用的格式保存私有密钥,请选择 ppk

  6. 选择 Create key pair (创建密钥对)

  7. 您的浏览器会自动下载私有密钥文件。基本文件名是指定为密钥对名称的名称,文件扩展名由您选择的文件格式确定。将私有密钥文件保存在安全位置。

    重要

    这是您保存私有密钥文件的唯一机会。

旧控制台

创建密钥对

  1. 打开 Amazon EC2 控制台 https://console.aws.amazon.com/ec2/

  2. 在导航窗格中的 NETWORK & SECURITY 下,选择 Key Pairs

  3. 选择 Create Key Pair

  4. 对于 Key pair name (密钥对名称),为密钥对输入描述性名称,然后选择 Create (创建)。密钥名称最多可包含 255 个 ASCII 字符。它不能包含前导空格或尾随空格。

  5. 您的浏览器会自动下载私有密钥文件。基本文件名是您为密钥对指定的名称,文件扩展名为 .pem。将私有密钥文件保存在安全位置。

    重要

    这是您保存私有密钥文件的唯一机会。

AWS CLI

创建密钥对

  • 按如下方式使用 create-key-pair AWS CLI 命令生成密钥,并将其保存到 .pem 文件中。

    aws ec2 create-key-pair --key-name my-key-pair --query "KeyMaterial" --output text > my-key-pair.pem
PowerShell

创建密钥对

按如下所示使用 New-EC2KeyPair 适用于 Windows PowerShell 的 AWS 工具 命令生成密钥,并将其保存到 .pem 文件中。

PS C:\> (New-EC2KeyPair -KeyName "my-key-pair").KeyMaterial | Out-File -Encoding ascii -FilePath C:\path\my-key-pair.pem

选项 2:将您自己的公有密钥导入到 Amazon EC2

如果不使用 Amazon EC2 创建密钥对,您可以使用第三方工具创建一个 RSA 密钥对,然后将公有密钥导入 Amazon EC2。

密钥对的要求

  • 支持以下格式:

    • OpenSSH 公有密钥格式

    • Base64 编码的 DER 格式

    • SSH 公有密钥文件格式如 RFC4716 所指定

    • SSH 私有密钥文件格式必须为 PEM

  • 创建一个 RSA 密钥。Amazon EC2 不接受 DSA 密钥。

  • 支持的长度为 1024、2048 和 4096。

要使用第三方工具创建密钥对

  1. 使用您选择的第三方工具生成密钥对。例如,您可以使用 ssh-keygen(通过标准 OpenSSH 安装提供的工具)。或者,您可以使用 Java、Ruby、Python 和很多其他提供标准库的编程语言来创建 RSA 密钥对。

    重要

    私有密钥必须采用 PEM 格式。例如,使用 ssh-keygen -m PEM 生成 PEM 格式的 OpenSSH 密钥。

  2. 将公有密钥保存至本地文件。例如:C:\keys\my-key-pair.pub。此文件的文件扩展名并不重要。

  3. 将私有密钥保存至扩展名为 .pem 的本地文件。例如 C:\keys\my-key-pair.pem 此文件的文件扩展名非常重要,因为从 EC2 控制台连接到 Windows 实例时只能选择 .pem 文件。

    重要

    将私有密钥文件保存在安全位置。当您启动实例时,您将需要提供公有密钥的名称;当您每次连接到实例时,您将需要提供相应的私有密钥。

创建密钥对后,使用以下方法之一将公有密钥导入到 Amazon EC2。

新控制台

导入公有密钥

  1. 打开 Amazon EC2 控制台 https://console.aws.amazon.com/ec2/

  2. 在导航窗格中,选择 Key Pairs (密钥对)

  3. 选择 Import key pair (导入密钥对)

  4. 对于 Name(名称),为公有密钥输入一个描述性名称。该名称最多可包含 255 个 ASCII 字符。它不能包含前导空格或尾随空格。

    注意

    当您从 EC2 控制台连接到实例时,控制台会建议使用此名称作为私有密钥文件的名称。

  5. 选择 Browse (浏览) 以导航到您的公有密钥并选择它,或者将公有密钥的内容粘贴到 Public key contents (公有密钥内容) 字段中。

  6. 选择 Import key pair (导入密钥对)

  7. 验证您导入的公有密钥是否显示在密钥对列表中。

旧控制台

导入公有密钥

  1. 打开 Amazon EC2 控制台 https://console.aws.amazon.com/ec2/

  2. 在导航窗格中的 NETWORK & SECURITY 下,选择 Key Pairs

  3. 选择 Import Key Pair (导入密钥对)

  4. Import Key Pair (导入密钥对) 对话框中,选择 Browse (浏览),然后选择之前保存的公有密钥文件。在 Key pair name 字段中为新的密钥对键入一个名称,然后选择 Import。该名称最多可包含 255 个 ASCII 字符。它不能包含前导空格或尾随空格。

  5. 验证您导入的密钥对是否显示在密钥对列表中。

AWS CLI

导入公有密钥

使用 import-key-pair AWS CLI 命令。

验证密钥对是否已成功导入

使用 describe-key-pairs AWS CLI 命令。

PowerShell

导入公有密钥

使用 Import-EC2KeyPair 适用于 Windows PowerShell 的 AWS 工具 命令。

验证密钥对是否已成功导入

使用 Get-EC2KeyPair 适用于 Windows PowerShell 的 AWS 工具 命令。

标记密钥对

要对现有密钥对进行分类和管理,可以使用自定义元数据标记它们。有关标签的工作原理的更多信息,请参阅标记 Amazon EC2 资源

您可以使用新的控制台和命令行工具查看、添加和删除标签。

新控制台

查看、添加或删除现有密钥对的标签

  1. 打开 Amazon EC2 控制台 https://console.aws.amazon.com/ec2/

  2. 在导航窗格中,选择 Key Pairs (密钥对)

  3. 选择一个密钥对,然后依次选择 Actions (操作)Manage tags (管理标签)

  4. Manage tags(管理标签)显示分配给密钥对的所有标签。

    • 要添加标签,请选择 Add tag (添加标签),然后输入标签键和值。您最多可以为每个密钥对添加 50 个标签。有关更多信息,请参阅标签限制

    • 要删除标签,请选择标签旁的 Remove(删除)以进行删除。

  5. 选择 Save

AWS CLI

查看密钥对标签

使用 describe-tags AWS CLI 命令。在以下示例中,您将描述所有密钥对的标签。

C:\> aws ec2 describe-tags --filters "Name=resource-type,Values=key-pair"
{ "Tags": [ { "Key": "Environment", "ResourceId": "key-0123456789EXAMPLE", "ResourceType": "key-pair", "Value": "Production" }, { "Key": "Environment", "ResourceId": "key-9876543210EXAMPLE", "ResourceType": "key-pair", "Value": "Production" }] }

描述特定密钥对的标签

使用 describe-key-pairs AWS CLI 命令。

C:\> aws ec2 describe-key-pairs --key-pair-ids key-0123456789EXAMPLE
{ "KeyPairs": [ { "KeyName": "MyKeyPair", "KeyFingerprint": "1f:51:ae:28:bf:89:e9:d8:1f:25:5d:37:2d:7d:b8:ca:9f:f5:f1:6f", "KeyPairId": "key-0123456789EXAMPLE", "Tags": [ { "Key": "Environment", "Value": "Production" }] }] }

标记现有密钥对

使用 create-tags AWS CLI 命令。在以下示例中,使用 Key=Cost-CenterValue=CC-123 标记现有密钥对。

C:\> aws ec2 create-tags --resources key-0123456789EXAMPLE --tags Key=Cost-Center,Value=CC-123

从密钥对中删除标签

使用 delete-tags AWS CLI 命令。有关示例,请参阅 AWS CLI Command Reference 中的示例

PowerShell

查看密钥对标签

使用 Get-EC2Tag 命令。

描述特定密钥对的标签

使用 Get-EC2KeyPair 命令。

标记现有密钥对

使用 New-EC2Tag 命令。

从密钥对中删除标签

使用 Remove-EC2Tag 命令。

检索您的密钥对的公有密钥

在本地 Windows 计算机上,您可以使用 PuTTYgen 获取密钥对的公有密钥。

启动 PuTTYgen 并选择 Load (加载)。选择 .ppk.pem 文件。PuTTYgen 在 Public key for pasting into OpenSSH authorized_keys file (粘贴到 OpenSSH authorized_keys 文件的公有密钥) 下方显示公有密钥。也可以通过以下方式查看公有密钥:选择 Save public key (保存公有密钥),指定文件的名称,然后打开文件。

通过实例元数据检索密钥对的公有密钥

您在启动实例时指定的公有密钥也可以通过实例元数据使用。要查看您在启动实例时指定的公有密钥,请从您的实例中使用以下命令:

PS C:\> Invoke-RestMethod -uri http://169.254.169.254/latest/meta-data/public-keys/0/openssh-key

下面是一个示例输出。

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

如果您更改用于连接到实例的密钥对,我们不会更新实例元数据以显示新的公有密钥。相反,实例元数据将继续显示您在启动实例时指定的密钥对的公有密钥。有关更多信息,请参阅 检索实例元数据

确定启动时指定的密钥对

启动实例时,系统会提示您输入密钥对。如果您计划使用 RDP 连接到实例,则必须指定密钥对。

新控制台

确定启动时指定的密钥对

  1. 打开 Amazon EC2 控制台 https://console.aws.amazon.com/ec2/

  2. 在导航窗格中,选择 Instances,然后选择您的实例。

  3. Details(详细信息)选项卡的 Instance details(实例详细信息)下,Key pair name(密钥对名称)字段显示您在启动实例时指定的密钥对名称。即使您更改实例上的公有密钥或添加密钥对,密钥对名称的值也不会更改。

旧控制台

确定启动时指定的密钥对

  1. 打开 Amazon EC2 控制台 https://console.aws.amazon.com/ec2/

  2. 在导航窗格中,选择 Instances,然后选择您的实例。

  3. 描述选项卡上,密钥对名称字段会显示您在启动实例时指定的密钥对的名称。即使您更改实例上的公有密钥或添加密钥对,密钥对名称的值也不会更改。

(可选)验证您的密钥对的指纹

在 Amazon EC2 控制台的 Key Pairs (密钥对) 页面上,Fingerprint (指纹) 列显示从您的密钥对生成的指纹。AWS 根据密钥对是由 AWS 还是第三方工具生成以不同方式计算指纹。如果您是使用 AWS 创建的密钥对,则会使用 SHA-1 哈希函数计算指纹。如果您使用第三方工具创建了密钥对并将公有密钥上传到 AWS,或者如果您从一个现有的 AWS 创建的私有密钥生成了一个新的公有密钥并将其上传到 AWS,则会使用 MD5 哈希函数计算指纹。

您可以使用显示在 Key Pairs (密钥对) 页面上的 SSH2 指纹验证您本地计算机上的私有密钥是否与 AWS 中存储的公有密钥匹配。在您在其中已下载私有密钥文件的计算机中,从私有密钥文件生成 SSH2 指纹。输出应与控制台中显示的指纹匹配。

如果您使用 AWS 创建了密钥对,则可以使用 OpenSSL 工具生成指纹,如以下示例中所示:

C:\> openssl pkcs8 -in path_to_private_key -inform PEM -outform DER -topk8 -nocrypt | openssl sha1 -c

如果您使用第三方工具创建了密钥对并将公有密钥上传到 AWS,则可以使用 OpenSSL 工具生成指纹,如以下示例中所示。

C:\> openssl rsa -in path_to_private_key -pubout -outform DER | openssl md5 -c

如果您使用 OpenSSH 7.8 或更高版本创建了 OpenSSH 密钥对并将公有密钥上传到 AWS,则可以使用 ssh-keygen 生成指纹,如以下示例中所示。

C:\> ssh-keygen -ef path_to_private_key -m PEM | openssl rsa -RSAPublicKey_in -outform DER | openssl md5 -c

丢失私有密钥时连接到 Windows 实例

当您连接到新启动的 Windows 实例时,您需要使用在启动实例时指定的密钥对的私有密钥对管理员账户的密码进行解密。

如果丢失了管理员密码并且不再具有私有密钥,您必须重置密码或创建新的实例。有关更多信息,请参阅 重置丢失或过期的 Windows 管理员密码。有关使用 AWS Systems Manager 文档重置密码的步骤,请参阅 AWS Systems Manager 用户指南 中的重置 Amazon EC2 实例上的密码和 SSH 密钥

删除您的密钥对

当您删除密钥对时,仅删除公有密钥的 Amazon EC2 副本。删除密钥对不影响您计算机上的私有密钥或是已使用该密钥对启动的任何实例上的公有密钥。您不能使用已删除的密钥对启动新实例,不过,只要您仍然有私有密钥 (.pem) 文件,就可以继续连接到使用已删除的密钥对启动的任何实例。

如果您使用的是 Auto Scaling 组(例如,在 Elastic Beanstalk 环境中),请确保您要删除的密钥对未在启动配置中指定。Amazon EC2 Auto Scaling 检测到运行不正常的实例时会启动替换实例;但是,如果找不到密钥对,实例启动将失败。

您可以使用以下方法之一删除密钥对。

新控制台

删除您的密钥对

  1. 打开 Amazon EC2 控制台 https://console.aws.amazon.com/ec2/

  2. 在导航窗格中,选择 Key Pairs (密钥对)

  3. 选择要删除的密钥对,然后选择 Delete (删除)

  4. 在确认字段中,输入 Delete,然后选择 Delete (删除)

旧控制台

删除您的密钥对

  1. 打开 Amazon EC2 控制台 https://console.aws.amazon.com/ec2/

  2. 在导航窗格中的 NETWORK & SECURITY 下,选择 Key Pairs

  3. 选择密钥对,然后选择 Delete

  4. 系统提示时,请选择 Yes

AWS CLI

删除您的密钥对

使用 delete-key-pair AWS CLI 命令。

PowerShell

删除您的密钥对

使用 Remove-EC2KeyPair 适用于 Windows PowerShell 的 AWS 工具 命令。