

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 為您的 Amazon EC2 執行個體建立金鑰對
<a name="create-key-pairs"></a>

您可以使用 Amazon EC2 來建立金鑰對，或使用第三方工具產生金鑰對，然後再將其匯入 Amazon EC2。

Amazon EC2 可支援 Linux 和 Windows 執行個體的 2048位元 SSH-2 RSA 金鑰。Amazon EC2 也支援 Linux 執行個體上的 ED25519 金鑰。

如需有關如何在建立金鑰對後連線至執行個體的說明，請參閱 [使用 SSH 連線至您的 Linux 執行個體](connect-to-linux-instance.md) 和 [使用 RDP 連線至您的 Windows 執行個體](connecting_to_windows_instance.md)。

**Topics**
+ [使用 Amazon EC2 建立金鑰對](#having-ec2-create-your-key-pair)
+ [使用 建立金鑰對 AWS CloudFormation](#create-key-pair-cloudformation)
+ [使用第三方工具來建立金鑰對，然後將公有金鑰匯入 Amazon EC2](#how-to-generate-your-own-key-and-import-it-to-aws)

## 使用 Amazon EC2 建立金鑰對
<a name="having-ec2-create-your-key-pair"></a>

使用 Amazon EC2 建立金鑰對時，公有金鑰會儲存在 Amazon EC2 中，而您可儲存私有金鑰。

每個區域最多可建立 5,000個金鑰對。若要申請增加，請建立支援案例。如需詳細資訊，請參閱 *支援 使用者指南*中的[建立支援案例](https://docs.aws.amazon.com/awssupport/latest/user/case-management.html#creating-a-support-case)。

------
#### [ Console ]

**使用 Amazon EC2 建立金鑰對**

1. 前往 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) 開啟 Amazon EC2 主控台。

1. 請在導覽窗格的 **Network & Security** (網路與安全性) 下方，選擇 **Key Pairs** (金鑰對)。

1. 選擇 **Create key pair (建立金鑰對)**。

1. 對於 **Name (名稱)**，輸入金鑰對的描述性名稱。Amazon EC2 會將公有金鑰與您指定為金鑰名稱的名稱相關聯。金鑰名稱最多可包含 255 個 ASCII 字元。它不能包括前置或結尾空格。

1. 選取適合您作業系統的金鑰對類型：

   (Linux 執行個體) 針對**金鑰對類型**，選擇 **RSA** 或 **ED25519**。

   (Windows 執行個體) 針對**金鑰對類型**，選擇 **RSA**。Windows 執行個體不支援 **ED25519** 金鑰。

1. 針對 **Private key file format** (私有金鑰檔案格式)，選擇私有金鑰的儲存格式。若要將私有金鑰儲存為可與 OpenSSH 搭配使用的格式，請選擇 **pem**。若要將私有金鑰儲存為可與 PuTTY 搭配使用的格式，請選擇 **ppk**。

1. 若要向公有金鑰新增標籤，請選擇 **Add tag** (新增標籤)，然後輸入標籤的金鑰和值。針對每個標籤，重複執行上述動作。

1. 選擇 **Create key pair (建立金鑰對)**。

1. 您的瀏覽器會自動下載私有金鑰檔案。基礎檔案名稱是您所指定的金鑰對名稱，而副檔名是根據您選擇的檔案格式所決定。將私有金鑰檔案存放在安全的地方。
**重要**  
這是您儲存私有金鑰檔案的唯一機會。

1. 如果您計劃在 macOS 或 Linux 電腦上使用 SSH 用戶端連線至 Linux 執行個體，請使用下列命令設定私有金鑰檔案的許可，以便只有您能夠讀取該檔案。

   ```
   chmod 400 key-pair-name.pem
   ```

   如果您未設定這些許可，則無法使用此金鑰對來連接至您的執行個體。如需詳細資訊，請參閱[錯誤：未受保護的私有金鑰檔案](TroubleshootingInstancesConnecting.md#troubleshoot-unprotected-key)。

------
#### [ AWS CLI ]

**使用 Amazon EC2 建立金鑰對**

1. 按如下說明，使用 [https://docs.aws.amazon.com/cli/latest/reference/ec2/create-key-pair.html](https://docs.aws.amazon.com/cli/latest/reference/ec2/create-key-pair.html) 命令，產生金鑰對並將私有金鑰儲存到 `.pem` 檔案中。使用 `--query` 選項可將私有金鑰材料列印到輸出。使用 `--output` 選項可將私有金鑰資料儲存於特定檔案。視乎金鑰格式，副檔名應為 `.pem` 或 `.ppk`。私有金鑰名稱可與公有金鑰名稱不同，但為了方便使用，請使用相同的名稱。

   ```
   aws ec2 create-key-pair \
       --key-name my-key-pair \
       --key-type rsa \
       --key-format pem \
       --query "KeyMaterial" \
       --output text > my-key-pair.pem
   ```

1. 如果您計劃在 macOS 或 Linux 電腦上使用 SSH 用戶端連線至 Linux 執行個體，請使用下列命令設定私有金鑰檔案的許可，以便只有您能夠讀取該檔案。

   ```
   chmod 400 key-pair-name.pem
   ```

   如果您未設定這些許可，則無法使用此金鑰對來連接至您的執行個體。如需詳細資訊，請參閱[錯誤：未受保護的私有金鑰檔案](TroubleshootingInstancesConnecting.md#troubleshoot-unprotected-key)。

------
#### [ PowerShell ]

**使用 Amazon EC2 建立金鑰對**  
按如下說明，使用 [https://docs.aws.amazon.com/powershell/latest/reference/items/New-EC2KeyPair.html](https://docs.aws.amazon.com/powershell/latest/reference/items/New-EC2KeyPair.html) cmdlet，產生金鑰並將其儲存到 `.pem` 或 `.ppk` 檔案中。使用 **Out-File** cmdlet 可將私有金鑰資料儲存在有特定副檔名的檔案中。視乎金鑰格式，副檔名應為 `.pem` 或 `.ppk`。私有金鑰名稱可與公有金鑰名稱不同，但為了方便使用，請使用相同的名稱。

```
(New-EC2KeyPair `
    -KeyName "my-key-pair" `
    -KeyType "rsa" `
    -KeyFormat "pem").KeyMaterial | Out-File -Encoding ascii -FilePath C:\path\my-key-pair.pem
```

------

## 使用 建立金鑰對 AWS CloudFormation
<a name="create-key-pair-cloudformation"></a>

當您使用 建立新的金鑰對時 CloudFormation，私有金鑰會儲存至 AWS Systems Manager 參數存放區。參數名稱具有以下格式：

```
/ec2/keypair/key_pair_id
```

若要了解詳細資訊，請參閱 *AWS Systems Manager 使用者指南*中的 [AWS Systems Manager 參數存放區](https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-parameter-store.html)。

**使用 建立金鑰對 CloudFormation**

1. 在範本中指定 [AWS::EC2::KeyPair](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-keypair.html) 資源。

   ```
   Resources:
     NewKeyPair:
       Type: 'AWS::EC2::KeyPair'
       Properties: 
         KeyName: new-key-pair
   ```

1. 按如下說明，使用 [https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-key-pairs.html](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-key-pairs.html) 命令以取得金鑰對 ID。

   ```
   aws ec2 describe-key-pairs --filters Name=key-name,Values=new-key-pair --query KeyPairs[*].KeyPairId --output text
   ```

   以下為範例輸出。

   ```
   key-05abb699beEXAMPLE
   ```

1. 按如下說明，使用 [https://docs.aws.amazon.com/cli/latest/reference/ssm/get-parameter.html](https://docs.aws.amazon.com/cli/latest/reference/ssm/get-parameter.html) 命令以取得金鑰參數，並將金鑰材料儲存在 `.pem` 檔案中。

   ```
   aws ssm get-parameter --name /ec2/keypair/key-05abb699beEXAMPLE --with-decryption --query Parameter.Value --output text > new-key-pair.pem
   ```

**所需的 IAM 許可**

若要讓 代表您 CloudFormation 管理參數存放區參數， CloudFormation 或您的使用者擔任的 IAM 角色必須具有下列許可：
+ `ssm:PutParameter` – 授予許可，以建立私有金鑰材料的參數。
+ `ssm:DeleteParameter` - 准許刪除用來存放私有金鑰材料的參數。無論金鑰對是否是由 CloudFormation匯入或建立，都需要此許可。

當 CloudFormation 刪除由堆疊建立或匯入的金鑰對時，它會執行許可檢查，以判斷您是否具有刪除參數的許可，即使它僅在建立金鑰對時 CloudFormation 建立參數，而不是在匯入金鑰對時建立參數。 會使用與您帳戶中任何參數不相符的建構參數名稱來 CloudFormation 測試所需的許可。因此，您可能會在 `AccessDeniedException` 錯誤訊息中看到虛構參數名稱。

## 使用第三方工具來建立金鑰對，然後將公有金鑰匯入 Amazon EC2
<a name="how-to-generate-your-own-key-and-import-it-to-aws"></a>

您可以不使用 Amazon EC2 來建立金鑰對，而改用第三方工具來建立 RSA 或 ED25519 金鑰對，然後再將公有金鑰匯入 Amazon EC2。

**金鑰對的需求**
+ 支援的類型：
  + (Linux 與 Windows) RSA
  + (僅限 Linux) ED25519
**注意**  
Windows 執行個體不支援 ED25519 金鑰。
  + Amazon EC2 不接受 DSA 金鑰。
+ 支援的格式：
  + OpenSSH 公有金鑰格式 (若為 Linux，`~/.ssh/authorized_keys` 中的格式)。
  + (僅限 Linux) 如果您在使用 EC2 Instance Connect API 時以 SSH 連線，則還支援 SSH2 格式。
  + SSH 私有金鑰檔案格式必須是 PEM 或 PPK
  + (僅 RSA) Base64 編碼的 DER 格式
  + (僅 RSA) 如 [RFC 4716](https://www.ietf.org/rfc/rfc4716.txt) 中所指定的 SSH 公有金鑰檔案格式
+ 支援的長度：
  + 1024、2048 和 4096。
  + (僅限 Linux) 如果您在使用 EC2 Instance Connect API 時以 SSH 連線，則支援的長度為 2048 和 4096。

**使用第三方工具來產生金鑰對**

1. 使用您自選的第三方工具來產生金鑰對 例如：您可以使用 **ssh-keygen** (標準 OpenSSH 安裝隨附的工具)。或者，Java、Ruby、Python 和其他多種程式設計語言提供了標準程式庫，您可以使用這些程式庫來產生金鑰對。
**重要**  
私有金鑰必須是 PEM 或 PPK 格式。例如：使用 `ssh-keygen -m PEM` 來產生 PEM 格式的 OpenSSH 金鑰。

1. 將公有金鑰儲存到本機檔案。例如，`~/.ssh/my-key-pair.pub` (Linux、macOS) 或 `C:\keys\my-key-pair.pub` (Windows)。此檔案的副檔名不重要。

1. 將私有金鑰儲存到具有 `.pem` 或 `.ppk` 副檔名的本機檔案。例如，`~/.ssh/my-key-pair.pem` 或 `~/.ssh/my-key-pair.ppk` (Linux、macOS) 或者 `C:\keys\my-key-pair.pem` 或 `C:\keys\my-key-pair.ppk`(Windows)。副檔名很重要，因為根據您用來連線至執行個體的工具而定，您將需要特定的檔案格式。OpenSSH 會需要 `.pem` 檔案，而 PuTTY 則需要 `.ppk` 檔案。
**重要**  
將私有金鑰檔案存放在安全的地方。您在啟動執行個體時需要提供公有金鑰的名稱，且每次連線至執行個體時也需要提供對應的私有金鑰。

建立金鑰對之後，請使用以下其中一個方法，將您的公有金鑰匯入 Amazon EC2。

------
#### [ Console ]

**將公有金鑰匯入至 Amazon EC2**

1. 前往 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) 開啟 Amazon EC2 主控台。

1. 在導覽窗格中，選擇 **Key Pairs (金鑰對)**。

1. 選擇 **Import key pair (匯入金鑰對)**。

1. 在 **Name (名稱)** 處，輸入公有金鑰的描述性名稱。名稱最多可包含 255 個 ASCII 字元。它不能包括前置或結尾空格。
**注意**  
當您從 EC2 主控台連線到執行個體時，主控台會為您的私有金鑰檔案名稱建議此名稱。

1. 選取 **Browse (瀏覽)** 以導覽並選取您的公有金鑰，或將公有金鑰的內容貼到 **Public key contents (公有金鑰內容)** 欄位。

1. 選擇 **Import key pair (匯入金鑰對)**。

1. 確認您匯入的公開金鑰出現在金鑰對清單中。

------
#### [ AWS CLI ]

**將公有金鑰匯入至 Amazon EC2**  
使用 [https://docs.aws.amazon.com/cli/latest/reference/ec2/import-key-pair.html](https://docs.aws.amazon.com/cli/latest/reference/ec2/import-key-pair.html) 命令。

```
aws ec2 import-key-pair \
    --key-name my-key-pair \
    --public-key-material fileb://path/my-key-pair.pub
```

**確認是否已成功匯入金鑰對**  
使用 [https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-key-pairs.html](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-key-pairs.html) 命令。

```
aws ec2 describe-key-pairs --key-names my-key-pair
```

------
#### [ PowerShell ]

**將公有金鑰匯入至 Amazon EC2**  
使用 [https://docs.aws.amazon.com/powershell/latest/reference/items/Import-EC2KeyPair.html](https://docs.aws.amazon.com/powershell/latest/reference/items/Import-EC2KeyPair.html) cmdlet。

```
$publickey=[Io.File]::ReadAllText("C:\Users\TestUser\.ssh\id_rsa.pub")
Import-EC2KeyPair `
    -KeyName my-key-pair `
    -PublicKey $publickey
```

**確認是否已成功匯入金鑰對**  
使用 [https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2KeyPair.html](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2KeyPair.html) cmdlet。

```
Get-EC2KeyPair -KeyName my-key-pair
```

------