

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

# 對連線至 Amazon EC2 Linux 執行個體的問題進行疑難排解
<a name="TroubleshootingInstancesConnecting"></a>

下列資訊和常見錯誤可協助您疑難排解連線到執行個體的問題。

**Topics**
+ [連線問題的常見原因](#TroubleshootingInstancesCommonCauses)
+ [連線到執行個體時發生錯誤：連線時間逾時](#TroubleshootingInstancesConnectionTimeout)
+ [錯誤：無法載入金鑰 ... 預期為：任一私有金鑰](#troubleshoot-instance-connect-key-file)
+ [錯誤：伺服器無法辨識使用者金鑰](#TroubleshootingInstancesServerError)
+ [錯誤：許可遭拒或 [執行個體] 連接埠 22 已關閉連線](#TroubleshootingInstancesConnectingSSH)
+ [錯誤：未受保護的私有金鑰檔案](#troubleshoot-unprotected-key)
+ [錯誤：私有金鑰的開頭必須為「-----BEGIN RSA PRIVATE KEY-----」，結尾為「-----END RSA PRIVATE KEY-----」](#troubleshoot-private-key-file-format)
+ [錯誤：主機金鑰驗證失敗](#troubleshoot-host-key-verification-failed)
+ [錯誤：伺服器拒絕了我們的金鑰，*或是*沒有可用的支援驗證方法](#TroubleshootingInstancesConnectingPuTTY)
+ [無法對執行個體執行 Ping 動作](#troubleshoot-instance-ping)
+ [錯誤：伺服器意外關閉網路連線](#troubleshoot-ssh)
+ [錯誤：EC2 Instance Connect 的主機金鑰驗證失敗](#troubleshoot-host-key-validation)
+ [無法使用 EC2 Instance Connect 連線至 Ubuntu 執行個體](#troubleshoot-eic-ubuntu)
+ [我的私有金鑰遺失。如何連線到我的執行個體？](#replacing-lost-key-pair)

## 連線問題的常見原因
<a name="TroubleshootingInstancesCommonCauses"></a>

建議您透過確認已正確執行下列任務來開始疑難排解執行個體的連線問題。

**確認執行個體的使用者名稱**  
使用您的使用者帳戶的使用者名稱或用於啟動執行個體的 AMI 預設使用者名稱，可連線至執行個體。  
+ **取得使用者帳戶的使用者名稱。**

  如需如何建立使用者帳戶的詳細資訊，請參閱[在您的 Amazon EC2 Linux 執行個體上管理系統使用者](managing-users.md)。
+ **取得您用於啟動執行個體的 AMI 的預設使用者名稱。**    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AWSEC2/latest/UserGuide/TroubleshootingInstancesConnecting.html)

**確認您的安全性群組規則允許流量**  
請確保與執行個體關聯的安全群組允許來自您的 IP 地址的傳入 SSH 流量。VPC 的預設安全群組根據預設並不允許傳入 SSH 流量。啟動執行個體精靈建立的安全群組根據預設會啟用 SSH 流量。如需將傳入 SSH 流量規則新增至 Linux 執行個體的步驟，請參閱 [從您電腦連線到執行個體的規則](security-group-rules-reference.md#sg-rules-local-access)。如需驗證步驟，請參閱 [連線到執行個體時發生錯誤：連線時間逾時](#TroubleshootingInstancesConnectionTimeout)。

**確認您的執行個體已就緒**  
啟動執行個體之後，執行個體可能需要幾分鐘的時間準備就緒，以接受連接要求。檢查您的執行個體，以確保它正在執行並通過其狀態檢查。  

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

1. 在導覽窗格中，選取 **Instances** (執行個體)，然後選取您的執行個體。

1. 請確認下列內容：

   1. 在 **Instance state (執行個體狀態)** 欄中，驗證您的執行個體處於 `running` 狀態。

   1. 在**狀態檢查**欄中，驗證您的執行個體已通過全部狀態檢查。

**確認已滿足連線的所有先決條件**  
確保您備妥連線所需的所有資訊。如需詳細資訊，請參閱[使用 SSH 連線至您的 Linux 執行個體](connect-to-linux-instance.md)。  
**從 Linux 或 macOS X 進行連線**  
如果本機電腦作業系統是 Linux 或 macOS X，請檢查特定先決條件的以下項目，以便連線至 Linux 執行個體：
+ [SSH 用戶端](connect-linux-inst-ssh.md)
+ [EC2 執行個體連線](connect-linux-inst-eic.md)
+ [AWS Systems Manager 工作階段管理員](https://docs.aws.amazon.com/systems-manager/latest/userguide/session-manager.html)
**從 Windows 進行連線**  
如果您的本機電腦作業系統是 Windows，請檢查以下連線選項的特定先決條件，以便連線至 Linux 執行個體：
+ [OpenSSH](connect-linux-inst-ssh.md)
+ [PuTTY](connect-linux-inst-from-windows.md)
+ [AWS Systems Manager 工作階段管理員](https://docs.aws.amazon.com/systems-manager/latest/userguide/session-manager.html)
+ [適用於 Linux 的 Windows 子系統](connect-linux-inst-ssh.md)

**檢查執行個體是否為受管執行個體**  
不允許使用者啟動連線至受管執行個體。若要判斷執行個體是否受管，請尋找執行個體的**受管**欄位。若該值為 **true**，則為受管執行個體。如需詳細資訊，請參閱[Amazon EC2 受管執行個體](amazon-ec2-managed-instances.md)。

## 連線到執行個體時發生錯誤：連線時間逾時
<a name="TroubleshootingInstancesConnectionTimeout"></a>

如果您試著連線至執行個體，並收到錯誤訊息 `Network error: Connection timed out` 或 `Error connecting to [instance], reason: -> Connection timed out: connect`，則請嘗試下列動作：

**檢查安全群組規則。**  
您需要安全群組規則，來允許透過適當的連接埠，從本機電腦公有 IPv4 地址傳入流量。

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

1. 在導覽窗格中，選取 **Instances (執行個體)**，然後選取您的執行個體。

1. 在主控台頁面底部的 **Security (安全)** 標籤上，檢查 **Inbound rules (傳入規則)** 下方所選執行個體已生效的規則清單。請確認具備允許從本機電腦到連接埠 22 (SSH) 的流量規則。

   如果安全群組不具有規則來允許從本機電腦傳入流量，請在安全群組中新增規則。如需詳細資訊，請參閱[從您電腦連線到執行個體的規則](security-group-rules-reference.md#sg-rules-local-access)。

1. 針對允許傳入流量的規則，請檢查 **Source** (來源) 欄位。如果該值是單一 IP 地址，而且 IP 地址不是靜態的，則每次重新啟動電腦時都會指派新的 IP 地址。這將導致規則不會包括您電腦的 IP 地址流量。如果您的電腦位於企業網路中，或者如果您是透過網際網路服務供應商 (ISP) 連線，或者如果您的電腦 IP 地址是動態地址並且在每次重新啟動電腦時都會變更，則 IP 地址可能不是靜態地址。若要確保您的安全群組規則允許從本機電腦傳入流量，請指定用戶端電腦使用的 IP 地址範圍，而不是為 **Source** (來源) 指定單一 IP 地址。

   如需安全群組規則的詳細資訊，請參閱 *Amazon VPC 使用者指南* 中的 [安全群組規則](https://docs.aws.amazon.com/vpc/latest/userguide/security-group-rules.html)。

**查看子網的路由表。**  
您需要一個路由路徑，來將目的地位於 VPC 之外的所有流量，傳送到 VPC 的網際網路閘道。

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

1. 在導覽窗格中，選取 **Instances (執行個體)**，然後選取您的執行個體。

1. 在 **Networking** (網路) 標籤上，請記下 **VPC ID** 和 **Subnet ID** (子網 ID) 的值。

1. 在 [https://console.aws.amazon.com/vpc/](https://console.aws.amazon.com/vpc/) 開啟 Amazon VPC 主控台。

1. 在導覽窗格中，選擇 **Internet Gateways** (網際網路閘道)。請確認已經有網際網路閘道連結到 VPC。否則請選擇 **Create internet gateway (建立網際網路閘道)**、輸入網際網路閘道的名稱，然後選擇 **Create internet gateway (建立網際網路閘道)**。然後，針對您建立的網際網路閘道，選取 **Actions (動作)**、**Attach to VPC (連接至 VPC)**、選取您的 VPC，然後選取 **Attach internet gateway (連接網際網路閘道)**，以將網際網路閘道連接至您的 VPC。

1. 在導覽窗格中，選取 **Subnets** (子網)，然後選取子網。

1. 在 **Route Table (路由表)** 索引標籤中，確認有包含 `0.0.0.0/0` 的路由做為目的地，以及有 VPC 的網際網路閘道做為目標。如果您是使用其 IPv6 地址來連線到執行個體，請確認有針對所有 IPv6 流量 (`::/0`) 的路由，來指向網際網路閘道。若否，請執行下列操作：

   1. 選擇路由表 ID (rtb-*xxxxxxxx*) 以導覽至路由表。

   1. 在 **Routes (路由)** 標籤中，選擇 **Edit routes (編輯路由)**。選擇 **Add route (新增路由)**，使用 `0.0.0.0/0` 做為目的地，並以網際網路閘道為目標。若是 IPv6，請選擇 **Add route (新增路由)**，使用 `::/0` 做為目的地，並以網際網路閘道為目標。

   1. 選擇 **Save routes (儲存路由)**。

**查看子網的網路存取控制清單 (ACL)。**

網路 ACL 必須允許透過通訊埠 22 上您的本機 IP 位址來傳入 SSH 流量。它也必須允許傳送到暫時連接埠 (1024-65535) 的傳出流量。

1. 在 [https://console.aws.amazon.com/vpc/](https://console.aws.amazon.com/vpc/) 開啟 Amazon VPC 主控台。

1. 在導覽窗格中，選擇 **Subnets** (子網)。

1. 選取您的子網。

1. 在 **Network ACL** (網路 ACL) 索引標籤中，對於 **Inbound rules** (傳入規則)，請確認這些規則允許透過所需的連接埠，從您的電腦傳入流量。否則，請刪除或修改會阻止流量的規則。

1. 對於 **Outbound Rules** (傳出規則)，確認這些規則允許透過暫時連接埠將流量傳出到電腦。否則，請刪除或修改會阻止流量的規則。

**如果您的電腦位於企業網路中**  
請詢問網路管理員，了解內部的防火牆是否允許透過連接埠 22 將流量傳入至您的電腦，或從您的電腦傳出。

如果您的電腦上具有防火牆，請確認此防火牆是否允許透過連接埠 22 號將流量傳入至您的電腦，或從您的電腦傳出。

**確認執行個體是否具備公有 IPv4 地址。**  
如果沒有，您可建立彈性 IP 地址與您執行個體的關聯。如需詳細資訊，請參閱[彈性 IP 位址](elastic-ip-addresses-eip.md)。

**檢查執行個體上的 CPU 負載，伺服器可能會過載。**  
AWS 會自動提供資料，例如 Amazon CloudWatch 指標和執行個體狀態，您可以用來查看執行個體上有多少 CPU 負載，並視需要調整負載的處理方式。如需詳細資訊，請參閱[使用 CloudWatch 監控您的執行個體](using-cloudwatch.md)。
+ 如果負載會變動不定，您可以利用 [Auto Scaling](https://aws.amazon.com/autoscaling/) 和 [Elastic Load Balancing](https://aws.amazon.com/elasticloadbalancing/) 功能，來自動擴展或縮減執行個體的規模。
+ 如果負載穩定增加，您可以改用較大容量的執行個體類型。如需詳細資訊，請參閱[Amazon EC2 執行個體類型變更](ec2-instance-resize.md)。

**若要使用 IPv6 地址來連線到執行個體，請檢察下列項目：**
+ 與子網具有關聯的路由表，必須包含讓 IPv6 流量 (`::/0`) 傳到網際網路閘道的路由路徑。
+ 安全群組規則必須允許從本機的 IPv6 地址，透過連接埠 22 傳入流量。
+ 網路 ACL 必須允許外傳和傳入的 IPv6 流量。
+ 如果從舊版的 AMI 啟動執行個體，則執行個體可能未針對 DHCPv6 設定 (在網路介面上不會自動辨識 IPv6 地址)。如需詳細資訊，請參閱「Amazon VPC 使用者指南」中的*在執行個體上設定 IPv6*。
+ 您的本機電腦必須擁有 IPv6 地址，且必須設定以使用 IPv6。

## 錯誤：無法載入金鑰 ... 預期為：任一私有金鑰
<a name="troubleshoot-instance-connect-key-file"></a>

如果您嘗試連接到您的執行個體並收到錯誤訊息 `unable to load key ... Expecting: ANY PRIVATE KEY`，則表示存放私有金鑰的檔案設定不正確。如果私有金鑰檔案以 `.pem` 結尾，則表示可能仍設定不正確。私有金鑰檔案設定錯誤的可能原因是憑證遺失。

**如果私有金鑰檔案設定不正確，請依照以下步驟解決錯誤**

1. 建立新的金鑰對。如需詳細資訊，請參閱 [使用 Amazon EC2 建立金鑰對](create-key-pairs.md#having-ec2-create-your-key-pair)。
**注意**  
或者，您也可以使用第三方工具來建立新的金鑰對。如需詳細資訊，請參閱 [使用第三方工具來建立金鑰對，然後將公有金鑰匯入 Amazon EC2](create-key-pairs.md#how-to-generate-your-own-key-and-import-it-to-aws)。

1. 將新的金鑰對新增到執行個體。如需詳細資訊，請參閱[我的私有金鑰遺失。如何連線到我的執行個體？](#replacing-lost-key-pair)。

1. 使用新的金鑰對連線至執行個體。

## 錯誤：伺服器無法辨識使用者金鑰
<a name="TroubleshootingInstancesServerError"></a>

**若如果使用 SSH 連線到執行個體**
+ 使用 `ssh -vvv`，在連線時取得三重 verbose (詳細模式) 的除錯資訊：

  ```
  ssh -vvv -i path/key-pair-name.pem instance-user-name@ec2-203-0-113-25.compute-1.amazonaws.com
  ```

  下列的輸出範例，示範了在嘗試使用伺服器無法辨識的金鑰來連線到執行個體時，可能會顯示的訊息：

  ```
  open/ANT/myusername/.ssh/known_hosts).
  debug2: bits set: 504/1024
  debug1: ssh_rsa_verify: signature correct
  debug2: kex_derive_keys
  debug2: set_newkeys: mode 1
  debug1: SSH2_MSG_NEWKEYS sent
  debug1: expecting SSH2_MSG_NEWKEYS
  debug2: set_newkeys: mode 0
  debug1: SSH2_MSG_NEWKEYS received
  debug1: Roaming not allowed by server
  debug1: SSH2_MSG_SERVICE_REQUEST sent
  debug2: service_accept: ssh-userauth
  debug1: SSH2_MSG_SERVICE_ACCEPT received
  debug2: key: boguspem.pem ((nil))
  debug1: Authentications that can continue: publickey
  debug3: start over, passed a different list publickey
  debug3: preferred gssapi-keyex,gssapi-with-mic,publickey,keyboard-interactive,password
  debug3: authmethod_lookup publickey
  debug3: remaining preferred: keyboard-interactive,password
  debug3: authmethod_is_enabled publickey
  debug1: Next authentication method: publickey
  debug1: Trying private key: boguspem.pem
  debug1: read PEM private key done: type RSA
  debug3: sign_and_send_pubkey: RSA 9c:4c:bc:0c:d0:5c:c7:92:6c:8e:9b:16:e4:43:d8:b2
  debug2: we sent a publickey packet, wait for reply
  debug1: Authentications that can continue: publickey
  debug2: we did not send a packet, disable method
  debug1: No more authentication methods to try.
  Permission denied (publickey).
  ```

**如果使用 PuTTY 連線到您的執行個體**
+ 確認私有金鑰 (.pem) 檔案是否已轉換為 PuTTY (.ppk) 可以辨識的格式。如需有關轉換私有金鑰的詳細資訊，請參閱[使用 PuTTY 連線至您的 Linux 執行個體](connect-linux-inst-from-windows.md)。
**注意**  
在 PuTTYgen 中，載入私有金鑰，然後選取 **Save Private Key (儲存私有金鑰)**，而非 **Generate (產生)**。
+ 驗證您在連線時已使用適當的 AMI 使用者名稱。在 **PuTTY Configuration** 視窗的 **Host name** 中，輸入使用者名稱。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AWSEC2/latest/UserGuide/TroubleshootingInstancesConnecting.html)
+ 確認已建立傳入安全群組的規則，以允許從適當的連接埠傳入流量。如需詳細資訊，請參閱[從您電腦連線到執行個體的規則](security-group-rules-reference.md#sg-rules-local-access)。

## 錯誤：許可遭拒或 [執行個體] 連接埠 22 已關閉連線
<a name="TroubleshootingInstancesConnectingSSH"></a>

若使用 SSH 連線至執行個體，並出現下列任一錯誤：`Host key not found in [directory]`、`Permission denied (publickey)`、`Authentication failed, permission denied` 或 `Connection closed by [instance] port 22`，請確認您在連線時使用了適當的 AMI 使用者名稱，**且已為執行個體指定正確的私有金鑰 (`.pem)` 檔案。

適合的使用者名稱如下：


| 用於啟動執行個體的 AMI | 預設使用者名稱 | 
| --- | --- | 
|  Amazon Linux  | ec2-user  | 
| CentOS | centos 或 ec2-user | 
| Debian | admin | 
| Fedora  | fedora 或 ec2-user | 
| FreeBSD | ec2-user | 
| RHEL | ec2-user 或 root | 
| SUSE  | ec2-user 或 root | 
| Ubuntu  | ubuntu | 
| Oracle  | ec2-user | 
| Bitnami  | bitnami | 
| Rocky Linux  | rocky | 
| 其他 | 檢查 AMI 提供者 | 

例如，若要使用 SSH 用戶端來連接至 Amazon Linux 執行個體，請使用下列命令：

```
ssh -i /path/key-pair-name.pem instance-user-name@ec2-203-0-113-25.compute-1.amazonaws.com
```

請確認在啟動執行個體時，所使用的私有金鑰檔案可對應到您所選取的金鑰對。

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

1. 在導覽窗格中，選取 **Instances (執行個體)**，然後選取您的執行個體。

1. 在 **Details (詳細資訊)** 標籤上，驗證 **Instance details (執行個體詳細資訊)** 下方中 **Key pair name (金鑰對名稱)** 的值。

1. 如果在啟動執行個體時，您並未指定金鑰對，可以終止該執行個體並啟動新的執行個體，來確保指定金鑰對。如果這是一直在使用的執行個體，但是您已經沒有金鑰對的 `.pem` 檔案，可以用新的金鑰對來取代舊的。如需詳細資訊，請參閱[我的私有金鑰遺失。如何連線到我的執行個體？](#replacing-lost-key-pair)。

如果產生自己的金鑰對，請確定金鑰產生器已經過設定，可產生 RSA 金鑰。DSA 金鑰是不被接受的。

如果收到 `Permission denied (publickey)` 錯誤，而上述的所有情況皆不適用 (例如，先前可以連線)，可能是對執行個體家目錄的權限已變更。對 `/home/instance-user-name/.ssh/authorized_keys` 的權限必須限定為只指派給擁有者。

**在執行個體上確認權限**

1. 停止執行個體並分離根磁碟區。如需詳細資訊，請參閱[停止和啟動 Amazon EC2 執行個體](Stop_Start.md)。

1. 在目前執行個體所在的同一個可用區域中，啟動暫時執行個體 (使用與目前執行個體所用 AMI 類似的或相同的 AMI)，然後將根磁碟區連結到暫時執行個體。

1. 連線到暫時執行個體、建立掛載點，然後掛載已連結的磁碟區。

1. 從暫時執行個體，檢查已連結磁碟區 `/home/instance-user-name/` 目錄的權限。必要時，請依照下列方式來調整權限：

   ```
   [ec2-user ~]$ chmod 600 mount_point/home/instance-user-name/.ssh/authorized_keys
   ```

   ```
   [ec2-user ~]$ chmod 700 mount_point/home/instance-user-name/.ssh
   ```

   ```
   [ec2-user ~]$ chmod 700 mount_point/home/instance-user-name
   ```

1. 取消掛載磁碟區、將該磁碟區從暫時執行個體分離，然後再重新連結到原始執行個體。請務必為根磁碟區指定正確的裝置名稱，例如 `/dev/xvda`。

1. 啟動執行個體。如果不再需要暫時執行個體，您可以將其終止。

## 錯誤：未受保護的私有金鑰檔案
<a name="troubleshoot-unprotected-key"></a>

私有金鑰檔案必須受到保護，不讓其他任何使用者讀取或寫入。如果私有金鑰可以讓除了您以外的任何人讀取或寫入，SSH 會忽略您的金鑰，而且會出現下列的警告訊息。

```
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0777 for '.ssh/my_private_key.pem' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
bad permissions: ignore key: .ssh/my_private_key.pem
Permission denied (publickey).
```

如果在您試著登入執行個體時，出現類似的訊息，請檢驗該錯誤訊息的第一行，來確認是否針對執行個體使用了正確的公有金鑰。上列的範例使用私有金鑰 `.ssh/my_private_key.pem`，此金鑰具有 `0777` 的檔案權限，可讓所有人讀取或寫入此檔案。這種權限等級非常地不安全，因此 SSH 會忽略此金鑰。

如果從 macOS 或 Linux 連線，請執行下列命令來修正此錯誤，替換私有金鑰檔案的路徑。

```
[ec2-user ~]$ chmod 0400 .ssh/my_private_key.pem
```

如果從 Windows 連線至 Linux 執行個體，請在您的本機電腦上執行下列步驟。

1. 導覽至 .pem 檔案。

1. 在 .pem 檔案上按一下右鍵，然後選取 **Properties** (屬性)。

1. 選擇 **Security (安全)** 標籤。

1. 選取 **Advanced** (進階)。

1. 請確認您是檔案的擁有者。如果不是，請將擁有者變更為您的使用者名稱。

1. 選取 **Disable inheritance** (停用繼承) 和 **Remove all inherited permissions from this object** (移除此物件的所有繼承許可)。

1. 選取 **Add** (新增)、**Select a principal** (選取委託人)，輸入您的使用者名稱，然後選取 **OK** (確定)。

1. 從 **Permission Entry** (許可項目) 視窗中，授予 **Read** (讀取) 許可，然後選取 **OK** (確定)。

1. 按一下 **Apply** (套用)，以確保儲存所有設定。

1. 選取 **OK** (確定) 關閉 **Advanced Security Settings** (進階安全設定) 視窗。

1. 選取 **OK** (確定) 關閉 **Properties** (屬性) 視窗。

1. 您應能使用 SSH 從 Windows 連線至 Linux 執行個體。

在 Windows 命令提示中執行下列命令。

1. 在命令提示中，導覽至 .pem 檔案的檔案路徑位置。

1. 執行下列命令，重設並移除明確許可：

   ```
   icacls.exe $path /reset
   ```

1. 執行下列命令，對目前使用者授予讀取許可：

   ```
   icacls.exe $path /GRANT:R "$($env:USERNAME):(R)"
   ```

1. 執行下列命令以停用繼承並移除繼承的許可。

   ```
   icacls.exe $path /inheritance:r
   ```

1. 您應能使用 SSH 從 Windows 連線至 Linux 執行個體。

## 錯誤：私有金鑰的開頭必須為「-----BEGIN RSA PRIVATE KEY-----」，結尾為「-----END RSA PRIVATE KEY-----」
<a name="troubleshoot-private-key-file-format"></a>

如果您使用第三方工具 (例如 **ssh-keygen**) 來建立 RSA 金鑰對，則它會以 OpenSSH 金鑰格式產生私有金鑰。當您連線到您的執行個體時，如果以 OpenSSH 格式使用私有金鑰來解密密碼，則您會得到錯誤 `Private key must begin with "-----BEGIN RSA PRIVATE KEY-----" and end with "-----END RSA PRIVATE KEY-----"`。

若要解決錯誤，私有金鑰必須採用 PEM 格式。使用下列命令，以 PEM 格式建立私有金鑰：

```
ssh-keygen -m PEM
```

## 錯誤：主機金鑰驗證失敗
<a name="troubleshoot-host-key-verification-failed"></a>

如果存放在執行個體上的 `known_hosts` 檔案中的主機金鑰與用戶端上的主機金鑰不相符，就會發生此錯誤。例如，如果您使用一個公有 IP 位址連接到執行個體，然後嘗試使用不同的公有 IP 位址再次連接到該執行個體，則可能會發生不相符情況。新增或移除彈性 IP 位址後可能會發生這種情況，因為這樣做會變更執行個體的公有 IP 位址。

若要解決此錯誤，請先確認主機金鑰或執行個體的網路組態有預期變更。在連線到執行個體之前，您可能也想要[驗證主機指紋](connection-prereqs-general.md#connection-prereqs-fingerprint)。連線到執行個體後，可以從 `known_hosts` 檔案中移除舊的主機金鑰。如需說明，請參閱執行個體上使用的 Linux 發行版本的文件。

## 錯誤：伺服器拒絕了我們的金鑰，*或是*沒有可用的支援驗證方法
<a name="TroubleshootingInstancesConnectingPuTTY"></a>

如果使用 PuTTY 來連線到執行個體，並出現下列任一錯誤：Error: Server refused our key 或 Error: No supported authentication methods available，請確認您在連線時使用了適當的 AMI 使用者名稱。在 **PuTTY 組態**視窗的**使用者名稱**中輸入使用者名稱。

適合的使用者名稱如下：


| 用於啟動執行個體的 AMI | 預設使用者名稱 | 
| --- | --- | 
|  Amazon Linux  | ec2-user  | 
| CentOS | centos 或 ec2-user | 
| Debian | admin | 
| Fedora  | fedora 或 ec2-user | 
| FreeBSD | ec2-user | 
| RHEL | ec2-user 或 root | 
| SUSE  | ec2-user 或 root | 
| Ubuntu  | ubuntu | 
| Oracle  | ec2-user | 
| Bitnami  | bitnami | 
| Rocky Linux  | rocky | 
| 其他 | 檢查 AMI 提供者 | 

您也應該確認：
+ 使用的 PuTTY 是最新版。如需詳細資訊，請參閱 [PuTTY 網頁](https://www.chiark.greenend.org.uk/~sgtatham/putty/)。
+ 您的私有金鑰 (.pem) 檔案是否已正確轉換為 PuTTY (.ppk) 可以辨識的格式。如需有關轉換私有金鑰的詳細資訊，請參閱[使用 PuTTY 連線至您的 Linux 執行個體](connect-linux-inst-from-windows.md)。

## 無法對執行個體執行 Ping 動作
<a name="troubleshoot-instance-ping"></a>

`ping` 命令是一種 ICMP 傳輸流量 — 如果無法對執行個體執行 ping 命令，請確定傳入安全群組的規則，可允許 ICMP 傳輸流量接收從所有來源，或是從您用來發出指令的電腦或執行個體，所傳送的 `Echo Request` 訊息。

如果無法從執行個體發出 `ping` 指令，請確定安全群組外傳的規則，可允許 ICMP 傳輸流量，來讓 `Echo Request` 訊息傳到所有目的地，或是傳到您想要對其執行 ping 的主機。

`Ping` 命令也可能會遭到防火牆封鎖，或因為網路延遲或硬體問題而逾時。如需進一步疑難排解的協助，請洽詢您的區域網路或系統管理員。

## 錯誤：伺服器意外關閉網路連線
<a name="troubleshoot-ssh"></a>

如果您使用 PuTTY 連接到執行個體，並且收到錯誤「伺服器意外關閉網路連線」，請驗證您在 PuTTY 組態的連線頁面上是否已啟用保持連線，以避免中斷連線。部分伺服器在指定的期間內未收到任何資料時會中斷連接用戶端。將 Seconds between keepalives (保持連線之間的秒數) 設為 59 秒。

如果您在啟用保持連線之後仍遇到問題，請在 PuTTY 組態的連線頁面上嘗試停用 Nagle 的演算法。

## 錯誤：EC2 Instance Connect 的主機金鑰驗證失敗
<a name="troubleshoot-host-key-validation"></a>

如果您輪換執行個體主機金鑰，新的主機金鑰不會自動上傳至 AWS 信任的主機金鑰資料庫。因此當您嘗試使用 EC2 Instance Connect 以瀏覽器為基礎的用戶端連線到您的執行個體時，這會導致主機金鑰驗證失敗，而無法連線到您的執行個體。

若要解決此錯誤，您必須在 `eic_harvest_hostkeys` 執行個體上執行指令碼，以將新的主機金鑰上傳至 EC2 Instance Connect。指令碼位於 Amazon Linux 2 執行個體上的 `/opt/aws/bin/` 和 Ubuntu 執行個體上的 `/usr/share/ec2-instance-connect/`。

------
#### [ Amazon Linux 2 ]

**解決 Amazon Linux 2 執行個體上的主機金鑰驗證失敗錯誤**

1. 使用 SSH 連接至您的執行個體。

   您可以使用 EC2 Instance Connect CLI 或在您啟動執行個體時指派至該執行個體的 SSH 金鑰對，並使用您在啟動執行個體所用的 AMI 預設使用者名稱，來進行連線。Amazon Linux 2 的預設使用者名稱為 `ec2-user`。

   例如，如果執行個體的啟動方式是 Amazon Linux 2，執行個體的公有 DNS 名稱是 `ec2-a-b-c-d.us-west-2.compute.amazonaws.com`，金鑰對是 `my_ec2_private_key.pem`，則使用以下命令來透過 SSH 連接至執行個體：

   ```
   $ ssh -i my_ec2_private_key.pem ec2-user@ec2-a-b-c-d.us-west-2.compute.amazonaws.com
   ```

   如需連線至執行個體的詳細資訊，請參閱[使用 SSH 用戶端連接至 Linux 執行個體](connect-linux-inst-ssh.md)。

1. 導覽至以下資料夾。

   ```
   [ec2-user ~]$ cd /opt/aws/bin/
   ```

1. 在執行個體上執行以下命令。 

   ```
   [ec2-user ~]$ ./eic_harvest_hostkeys
   ```

   請注意，呼叫成功時不會產生輸出。

   您現在可以使用 EC2 Instance Connect 以瀏覽器為基礎的用戶端連線至執行個體。

------
#### [ Ubuntu ]

**解決 Ubuntu 執行個體上的主機金鑰驗證失敗錯誤**

1. 使用 SSH 連接至您的執行個體。

   您可以使用 EC2 Instance Connect CLI 或在您啟動執行個體時指派至該執行個體的 SSH 金鑰對，並使用您在啟動執行個體所用的 AMI 預設使用者名稱，來進行連線。若是 Ubuntu，預設使用者名稱為 `ubuntu`。

   例如，如果執行個體的啟動方式是 Ubuntu，執行個體的公有 DNS 名稱是 `ec2-a-b-c-d.us-west-2.compute.amazonaws.com`，金鑰對是 `my_ec2_private_key.pem`，則使用以下命令來透過 SSH 連接至執行個體：

   ```
   $ ssh -i my_ec2_private_key.pem ubuntu@ec2-a-b-c-d.us-west-2.compute.amazonaws.com
   ```

   如需連線至執行個體的詳細資訊，請參閱[使用 SSH 用戶端連接至 Linux 執行個體](connect-linux-inst-ssh.md)。

1. 導覽至以下資料夾。

   ```
   [ec2-user ~]$ cd /usr/share/ec2-instance-connect/
   ```

1. 在執行個體上執行以下命令。 

   ```
   [ec2-user ~]$ ./eic_harvest_hostkeys
   ```

   請注意，呼叫成功時不會產生輸出。

   您現在可以使用 EC2 Instance Connect 以瀏覽器為基礎的用戶端連線至執行個體。

------

## 無法使用 EC2 Instance Connect 連線至 Ubuntu 執行個體
<a name="troubleshoot-eic-ubuntu"></a>

如果您使用 EC2 Instance Connect 連線至 Ubuntu 執行個體，並且在嘗試連線時出現錯誤，可以使用以下資訊嘗試修復問題。

**可能的原因**

該執行個體的 `ec2-instance-connect` 套件並非最新版本。

**解決方案**

如下所示將該執行個體的 `ec2-instance-connect` 套件更新至最新版本：

1. 使用 EC2 Instance Connect 以外的方法[連線](connect-to-linux-instance.md)至您的執行個體。

1. 在您的執行個體上執行以下命令，將 `ec2-instance-connect` 套件更新至最新版本。

   ```
   apt update && apt upgrade
   ```

## 我的私有金鑰遺失。如何連線到我的執行個體？
<a name="replacing-lost-key-pair"></a>

如果遺失了 EBS 後端執行個體的私有金鑰，您可以重新獲得對執行個體的存取權限。您必須停止執行個體、中斷其根磁碟區的連結，並將該磁碟區做為資料磁碟區連接至其他執行個體、使用新的公有金鑰修改 `authorized_keys` 檔案、將磁碟區移回到原始的執行個體，然後重新啟動執行個體。關於啟動、連線到和停用執行個體，詳細資訊請參閱 [Amazon EC2 執行個體狀態變更](ec2-instance-lifecycle.md)。

僅具有 EBS 根磁碟區的執行個體支援此程序。如果執行個體有一個執行個體儲存體根磁碟區，則無法使用此程序來重新獲取執行個體的存取權；您必須具備私有金鑰，才能連線到執行個體。若要確定執行個體的根磁碟區類型，請開啟 Amazon EC2 主控台，選擇**執行個體**，選取執行個體，選擇**儲存**索引標籤，然後在**根裝置詳細資訊**區段中，檢查**根裝置類型**的值。

此值為 `EBS` 或 `INSTANCE-STORE`。

除了下列步驟之外，遺失私有金鑰時還有其他方法可以連線到 Linux 執行個體。如需詳細資訊，請參閱[如果我在初次啟動後遺失了 SSH 金鑰對，該如何連接到 Amazon EC2 執行個體？](https://repost.aws/knowledge-center/user-data-replace-key-pair-ec2)

**Topics**
+ [步驟 1：建立新的金鑰對](#step-1-create-new-key-pair)
+ [步驟 2：取得關於原始執行個體及其根磁碟區的資訊](#step-2-get-info-about-original-instance)
+ [步驟 3：停止原始執行個體](#step-3-stop-original-instance)
+ [步驟 4：啟動暫時執行個體](#step-4-launch-temp-instance)
+ [步驟 5：將根磁碟區與原始執行個體分離，並將其連接到暫時執行個體](#step-5-detach-root-volume-and-attach-to-temp-instance)
+ [步驟 6：在掛載到暫時執行個體的原始磁碟區上，將新的公有金鑰新增至的 `authorized_keys`](#step-6-add-new-public-key-to-authorized_keys)
+ [步驟 7：取消掛載原始磁碟區，並將該磁碟區從暫時執行個體分離，然後再重新連接到原始執行個體](#step-7-unmount-detach-volume-and-reattach-to-original-instance)
+ [步驟 8：使用新的金鑰對連線到原始執行個體](#step-8-connect-to-original-instance)
+ [步驟 9：清理](#step-9-clean-up)

### 步驟 1：建立新的金鑰對
<a name="step-1-create-new-key-pair"></a>

使用 Amazon EC2 主控台或第三方工具來產生新的金鑰對。如果希望新金鑰對的名稱，和已遺失私有金鑰的相同，您必須先刪除現有的金鑰對。如需建立新金鑰對的詳細資訊，請參閱[使用 Amazon EC2 建立金鑰對](create-key-pairs.md#having-ec2-create-your-key-pair)或[使用第三方工具來建立金鑰對，然後將公有金鑰匯入 Amazon EC2](create-key-pairs.md#how-to-generate-your-own-key-and-import-it-to-aws)。

### 步驟 2：取得關於原始執行個體及其根磁碟區的資訊
<a name="step-2-get-info-about-original-instance"></a>

請儲存下列資訊，完成此程序將會需要用到這些資訊。

**取得原始執行個體的相關資訊**

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

1. 在導覽窗格中選取 **Instances (執行個體)**，然後選取您要連線的執行個體。(我們會將此執行個體稱為「原始」**執行個體。)

1. 在 **Details (詳細資訊)** 索引標籤上記下執行個體 ID 和 AMI ID。

1. 在 **網路** 索引標籤上記下 「可用區域」。

1. 在 **Storage (儲存)** 索引標籤下的 **根裝置名稱**，記下根磁碟區的裝置名稱 (例如：`/dev/xvda`)。接著，在 **區塊型儲存裝置** 下找出這個裝置名稱，並記下磁碟區 ID (例如：vol-0a1234b5678c910de)。

### 步驟 3：停止原始執行個體
<a name="step-3-stop-original-instance"></a>

選擇 **Instance state (執行個體狀態)**、**Stop instance (停止執行個體)**。如果此選項已停用，則執行個體已停止或其根磁碟區是執行個體儲存體磁碟區。

**警告**  
當您停止執行個體時，執行個體存放磁碟區上的資料會遺失。若要保留此資料，請將其備份至持久性儲存。

### 步驟 4：啟動暫時執行個體
<a name="step-4-launch-temp-instance"></a>

**啟動暫時執行個體**

1. 在導覽窗格中，選擇 **Instances** (執行個體)，然後選擇 **Launch instances** (啟動執行個體)。

1. 在 **Name and tags** (名稱和標籤) 區段，針對 **Name** (名稱)，輸入 **Temporary** (暫時)。

1. 在 **Application and OS Images** (應用程式和作業系統映像) 區段，選取您用來啟動原始執行個體的同一個 AMI。如果此 AMI 無法使用，您可以從已停止的執行個體，建立能夠使用的 AMI。如需詳細資訊，請參閱[建立 Amazon EBS 支援的 AMI](creating-an-ami-ebs.md)。

1. 在 **Instance type** (執行個體類型) 區段，保留預設執行個體類型。

1. 在 **Key pair** (金鑰對) 區段，針對 **Key pair name** (金鑰對名稱)，選取要使用的現有金鑰對或建立新的金鑰對。

1. 在 **Network settings** (網路設定) 區段，選取 **Edit** (編輯)，然後針對 **Subnet** (子網)，選取與原始執行個體相同可用區域中的子網。

1. 在 **Summary** (摘要) 面板中，選擇 **Launch ** (啟動)。

### 步驟 5：將根磁碟區與原始執行個體分離，並將其連接到暫時執行個體
<a name="step-5-detach-root-volume-and-attach-to-temp-instance"></a>

1. 在導覽窗格中，選擇**磁碟區**，接著再選取原始執行個體的根磁碟區 (您已在先前的步驟中記下其磁碟區 ID)。選取 **Actions** (動作)、**Detach Volume** (分離磁碟區)，然後選取 **Detach** (分離)。等待磁碟區的狀態變成 `available`。(您可能需要選取 **Refresh (重新整理)** 圖示。)

1. 在已選取磁碟區的狀態下，選取 **Actions** (動作)，然後再選取 **Attach volume** (連接磁碟區)。選取暫時執行個體的執行個體 ID、記下 **Device name** (裝置名稱) 中的指定裝置名稱 (例如：`/dev/sdf`)，接著再選取 **Attach volume** (連接磁碟區)。
**注意**  
如果您從 AWS Marketplace AMI 啟動原始執行個體，且磁碟區包含 AWS Marketplace 代碼，您必須先停止暫時執行個體，才能連接磁碟區。

### 步驟 6：在掛載到暫時執行個體的原始磁碟區上，將新的公有金鑰新增至的 `authorized_keys`
<a name="step-6-add-new-public-key-to-authorized_keys"></a>

1. 連線到暫時執行個體。

1. 從暫時執行個體掛載已連結到執行個體的磁碟區，如此您就能存取其檔案系統。例如，如果裝置名稱為 `/dev/sdf`，請使用下列的指令來將磁碟區掛載為 `/mnt/tempvol`。<a name="device-name"></a>
**注意**  
在執行個體上所顯示的裝置名稱可能會有不同。例如，掛載為 `/dev/sdf` 的裝置，在執行個體上可能會顯示為 `/dev/xvdf`。Red Hat 的某些版本 (或是其變體版本，例如 CentOS) 甚至可能會將結尾的字母增加 4 個字元，其中 `/dev/sdf` 會變成 `/dev/xvdk`。

   1. 使用 **lsblk** 命令來查看磁碟區是否已分割。

      ```
      [ec2-user ~]$ lsblk
      NAME    MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
      xvda    202:0    0    8G  0 disk
      └─xvda1 202:1    0    8G  0 part /
      xvdf    202:80   0  101G  0 disk
      └─xvdf1 202:81   0  101G  0 part
      xvdg    202:96   0   30G  0 disk
      ```

      在上述的範例中，`/dev/xvda` 和 `/dev/xvdf` 為分割的磁碟區，而 `/dev/xvdg` 則不是。如果磁碟區已分割，則在接下來的步驟中，您會掛載 (`/dev/xvdf1)` 而非原始裝置 (`/dev/xvdf`)。

   1. 建立暫時的目錄來掛載磁碟區。

      ```
      [ec2-user ~]$ sudo mkdir /mnt/tempvol
      ```

   1. 使用您先前找出的磁碟區名稱或裝置名稱，將磁碟區 (或分割磁碟區) 掛載至暫時掛載點。必要命令取決於作業系統的檔案系統。請注意，在執行個體上所顯示的設備名稱可能會有不同。如需詳細資訊，請參閱步驟 6 中的 [note](#device-name)。
      + Amazon Linux、Ubuntu 和 Debian

        ```
        [ec2-user ~]$ sudo mount /dev/xvdf1 /mnt/tempvol
        ```
      + Amazon Linux 2、CentOS、SUSE Linux 12 和 RHEL 7.x

        ```
        [ec2-user ~]$ sudo mount -o nouuid /dev/xvdf1 /mnt/tempvol
        ```
**注意**  
如果您收到檔案系統毀損的錯誤，請執行下列命令，使用 **fsck** 公用程式來檢查檔案系統並修復任何問題：  

   ```
   [ec2-user ~]$ sudo fsck /dev/xvdf1
   ```

1. 從暫時執行個體使用下列的指令，用暫時執行個體的 `authorized_keys` 所產生的新公有金鑰，來更新已掛載磁碟區上的 `authorized_keys`。
**重要**  
下列的範例使用 Amazon Linux 使用者名稱 `ec2-user`。您可以需要換成不同的使用者名稱，例如適用於 Ubuntu 執行個體的 `ubuntu`。

   ```
   [ec2-user ~]$ cp .ssh/authorized_keys /mnt/tempvol/home/ec2-user/.ssh/authorized_keys
   ```

   如果此項複製動作成功，您就可以進行下一個步驟。

   (選用) 否則，如果您沒有編輯 `/mnt/tempvol` 中的檔案的許可，必須使用 **sudo** 來更新檔案，然後檢查對於該檔案的許可，以確認您是否能夠登入原始執行個體。使用下列命令以檢查對檔案的許可。

   ```
   [ec2-user ~]$ sudo ls -l /mnt/tempvol/home/ec2-user/.ssh
   total 4
   -rw------- 1 222 500 398 Sep 13 22:54 authorized_keys
   ```

   在本範例輸出中，*222* 為使用者 ID，而 *500* 為群組 ID。接下來，請使用 **sudo** 來重新執行先前失敗的複製命令。

   ```
   [ec2-user ~]$ sudo cp .ssh/authorized_keys /mnt/tempvol/home/ec2-user/.ssh/authorized_keys
   ```

   再次執行下列命令，以確定許可是否已變更。

   ```
   [ec2-user ~]$ sudo ls -l /mnt/tempvol/home/ec2-user/.ssh
   ```

   如果使用者 ID 和群組 ID 已變更，請使用下列命令來還原這些 ID。

   ```
   [ec2-user ~]$ sudo chown 222:500 /mnt/tempvol/home/ec2-user/.ssh/authorized_keys
   ```

### 步驟 7：取消掛載原始磁碟區，並將該磁碟區從暫時執行個體分離，然後再重新連接到原始執行個體
<a name="step-7-unmount-detach-volume-and-reattach-to-original-instance"></a>

1. 從暫時執行個體取消掛載已連結的磁碟區，如此您就能將該磁碟區重新連結到原始執行個體。例如，使用以下命令來取消掛載位於 `/mnt/tempvol` 的磁碟區。

   ```
   [ec2-user ~]$ sudo umount /mnt/tempvol
   ```

1. 將磁碟區從暫時執行個體分離 (您在上一步已卸載該磁碟區)：從 Amazon EC2 主控台，選取導覽窗格中的**磁碟區**，選取原始執行個體的根磁碟區 (您在上一步已記下磁碟區 ID)，選取**動作**、**分離磁碟區**，接著再選取**分離**。等待磁碟區的狀態變成 `available`。(您可能需要選取 **Refresh (重新整理)** 圖示。)

1. 將磁碟區重新連接到原始執行個體：在已選取磁碟區的狀態下，選取 **Actions** (動作)、**Attach volume** (連接磁碟區)。選取原始執行個體的執行個體 ID，指定您先前在[步驟 2](#step-2-get-info-about-original-instance) 中為原始根磁碟區連接 (`/dev/sda1` 或 `/dev/xvda`) 記錄的設備名稱，然後選取**連接磁碟區**。
**重要**  
如果您並未指定與原始連結相同的裝置名稱，則無法啟動原始執行個體。Amazon EC2 預期根磁碟區位於 `sda1` 或 `/dev/xvda`。

### 步驟 8：使用新的金鑰對連線到原始執行個體
<a name="step-8-connect-to-original-instance"></a>

選取原始執行個體，然後依序選取 **Instance state (執行個體狀態)**、**Start instance (啟動執行個體)**。在執行個體進入 `running` 狀態之後，您可以使用新金鑰對的私有金鑰檔案，來連線到該執行個體。

**注意**  
如果新金鑰對的名稱和對應的私有金鑰檔案，與原始金鑰對的名稱不同，請務必在連線到執行個體時，指定新私有金鑰檔案的名稱。

### 步驟 9：清理
<a name="step-9-clean-up"></a>

(選用) 如果不需再使用時，您可以終止暫時執行個體。選取暫時執行個體，再依序選取**執行個體狀態**、**終止 (刪除) 執行個體**。