

# 排查 Amazon EC2 实例的问题
故障排除

以下程序和技巧可以帮助您对 Amazon EC2 实例问题进行排查。

**Topics**
+ [实例启动问题](troubleshooting-launch.md)
+ [实例停止问题](TroubleshootingInstancesStopping.md)
+ [实例终止问题](TroubleshootingInstancesShuttingDown.md)
+ [无法访问的实例](troubleshoot-unreachable-instance.md)
+ [Linux 实例 SSH 问题](TroubleshootingInstancesConnecting.md)
+ [Linux 实例失败状态检查](TroubleshootingInstances.md)
+ [Linux 实例从错误的卷启动](instance-booting-from-wrong-volume.md)
+ [Windows 实例 RDP 问题](troubleshoot-connect-windows-instance.md)
+ [Windows 实例的启动问题](common-messages.md)
+ [Windows 实例问题](win-ts-common-issues.md)
+ [重置 Windows 管理员密码](ResettingAdminPassword.md)
+ [排查 Sysprep 问题](sysprep-troubleshoot.md)
+ [适用于 Linux 实例的 EC2Rescue](Linux-Server-EC2Rescue.md)
+ [EC2Rescue for Windows 实例](Windows-Server-EC2Rescue.md)
+ [EC2 Serial Console](ec2-serial-console.md)
+ [发送诊断中断](diagnostic-interrupt.md)

# 排查 Amazon EC2 实例启动问题
实例启动问题

以下问题排查技巧有助于解决启动 Amazon EC2 实例时出现的问题。

**Topics**
+ [

## 设备名称无效
](#troubleshooting-launch-devicename)
+ [

## 超出实例限制
](#troubleshooting-launch-limit)
+ [

## 实例容量不足
](#troubleshooting-launch-capacity)
+ [

## 当前不支持请求的配置。请查看文档以了解支持的配置。
](#troubleshooting-instance-configuration)
+ [

## 实例立即终止
](#troubleshooting-launch-internal)
+ [

## 权限不足
](#troubleshooting-launch-permissions)
+ [

## Windows 启动后，CPU 使用率短时增高（仅限 Windows 实例）
](#high-cpu-issue)
+ [

## 启动启用 IMDSv1 的实例时失败
](#launching-an-imdsv1-enabled-instance-fails)

## 设备名称无效


### 说明


在尝试启动新实例时，您将收到 `Invalid device name device_name` 错误。

### 原因


如果您在尝试启动实例时遇到此错误，则请求中为一个或多个卷指定的设备名称无效。可能的原因包括：
+ 所选 AMI 目前可能在使用该设备名称。
+ 该设备名称可能是为根卷保留的。
+ 该设备名称可能用于请求中的另一个卷。
+ 该设备名称可能对操作系统无效。

### 解决方案


要解决问题，请执行以下操作：
+ 确保所选 AMI 未使用该设备名称。运行以下命令，查看 AMI 使用的设备名称。

  ```
  aws ec2 describe-images --image-id ami-0abcdef1234567890 --query 'Images[*].BlockDeviceMappings[].DeviceName'
  ```
+ 确保没有使用为根卷保留的设备名称。有关更多信息，请参阅 [可用设备名称](device_naming.md#available-ec2-device-names)。
+ 确保在请求中指定的每个卷都有唯一的设备名称。
+ 确保指定的设备名称采用正确格式。有关更多信息，请参阅 [可用设备名称](device_naming.md#available-ec2-device-names)。

## 超出实例限制


### 说明


在尝试启动新实例或重新启动已停止的实例时，您将收到 `InstanceLimitExceeded` 错误。

### 原因


在尝试启动新实例或重新启动已停止的实例时，如果您已达到可在区域中启动的实例的数目限制，则将收到 `InstanceLimitExceeded` 错误。在创建 Amazon 账户时，我们根据区域设置可运行的实例数的默认限制。

### 解决方案


您可以根据区域请求提高实例限制。有关更多信息，请参阅 [Amazon EC2 Service Quotas](ec2-resource-limits.md)。

## 实例容量不足


### 说明


在尝试启动新实例或重新启动已停止的实例时，您将收到 `InsufficientInstanceCapacity` 错误。

### 原因


如果您在尝试启动实例或重新启动已停止的实例时收到此错误，则表示 Amazon 当前没有足够的可用按需容量来服务您的请求。

### 解决方案


要解决该问题，请尝试以下操作：
+ 等待几分钟，然后再次提交您的请求；容量可能经常转移。
+ 提交减少了实例数的新请求。例如，如果您要提交 1 个启动包含 15 个实例的请求，请改为尝试提交 3 个包含 5 个实例的请求或 15 个包含 1 个实例的请求。
+ 如果您要启动实例，请提交新请求，无需指定可用区。
+ 如果您要启动实例，请使用其他实例类型 (可在后期调整大小) 提交新请求。有关更多信息，请参阅 [Amazon EC2 实例类型更改](ec2-instance-resize.md)。
+ 如果您将实例启动到集群置放群组中，则会获得容量不足错误。

## 当前不支持请求的配置。请查看文档以了解支持的配置。


### 说明


当您尝试启动新实例时会出现 `Unsupported` 错误，因为不支持实例配置。

### 原因


错误消息提供了更多详细信息。例如，指定的区域或可用区可能不支持实例类型或实例购买选项。

### 解决方案


尝试其他实例配置。要搜索符合您要求的实例类型，请参阅 [查找 Amazon EC2 实例类型](instance-discovery.md)。

## 实例立即终止


### 说明


您的实例会从 `pending` 状态变为 `terminated` 状态。

### 原因


下面是实例可能立即终止的一些原因：
+ 您已超出 EBS 卷限制。有关更多信息，请参阅 [Amazon EC2 实例的 Amazon EBS 卷限制](volume_limits.md)。
+ EBS 快照损坏。
+ 根 EBS 卷已加密，但您无权访问用于解密的 KMS 密钥。
+ 在块储存设备映射中为 AMI 指定的快照已加密，但您无权访问用于解密的 KMS 密钥，或者您无权访问 KMS 密钥 来加密还原的卷。
+ 您用来启动实例的由 Amazon S3 支持的 AMI 缺少必需部分（一个 image.part.*xx* 文件）

有关更多信息，请通过以下某种方法了解终止原因。

**使用 Amazon EC2 控制台了解终止原因**

1. 通过以下网址打开 Amazon EC2 控制台：[https://console.aws.amazon.com/ec2/](https://console.amazonaws.cn/ec2/)。

1. 在导航窗格中，选择 **Instances**，然后选择实例。

1. 在第一个选项卡上，在**状态转换原因**旁边查看原因。

**使用 Amazon CLI 控制台了解终止原因**

1. 使用 [describe-instances](https://docs.amazonaws.cn/cli/latest/reference/ec2/describe-instances.html) 命令并指定实例 ID。

   ```
   aws ec2 describe-instances --instance-id i-1234567890abcdef0
   ```

1. 检查命令返回的 JSON 响应，并记下 `StateReason` 响应元素中的值。

   下面的代码块显示了 `StateReason` 响应元素的示例。

   ```
   "StateReason": {
     "Message": "Client.VolumeLimitExceeded: Volume limit exceeded", 
     "Code": "Server.InternalError"
   },
   ```

**使用 Amazon CloudTrail 了解终止原因**  
有关更多信息，请参阅 *Amazon CloudTrail 用户指南*中的[使用 CloudTrail 事件历史记录查看事件](https://docs.amazonaws.cn/awscloudtrail/latest/userguide/view-cloudtrail-events.html)。

### 解决方案


根据找到的终止原因，执行以下某项操作：
+ **`Client.VolumeLimitExceeded: Volume limit exceeded`** - 删除未使用的卷。您可以[提交请求](https://console.amazonaws.cn/support/home#/case/create?issueType=service-limit-increase&limitType=service-code-ebs)，要求提高卷限制。
+ **`Client.InternalError: Client error on launch`** – 确保您具有访问用于解密和加密卷的 Amazon KMS keys 所需的权限。有关更多信息，请参阅 *Amazon Key Management Service 开发人员指南*中的[在 Amazon KMS 中使用密钥策略](https://docs.amazonaws.cn/kms/latest/developerguide/key-policies.html)。

## 权限不足


### 说明


在尝试启动新实例时出现 `"errorMessage": "You are not authorized to perform this operation."` 错误，并且启动失败。

### 原因


如果您在尝试启动实例时出现此错误，则说明您没有启动该实例所需的 IAM 权限。

可能缺少以下权限：
+ `ec2:RunInstances`
+ `iam:PassRole`

也可能缺少其他权限。有关启动实例所需的权限列表，请参阅 [示例：使用 EC2 启动实例向导](iam-policies-ec2-console.md#ex-launch-wizard) 和 [启动实例 (RunInstances)](ExamplePolicies_EC2.md#iam-example-runinstances) 下的示例 IAM policy。

### 解决方案


要解决问题，请执行以下操作：
+ 如果您以 IAM 用户身份发出请求，请验证您拥有以下权限：
  + 对通配符资源 ("\$1") 执行 `ec2:RunInstances` 操作的许可
  + `iam:PassRole` 对匹配角色 ARN (例如 `arn:aws:iam::999999999999:role/ExampleRoleName`) 的资源执行操作的权限。
+ 如果您没有上述权限，请[编辑与 IAM 角色或用户关联的 IAM policy](https://docs.amazonaws.cn/IAM/latest/UserGuide/access_policies_manage-edit.html) 以添加缺少的必需权限。

如果问题并未解决且仍然出现启动失败错误，您可以解码错误中包含的授权失败消息。解码后的消息包含 IAM policy 中缺少的权限。有关更多消息，请参阅[在 EC2 实例启动期间收到“UnauthorizedOperation”错误消息后，如何解码授权失败消息？](https://repost.aws/knowledge-center/ec2-not-auth-launch)

## Windows 启动后，CPU 使用率短时增高（仅限 Windows 实例）


**注意**  
此故障排除技巧仅适用于 Windows 实例。

如果将 Windows Update 设置为 **Check for updates but let me choose whether to download and install them (检查更新，但允许我选择是否下载并安装它们)**（默认实例设置），则此检查可能会在实例上消耗 50 - 99% 的 CPU。如果此 CPU 消耗会导致您的应用程序出现问题，您可手动在 **Control Panel** 中更改 Windows Update 设置或者使用 Amazon EC2 用户数据字段中的以下脚本：

```
reg add "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update" /v AUOptions /t REG_DWORD /d 3 /f net stop wuauserv net start wuauserv
```

运行此脚本时，为 /d 指定一个值。默认值为 3。可能的值包括：

1. 从未检查更新

1. 检查更新，但允许我选择是否下载并安装它们

1. 下载更新，但允许我选择是否安装它们

1. 自动安装更新

在为您的实例修改用户数据后，可运行它。有关更多信息，请参阅[启动时在 Windows 实例上运行命令](user-data.md)。

## 启动启用 IMDSv1 的实例时失败


### 说明


您会获得 `UnsupportedOperation` 异常并收到以下消息：

`You can't launch instances with IMDSv1 because httpTokensEnforced is enabled for this account. Either launch the instance with httpTokens=required or contact your account owner to disable httpTokensEnforced using the ModifyInstanceMetadataDefaults API or the account settings in the EC2 console.`

### 原因


在 EC2 账户设置或 Amazon 组织声明性策略强制使用 IMDSv2 (`httpTokensEnforced = enabled`) 的账户中，尝试启动新实例并启用 IMDSv1 (`httpTokens = optional`) 时，将会引发此错误。

### 解决方案


如果您已准备好仅使用 IMDSv2，请在禁用 IMDSv1 的情况下启动实例 (`httpTokens = required`)。要检查准备就绪，请参阅[转换为使用 实例元数据服务版本 2](instance-metadata-transition-to-version-2.md)。

如果仍需要在新实例或现有实例上支持 IMDSv1，则需要在该区域为该账户禁用 IMDSv2 强制使用。要禁用 IMDSv2 强制使用，请将 `HttpTokensEnforced` 设置为 `disabled`。有关更多信息，请参阅《Amazon EC2 API 参考》中的 [ModifyInstanceMetadataDefaults](https://docs.amazonaws.cn/AWSEC2/latest/APIReference/API_ModifyInstanceMetadataDefaults.html)。如果您更喜欢使用控制台来配置此设置，请参阅[在账户级别强制使用 IMDSv2](configuring-IMDS-new-instances.md#enforce-imdsv2-at-the-account-level)。

 

# 排查 Amazon EC2 实例的停止问题
实例停止问题

如果您的 Amazon EBS 支持的实例卡在 `stopping` 状态，则底层主机可能存在问题。

要解决此问题，请按照下列步骤操作：

1. **强制停止实例**

   使用 Amazon EC2 控制台或 Amazon CLI 强制停止实例。有关步骤，请参阅[强制停止实例](#force-stop-instance)。

   实例将首先尝试正常关闭，其中包括刷新文件系统缓存和元数据（虽然您可以选择绕过正常关闭）。如果在超时期限内无法完成正常关闭，则实例将强制关闭，而不会刷新文件系统缓存和元数据。

1. **强制停止后**

   执行文件系统检查和修复过程。
**重要**  
执行这些过程至关重要，因为强制的停止会阻止刷新文件系统缓存和元数据。

1. **如果强制停止失败**

   如果 10 分钟后实例仍未停止，请执行以下操作：

   1. 请在 [Amazon Web Services re:Post](https://repost.aws/) 上发布求助请求。为了帮助加快解决问题，请提供实例 ID 并描述已采取的步骤。

   1. 此外，如果您有支持计划，则可在[支持中心](https://console.amazonaws.cn/support/home#/)创建技术支持案例。

   1. 在等待帮助时，您可以根据需要创建替代实例。有关步骤，请参阅[（可选）创建替代实例](#Creating_Replacement_Instance)。

当实例处于 `stopping` 状态或处于除 `running` 外的任何其他状态时，不会收取任何实例使用费用。只有当实例处于 `running` 状态时，您使用实例时才需要付费。

**Topics**
+ [

## 强制停止实例
](#force-stop-instance)
+ [

## （可选）创建替代实例
](#Creating_Replacement_Instance)

## 强制停止实例


您可以强制停止实例。如果在 10 分钟后，实例未停止，请在 [Amazon Web Services re:Post](https://repost.aws/) 上寻求帮助。为了帮助加快解决问题，请提供实例 ID 并描述已采取的步骤。此外，如果您有支持计划，则可在[支持中心](https://console.amazonaws.cn/support/home#/)创建技术支持案例。

**注意**  
使用控制台时，只能在实例处于 `stopping` 状态时强制停止实例。使用 Amazon CLI 时，可以在实例处于 `pending`、`running` 或 `stopping` 状态时强制停止实例。

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

**强制停止实例**

1. 通过以下网址打开 Amazon EC2 控制台：[https://console.aws.amazon.com/ec2/](https://console.amazonaws.cn/ec2/)。

1. 在导航窗格中，选择 **Instances**，然后选择卡住实例。

1. 选择**实例状态**、**强制停止实例**。

   请注意，只有当您的实例处于 `stopping` 状态时，**Force stop instance**（强制停止实例）才可用。如果您的实例处于另一状态（除 `shutting-down` 和 `terminated` 之外的状态），您可以使用 Amazon CLI 强制停止您的实例。

1. （可选）要绕过强制停止期间操作系统的正常关闭，请选中**跳过操作系统关闭**复选框。

1. 选择**强制停止**。

------
#### [ Amazon CLI ]

**强制停止实例**  
使用 [stop-instances](https://docs.amazonaws.cn/cli/latest/reference/ec2/stop-instances.html) 命令和 `--force` 选项。

```
aws ec2 stop-instances \
    --instance-ids i-1234567890abcdef0 \
    --force
```

要绕过强制停止期间操作系统的正常关闭，请包括 `--skip-os-shutdown` 选项。

```
aws ec2 stop-instances \
    --instance-ids i-1234567890abcdef0 \
    --force \
    --skip-os-shutdown
```

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

**强制停止实例**  
使用 [Stop-EC2Instance](https://docs.amazonaws.cn/powershell/latest/reference/items/Stop-EC2Instance.html) cmdlet 并将 `-Enforce` 设置为 `true`。

```
Stop-EC2Instance `
    -InstanceId i-1234567890abcdef0 `
    -Enforce $true
```

要绕过强制停止期间操作系统的正常关闭，请包括 `-SkipOsShutdown $true`。

```
Stop-EC2Instance `
    -InstanceId i-1234567890abcdef0 `
    -Enforce $true `
    -SkipOsShutdown $true
```

------

## （可选）创建替代实例


在等待 [Amazon Web Services re:Post](https://repost.aws/) 或[支持中心](https://console.amazonaws.cn/support/home#/)的帮助时，您可以根据需要创建替代实例。创建卡住实例的 AMI，再使用新的 AMI 启动新实例。

**重要**  
如果卡住的实例仅生成[系统状态检查](monitoring-instances-status-check.md)，则可以创建替换实例，因为实例状态检查将导致 AMI 复制损坏操作系统的精确副本。确认状态消息后，创建 AMI 并使用新的 AMI 启动新实例。

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

**创建替代实例**

1. 通过以下网址打开 Amazon EC2 控制台：[https://console.aws.amazon.com/ec2/](https://console.amazonaws.cn/ec2/)。

1. 在导航窗格中，选择 **Instances**，然后选择卡住实例。

1. 依次选择**操作**、**映像和模板**和**创建映像**。

1. 在 **Create image (创建映像)** 页面上，执行以下操作：

   1. 输入 AMI 的名称和说明。

   1. 清除**重启实例**。

   1. 选择**创建映像**。

   有关更多信息，请参阅 [从实例创建 AMI](creating-an-ami-ebs.md#how-to-create-ebs-ami)。

1. 从 AMI 启动新实例，验证新实例是否正常运行。

1. 选择卡住的实例，然后依次选择**操作**、**实例状态**、**终止（删除）实例**。如果该实例也因卡住而终止，则 Amazon EC2 会自动强制其在几个小时内终止。

如果无法按上一步骤所述从该实例创建 AMI，则可以设置替代实例，如下所示：

**(替代) 使用控制台创建替代实例**

1. 选择实例并选择 **Description**、**Block devices**。选择每个卷并记下其卷 ID。请务必注意哪个卷是根卷。

1. 在导航窗格中，选择 **Volumes**。选择该实例的各个卷，然后依次选择 **Actions**、**Create Snapshot**。

1. 在导航窗格中，选择**快照**。选择您刚刚创建的快照，然后依次选择 **Actions**、**Create Volume**。

1. 使用与粘滞的实例相同的操作系统启动实例。注意其根卷的卷 ID 和设备名称。

1. 在导航窗格中，选择**Instances**（实例），选择刚才启动的实例，然后依次选择 **Instance state**（实例状态）、**Stop Instance**（停止实例）。

1. 在导航窗格中，选择 **Volumes**，选择已停止实例的根卷，然后依次选择 **Actions**、**Detach Volume**。

1. 选择您从卡住的实例创建的根卷，依次选择 **Actions**、**Attach Volume**，然后将其附加到新实例以作为其根卷（使用记下的设备名称）。将任何其他非根卷附加到该实例。

1. 在导航窗格中，选择 **Instances**，然后选择替代实例。依次选择**实例状态**、**启动实例**。验证该实例是否正常运行。

1. 选择卡住的实例，然后依次选择**实例状态**、**终止（删除）实例**。如果该实例也因卡住而终止，则 Amazon EC2 会自动强制其在几个小时内终止。

------
#### [ Amazon CLI ]

**创建替代实例**

1. 使用 [create-image](https://docs.amazonaws.cn/cli/latest/reference/ec2/create-image.html) 命令和 `--no-reboot` 选项，根据卡滞的实例创建一个 AMI。

   ```
   aws ec2 create-image \
       --instance-id i-1234567890abcdef0 \
       --name "my-replacement-ami" \
       --description ""AMI for replacement instance" \
       --no-reboot
   ```

1. 使用 [run-instances](https://docs.amazonaws.cn/cli/latest/reference/ec2/run-instances.html) 命令，从您刚刚创建的 AMI 启动一个新实例。

1. 验证新实例是否正常运行。

1. （可选）使用 [terminate-instances](https://docs.amazonaws.cn/cli/latest/reference/ec2/terminate-instances.html) 命令，终止卡滞的实例。

   ```
   aws ec2 terminate-instances --instance-ids i-1234567890abcdef0
   ```

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

**创建替代实例**

1. 使用 [New-EC2Image](https://docs.amazonaws.cn/powershell/latest/reference/items/New-EC2Image.html) cmdlet 并将 `-NoReboot` 设置为 `true`，从卡滞的实例创建一个 AMI。

   ```
   New-EC2Image `
       -InstanceId i-1234567890abcdef0 `
       -Name "my-replacement-ami" `
       -Description "AMI for replacement instance" `
       -NoReboot $true
   ```

1. 使用 [New-EC2Instance](https://docs.amazonaws.cn/powershell/latest/reference/items/New-EC2Instance.html) cmdlet，从您刚刚创建的 AMI 启动一个新实例。

1. 验证新实例是否正常运行。

1. （可选）使用 [Remove-EC2Instance](https://docs.amazonaws.cn/powershell/latest/reference/items/Remove-EC2Instance.html) cmdlet，终止卡滞的实例。

   ```
   Remove-EC2Instance -InstanceId i-1234567890abcdef0
   ```

------

# 排查 Amazon EC2 实例的终止问题
实例终止问题

关闭或删除实例被称为实例终止。以下信息可以帮助您排查终止实例时遇到的问题。

当实例未处于 `running` 状态时，不会向您收取任何实例使用费用。换言之，当您终止实例时，一旦实例的状态变为 `shutting-down`，就不再产生与该实例相关的费用。

## 实例立即终止


有多个问题可能会导致您的实例在启动后立即终止。请参阅[实例立即终止](troubleshooting-launch.md#troubleshooting-launch-internal)了解更多信息。

## 延迟的实例终止


如果您的实例处于`shutting-down`状态超过几分钟，这可能是因为以下原因：
+ 该实例正在运行关闭脚本。
+ 底层主机有问题。

实例处于`shutting-down`状态已有几小时之后，Amazon EC2 会视之为卡住，并会强制终止该实例。

要自行解决卡住的实例，请执行以下操作：

1. **强制终止实例**

   使用 Amazon EC2 控制台或 Amazon CLI 强制终止实例。有关步骤，请参阅[强制终止实例](#force-terminate-ec2-instance)。

   实例将首先尝试正常关闭，其中包括刷新文件系统缓存和元数据（虽然您可以选择绕过正常关闭）。如果在超时期限内无法完成正常关闭，则实例将强制关闭，而不会刷新文件系统缓存和元数据。

1. **如果强制终止失败**

   如果在几个小时后，实例仍未终止，并且看上去终止被卡住，请执行以下操作：

   1. 请在 [Amazon Web Services re:Post](https://repost.aws/) 上发布求助请求。为了帮助加快解决问题，请提供实例 ID 并描述已采取的步骤。

   1. 此外，如果您有支持计划，则可在[支持中心](https://console.amazonaws.cn/support/home#/)创建技术支持案例。

### 强制终止实例


如果您的实例似乎卡在终止状态，您可以强制终止实例。如果几个小时后实例仍未终止，请向 [Amazon re:Post](https://repost.aws/) 发送求助请求。为了帮助加快解决问题，请提供实例 ID 并描述已采取的步骤。此外，如果您有支持计划，则可在[支持中心](https://console.amazonaws.cn/support/home#/)创建技术支持案例。

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

**要强制终止实例**

1. 通过以下网址打开 Amazon EC2 控制台：[https://console.aws.amazon.com/ec2/](https://console.amazonaws.cn/ec2/)。

1. 在导航窗格中，选择 **Instances**，然后选择卡住实例。

1. 依次选择**实例状态**和**强制终止实例**。

   请注意，只有当您的实例处于 `stopping` 状态时，**强制终止实例**才可用。如果您的实例处于其他状态（`shutting-down` 和 `terminated` 除外），您可以使用 Amazon CLI 强制终止实例。

1. （可选）要绕过强制终止期间操作系统的正常关闭，请选中**跳过操作系统关闭**复选框。

1. 选择**强制终止**。

------
#### [ Amazon CLI ]

**要强制终止实例**  
使用 [terminate-instances](https://docs.amazonaws.cn/cli/latest/reference/ec2/terminate-instances.html) 命令和 `--force` 选项。

```
aws ec2 terminate-instances \
    --instance-ids i-1234567890abcdef0 \
    --force
```

要绕过强制终止期间操作系统的正常关闭，请包含 `--skip-os-shutdown` 选项。

```
aws ec2 terminate-instances \
    --instance-ids i-1234567890abcdef0 \
    --force \
    --skip-os-shutdown
```

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

**要强制终止实例**  
使用 [Remove-EC2Instance](https://docs.amazonaws.cn/powershell/latest/reference/items/Remove-EC2Instance.html) cmdlet 并将 `-Enforce` 设置为 `true`。

```
Remove-EC2Instance `
    -InstanceId i-1234567890abcdef0 `
    -Enforce $true
```

要绕过强制终止期间操作系统的正常关闭，请包含 `-SkipOsShutdown $true`。

```
Remove-EC2Instance `
    -InstanceId i-1234567890abcdef0 `
    -Enforce $true `
    -SkipOsShutdown $true
```

------

## 已终止实例仍然显示


在您终止某个实例之后，它会在删除之前的短时间内保持可见。状态显示为 `terminated`。如果该条目在几小时之后未删除，请联系 Support。

## 错误：此实例可能无法终止。修改其“disableApiTermination”实例属性


如果您尝试终止实例并收到 `The instance i-1234567890abcdef0 may not be terminated. Modify its 'disableApiTermination' instance attribute` 错误消息，则表明此实例已启用终止保护。终止保护可防止实例意外终止。

终止实例前，必须先禁用终止保护。

有关更多信息，请参阅 [更改实例终止保护](Using_ChangingDisableAPITermination.md)。

## 自动启动或终止的实例


通常，以下行为意味着您已使用 Amazon EC2 Auto Scaling、EC2 队列或 Spot 队列，根据已定义的条件自动扩展计算资源：
+ 您终止实例，新实例将自动启动。
+ 您启动一个实例，并且其中一个实例将自动终止。
+ 您停止实例且此实例终止，新实例会自动启动。

要停止自动扩缩，请找到正在启动实例的自动扩缩组或实例集，然后将其容量设置为 0 或将其删除。

# 排查 Amazon EC2 实例无法访问的问题
无法访问的实例

以下信息可帮助您排查无法访问的 Amazon EC2 实例的问题。您可以捕获屏幕截图或获取控制台输出，以便帮助诊断问题并确定您是否应重启实例。对于无法访问的 Windows 实例，请根据服务返回的屏幕截图进行问题排查。

**Topics**
+ [

## 实例重启
](#instance-console-rebooting)
+ [

## 实例控制台输出
](#instance-console-console-output)
+ [

## 捕获无法访问的实例的屏幕截图
](#instance-console-screenshot)
+ [Windows 实例的常见屏幕截图](ics-common.md)
+ [

## 主机发生故障时的实例恢复
](#instance-machine-failure)
+ [

## 实例出现脱机后又意外重启
](#troubleshoot-unavailable-instance-unexpected-reboot)

## 实例重启


能够重启无法访问的实例对于故障排除和一般实例管理都非常有用。

就像可以通过按下重置按钮来重置计算机一样，您可以使用 Amazon EC2 控制台、CLI 或 API 来重置 EC2 实例。有关更多信息，请参阅 [重启 Amazon EC2 实例](ec2-instance-reboot.md)。

## 实例控制台输出


控制台输出对于问题诊断是非常有价值的工具。它尤其适合用于排查内核问题和服务配置问题，它们可能会导致实例在 SSH 后台程序启动前终止或变得不可达到。
+ **Linux 实例**：实例控制台输出显示了确切的控制台输出，在正常情况下，这些输出会在连接到计算机的物理显示器上显示。控制台输出返回缓冲的信息，该信息在实例转变状态 (启动、停止、重新引导和终止) 之后很快发布。发布的输出不会持续更新；仅当它可能是最大值时。
+ **Windows 实例**：实例控制台输出包括最后三个系统事件日志错误。

只有实例的所有人可以访问控制台输出。

您可以在实例生命周期中检索最新的串行控制台输出。仅[基于 Nitro 的实例](instance-types.md#instance-hypervisor-type)支持此选项。

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

**获取控制台输出**

1. 通过以下网址打开 Amazon EC2 控制台：[https://console.aws.amazon.com/ec2/](https://console.amazonaws.cn/ec2/)。

1. 在左侧导航窗格中，选择 **Instances (实例)**。

1. 选择实例。

1. 依次选择 **Actions (操作)**、**Monitor and troubleshoot (监控和问题排查)**、**Get system log (获取系统日志)**。

------
#### [ Amazon CLI ]

**获取控制台输出**  
使用 [get-console-output](https://docs.amazonaws.cn/cli/latest/reference/ec2/get-console-output.html) 命令。

```
aws ec2 get-console-output --instance-id i-1234567890abcdef0
```

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

**获取控制台输出**  
使用 [Get-EC2ConsoleOutput](https://docs.amazonaws.cn/powershell/latest/reference/items/Get-EC2ConsoleOutput.html) cmdlet。

```
Get-EC2ConsoleOutput -InstanceId i-1234567890abcdef0
```

------

## 捕获无法访问的实例的屏幕截图


如果无法连接到实例，则您可以捕获实例的屏幕截图并将其作为图像查看。该图像可以让您查看实例的状态，更快地处理问题。

您可在实例运行时或在其崩溃后生成屏幕截图。生成的图像为 JPG 格式，大小不超过 100 kb。屏幕截图不会产生数据传输费用。

**限制**

以下客户端不支持此功能：
+ 裸机实例（类型 `*.metal` 的实例）
+ 实例正在使用 NVIDIA GRID 驱动程序
+ [由基于 Arm 的 Graviton 处理器支持的实例](https://www.amazonaws.cn/ec2/graviton/#EC2_Instances_Powered_by_AWS_Graviton_Processors)
+ Amazon Outposts 上的 Windows 实例
+ Amazon 本地区域上的 Windows 实例

**区域支持**

此功能在下列区域尚未开放：
+ 亚太地区（泰国）
+ 墨西哥（中部）
+ GovCloud 区域

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

**获取实例的屏幕截图**

1. 通过以下网址打开 Amazon EC2 控制台：[https://console.aws.amazon.com/ec2/](https://console.amazonaws.cn/ec2/)。

1. 在左侧导航窗格中，选择 **Instances (实例)**。

1. 选择要捕获的实例。

1. 依次选择 **Actions (操作)**、**Monitor and troubleshoot (监控和问题排查)**、**Get instance log (获取实例屏幕截图)**。

1. 选择 **Download (下载)**，或右键单击图像，以下载并保存该图像。

------
#### [ Amazon CLI ]

**捕获实例的屏幕截图**  
使用 [get-console-screenshot](https://docs.amazonaws.cn/cli/latest/reference/ec2/get-console-screenshot.html) 命令。输出为 base64 编码。

```
aws ec2 get-console-screenshot --instance-id i-1234567890abcdef0
```

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

**捕获实例的屏幕截图**  
使用 [Get-EC2ConsoleScreenshot](https://docs.amazonaws.cn/powershell/latest/reference/items/Get-EC2ConsoleScreenshot.html) cmdlet。输出为 base64 编码。

```
Get-EC2ConsoleScreenshot -InstanceId i-1234567890abcdef0
```

------

# 用于排查无法访问的 Windows 实例问题的常见屏幕截图
Windows 实例的常见屏幕截图

可以根据服务返回的屏幕截图，利用以下信息帮助对无法访问的 Windows 实例进行故障排除。
+ [登录屏幕 (Ctrl\$1Alt\$1Delete)](#logon-screen) 
+ [恢复控制台屏幕](#recovery-console-screen) 
+ [Windows 引导管理器屏幕](#boot-manager-screen) 
+ [Sysprep 屏幕](#sysprep-screen) 
+ [Getting Ready 屏幕](#getting-ready-screen) 
+ [Windows Update 屏幕](#windows-update-screen) 
+ [Chkdsk](#Chkdsk) 

## 登录屏幕 (Ctrl\$1Alt\$1Delete)


控制台屏幕截图服务返回以下截图。

![\[登录屏幕。\]](http://docs.amazonaws.cn/AWSEC2/latest/UserGuide/images/ts-cs-1.png)


如果实例在登录时无法访问，可能是因为网络配置或 Windows 远程桌面服务存在问题。如果某个进程占用了大量 CPU，实例也可能没有响应。

### 网络配置


使用以下信息验证您的 Amazon、Microsoft Windows 和本地（或内部部署）网络配置是否阻止了对实例的访问。


**Amazon 网络配置**  

| 配置 | 验证 | 
| --- | --- | 
| 安全组配置 | 验证端口 3389 是否向您的安全组开放。验证您是否连接到正确的公有 IP 地址。如果实例未与弹性 IP 关联，公有 IP 就会在实例停止或启动后发生更改。有关更多信息，请参阅[远程桌面无法连接到远程计算机](troubleshoot-connect-windows-instance.md#rdp-issues)。 | 
| VPC 配置 (网络 ACL) | 验证您的 Amazon VPC 的访问控制列表 (ACL) 是否阻止访问。有关信息，请参阅 Amazon VPC 用户指南 中的[网络 ACL](https://docs.amazonaws.cn/vpc/latest/userguide/vpc-network-acls.html)。 | 
| VPN 配置 | 如果您使用虚拟专用网络（VPN）连接您的 VPC，请验证 VPN 隧道的连通性。有关更多信息，请参阅 [Troubleshooting Amazon Client VPN: Tunnel connectivity issues to a VPC](https://docs.amazonaws.cn/vpn/latest/clientvpn-admin/VPNTunnelConnectivityTroubleshooting.html)。 | 


**Windows 网络配置**  

| 配置 | 验证 | 
| --- | --- | 
| Windows 防火墙 | 验证 Windows 防火墙是否阻止与您的实例建立连接。按照远程桌面故障排除部分第 7 项的说明禁用 Windows 防火墙：[远程桌面无法连接到远程计算机](troubleshoot-connect-windows-instance.md#rdp-issues)。 | 
| 高级 TCP/IP 配置 (使用静态 IP) | 实例可能因您配置了静态 IP 地址而没有响应。对于 VPC，请[创建网络接口](create-network-interface.md)并[将其连接到实例](network-interface-attachments.md#attach_eni)。 | 

**本地或内部部署网络配置**

验证本地网络配置是否阻止访问。尝试连接无法访问的实例所在 VPC 中的其他实例。如果您无法访问其他实例，请联系本地网络管理员确定是否有本地策略限制了访问。

### 远程桌面服务问题


如果实例在登录时无法访问，可能是因为实例存在远程桌面服务 (RDS) 问题。

**提示**  
您可以使用 `AWSSupport-TroubleshootRDP` 运行手册检查和修改可能影响远程桌面协议 (RDP) 连接的各种设置。有关更多信息，请参阅**《Amazon Systems Manager Automation Runbook Reference》中的 [https://docs.amazonaws.cn/systems-manager-automation-runbooks/latest/userguide/automation-awssupport-troubleshootrdp.html](https://docs.amazonaws.cn/systems-manager-automation-runbooks/latest/userguide/automation-awssupport-troubleshootrdp.html)。


**远程桌面服务配置**  

| 配置 | 验证 | 
| --- | --- | 
| RDS 正在运行 | 验证实例上的 RDS 是否在运行。使用 Microsoft 管理控制台 (MMC) 的服务管理单元 (services.msc) 连接实例。在服务列表中，验证Remote Desktop Services (远程桌面服务) 是否处于正在运行状态。如果不是，请将其开启，然后将启动类型设置为 Automatic。如果使用服务管理单元无法连接到实例，请将根卷从该实例分离并为其创建快照或 AMI，将原始卷作为辅助卷附加到同一个可用区中的其他实例，并修改 [Start](https://learn.microsoft.com/en-us/previous-versions/windows/it-pro/windows-2000-server/cc959920(v=technet.10)) 注册表项。完成后，请重新将根卷附加到原始实例。 | 
| RDS 已启用 |  即使该服务已启动，它也有可能被禁用。将根卷从实例分离并为其创建快照或 AMI，将原始卷作为辅助卷挂载到同一个可用区中的其他实例，然后按照 [在具有远程注册表的 EC2 实例上启用远程桌面](troubleshoot-connect-windows-instance.md#troubleshooting-windows-rdp-remote-registry)中的说明，通过修改 **Terminal Server (终端服务器)** 注册表项来启用该服务。 完成后，请重新将根卷附加到原始实例。  | 

### 较高的 CPU 使用率


使用 Amazon CloudWatch 检查您实例上的 **CPUUtilization (Maximum)** 指标。如果 **CPUUtilization (Maximum)** 的值比较大，请等待 CPU 使用率下降后尝试重新连接。CPU 使用率高可能由以下原因导致：
+ Windows 更新
+ 安全软件扫描
+ 自定义启动脚本
+ 任务计划程序

有关更多信息，请参阅 *Amazon CloudWatch 用户指南* 中的[获取特定资源的统计信息](https://docs.amazonaws.cn/AmazonCloudWatch/latest/monitoring/US_SingleMetricPerInstance.html)。有关其他故障排除提示，请参阅 [Windows 启动后，CPU 使用率短时增高（仅限 Windows 实例）](troubleshooting-launch.md#high-cpu-issue)。

## 恢复控制台屏幕


控制台屏幕截图服务返回以下截图。

![\[恢复控制台屏幕截图。\]](http://docs.amazonaws.cn/AWSEC2/latest/UserGuide/images/ts-cs-2.png)


如果 `bootstatuspolicy` 未设置为 `ignoreallfailures`，操作系统可能启动至“Recovery”（恢复）控制台，并停滞在这一状态。请按照以下步骤将 `bootstatuspolicy` 配置更改为 `ignoreallfailures`。

默认情况下，Amazon 提供的公有 Windows AMI 的策略配置设置为 `ignoreallfailures`。

1. 停止无法访问的实例。

1. 创建根卷的快照。根卷是作为 `/dev/sda1` 附加到实例的。

   将根卷从无法访问的实例分离并为其创建快照或 AMI，然后将根卷作为辅助卷附加到同一个可用区中的其他实例。
**警告**  
如果您的临时实例和原始实例是使用相同的 AMI 启动的，则您必须完成额外步骤，否则在您恢复原始实例的根卷之后，由于磁盘签名冲突，您将无法启动该原始实例。如果您必须使用相同的 AMI 创建临时实例，为了避免磁盘签名冲突，请完成 [磁盘签名冲突](win-ts-common-issues.md#disk-signature-collision) 中的步骤。  
或者，可以为临时实例选择不同的 AMI。例如，如果原始实例使用适用于 Windows Server 2016 的 AMI，则使用适用于 Windows Server 2019 的 AMI 来启动临时实例。

1. 登录实例并从命令提示符运行以下命令，以将 `bootstatuspolicy` 配置更改为 `ignoreallfailures`。

   ```
   bcdedit /store Drive Letter:\boot\bcd /set {default} bootstatuspolicy ignoreallfailures
   ```

1. 重新将卷附加到无法访问的实例并重新启动实例。

## Windows 引导管理器屏幕


控制台屏幕截图服务返回以下截图。

![\[Windows 引导管理器屏幕。\]](http://docs.amazonaws.cn/AWSEC2/latest/UserGuide/images/ts-cs-3.png)


操作系统的系统文件和/或注册表遭到严重损坏。当实例停滞在这一状态时，您应该从最近备份的 AMI 恢复实例或启动一个替代实例。如果您需要访问实例上的数据，请将所有根卷从无法访问的实例上分离并为这些卷创建快照或 AMI，然后将其作为辅助卷附加到同一个可用区中的其他实例。

## Sysprep 屏幕


控制台屏幕截图服务返回以下截图。

![\[Sysprep 屏幕。\]](http://docs.amazonaws.cn/AWSEC2/latest/UserGuide/images/ts-cs-4.png)


如果您没有使用 EC2Config 服务调用 Sysprep，或者操作系统在运行 Sysprep 时出现故障，您可能会看到此屏幕。您可以使用 [EC2Rescue](Windows-Server-EC2Rescue.md) 重置密码。否则，请参阅[使用 Windows Sysprep 创建 Amazon EC2 AMI](ami-create-win-sysprep.md)。

## Getting Ready 屏幕


控制台屏幕截图服务返回以下截图。

![\[Getting Ready 屏幕。\]](http://docs.amazonaws.cn/AWSEC2/latest/UserGuide/images/ts-cs-5.png)


反复刷新实例控制台屏幕截图服务，验证环形进度条是否转动。如果环形进度条转动，请等待操作系统启动。您也可以使用 Amazon CloudWatch 查看您实例上的 **CPUUtilization (Maximum)** 指标，以确认操作系统是否处于活动状态。如果环形进度条不转，则实例可能停滞在启动过程。重启实例。如果重新启动无法解决问题，请从最近备份的 AMI 中恢复实例或启动一个替代实例。如果需要访问实例上的数据，请将根卷从无法访问的实例中分离，并为其创建快照或 AMI。然后，将根卷作为辅助卷附加到同一个可用区中的其他实例。

## Windows Update 屏幕


控制台屏幕截图服务返回以下截图。

![\[Windows Update 屏幕。\]](http://docs.amazonaws.cn/AWSEC2/latest/UserGuide/images/ts-cs-6.png)


Windows 更新进程正在更新注册表。请等待更新完成。请勿在更新期间重新启动或停止实例，因为这可能会导致数据损坏。

**注意**  
在更新时，Windows 更新进程会占用服务器上的资源。若您频繁遇到这一问题，可以考虑使用速度更快的实例类型和 EBS 卷。

## Chkdsk


控制台屏幕截图服务返回以下截图。

![\[Chkdsk 屏幕。\]](http://docs.amazonaws.cn/AWSEC2/latest/UserGuide/images/ts-cs-7.png)


Windows 正在驱动器上运行 chkdsk 系统工具，以验证文件系统的完整性并修复逻辑文件系统错误。请等待该进程完成。

## 主机发生故障时的实例恢复


如果底层主机上的硬件出现不可恢复性问题，Amazon 可能会预定实例停止事件。我们会通过电子邮件提前通知您这类事件。

**恢复发生故障的主机上运行的 Amazon EBS 支持的实例**

1. 将您实例存储卷上的所有关键数据 Amazon EBS 或 Amazon S3。

1. 停止实例。

1. 启动实例。

1. 恢复所有重要数据。

有关更多信息，请参阅 [启动和停止 Amazon EC2 实例](Stop_Start.md)。

**恢复具有发生故障的主机上运行的实例存储根卷的实例**

1. 从该实例创建 AMI。

1. 将映像上传到 Amazon S3。

1. 将重要数据备份到 Amazon EBS 或 Amazon S3。

1. 终止实例。

1. 从 AMI 启动新实例。

1. 将所有重要数据恢复到新实例。

## 实例出现脱机后又意外重启


如果实例出现脱机后又意外重启，则可能是已经进行了实例自动恢复。当 Amazon 检测到实例因底层硬件或软件问题而无法使用，且在该实例上启用了简化的自动恢复或基于 CloudWatch 操作的恢复时，就会出现这种情况。

在恢复过程中，Amazon 尝试将实例迁移到其他硬件来恢复实例的可用性。要确认实例是否进行了实例自动恢复，请参阅[验证是否已进行实例自动恢复](verify-if-automatic-recovery-occurred.md)。

**注意**  
如果工作负载或应用程序没有响应，请检查工作负载或应用程序是否是在实例上运行。如果不是，则手动启动工作负载或应用程序。为防将来出现此问题，请实施恢复计划，确保工作负载或应用程序在实例恢复后能正常运行。

# 排查 Amazon EC2 Linux 实例的连接问题
Linux 实例 SSH 问题

以下信息和常见错误可以帮助您排查连接到实例时出现的问题。

**Topics**
+ [

## 连接问题的常见原因
](#TroubleshootingInstancesCommonCauses)
+ [

## 连接到您的实例时出错：连接超时
](#TroubleshootingInstancesConnectionTimeout)
+ [

## Error: unable to load key ...(错误：无法加载密钥...) Expecting: ANY PRIVATE KEY(需要：任何私有密钥)
](#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)

## 连接问题的常见原因


建议您通过验证是否正确执行了以下任务，开始排查实例连接问题。

**验证实例的用户名**  
您可以使用用户账户的用户名或用于启动实例的 AMI 的默认用户名连接到实例。  
+ **获取用户账户的用户名。**

  有关如何创建用户账户的更多信息，请参阅[管理 Amazon EC2 Linux 实例上的系统用户](managing-users.md)。
+ **获取用于启动实例的 AMI 的默认用户名。**    
[\[See the AWS documentation website for more details\]](http://docs.amazonaws.cn/AWSEC2/latest/UserGuide/TroubleshootingInstancesConnecting.html)

**验证安全组规则是否允许流量**  
确保与您的实例关联的安全组允许来自您的 IP 地址的入站 SSH 流量。默认情况下，VPC 的默认安全组不允许传入 SSH 流量。默认情况下，由启动实例向导创建的安全组允许传入的 SSH 流量。有关向 Linux 实例添加入站 SSH 流量规则的步骤，请参阅 [用于从您的计算机连接到实例的规则](security-group-rules-reference.md#sg-rules-local-access)。有关验证步骤，请参阅 [连接到您的实例时出错：连接超时](#TroubleshootingInstancesConnectionTimeout)。

**验证实例是否准备就绪**  
启动实例后，可能需要花几分钟时间，实例才能准备好接受连接请求。检查实例以确保它正在运行并通过了状态检查。  

1. 通过以下网址打开 Amazon EC2 控制台：[https://console.aws.amazon.com/ec2/](https://console.amazonaws.cn/ec2/)。

1. 在导航窗格中，选择 **Instances (实例)**，然后选择您的实例。

1. 请验证以下内容：

   1. 在**Instance state (实例状态) **列中，验证您的实例是否处于 `running` 状态。

   1. 在 **Status check (状态检查)** 列中，验证您的实例是否已通过所有状态检查。

**确认您已满足连接的所有先决条件**  
确保您拥有连接所需的所有信息。有关更多信息，请参阅 [使用 SSH 连接到 Linux 实例](connect-to-linux-instance.md)。  
**从 Linux 或 macOS 进行连接**  
如果本地计算机操作系统是 Linux 或 macOS X，请检查以下连接到 Linux 实例的特定先决条件：
+ [SSH 客户端](connect-linux-inst-ssh.md)
+ [EC2 Instance Connect](connect-linux-inst-eic.md)
+ [Amazon Systems Manager 会话管理器](https://docs.amazonaws.cn/systems-manager/latest/userguide/session-manager.html)
**从 Windows 进行连接**  
如果本地计算机操作系统是 Windows，请检查以下连接到 Linux 实例的特定先决条件：
+ [OpenSSH](connect-linux-inst-ssh.md)
+ [PuTTY](connect-linux-inst-from-windows.md)
+ [Amazon Systems Manager 会话管理器](https://docs.amazonaws.cn/systems-manager/latest/userguide/session-manager.html)
+ [适用于 Linux 的 Windows 子系统](connect-linux-inst-ssh.md)

**检查实例是否为托管实例**  
不允许用户向托管实例发起连接。要确定实例是否为托管实例，找到该实例的**托管**字段。如果此值为 **true**，则该实例为托管实例。有关更多信息，请参阅 [Amazon EC2 托管式实例](amazon-ec2-managed-instances.md)。

## 连接到您的实例时出错：连接超时


如果连接到实例时显示错误消息 `Network error: Connection timed out` 或 `Error connecting to [instance], reason: -> Connection timed out: connect`，请尝试以下选项：

**检查您的安全组规则。**  
您需要一条安全组规则，它允许在适当端口上传输来自您的本地计算机公有 IPv4 地址的入站流量。

1. 通过以下网址打开 Amazon EC2 控制台：[https://console.aws.amazon.com/ec2/](https://console.amazonaws.cn/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.amazonaws.cn/vpc/latest/userguide/security-group-rules.html)。

**查看子网的路由表。**  
您需要使用某个路由，以将发往 VPC 外部的所有流量发送到 VPC 的 Internet 网关。

1. 通过以下网址打开 Amazon EC2 控制台：[https://console.aws.amazon.com/ec2/](https://console.amazonaws.cn/ec2/)。

1. 在导航窗格中，选择 **Instances (实例)**，然后选择您的实例。

1. 在 **Networking (联网)** 选项卡上，记下 **VPC ID** 和 **Subnet ID (子网 ID)** 的值。

1. 通过 [https://console.aws.amazon.com/vpc/](https://console.amazonaws.cn/vpc/) 打开 Amazon VPC 控制台。

1. 在导航窗格中，选择 **Internet Gateways（互联网网关）**。验证是否有 Internet 网关附加到您的 VPC。否则，请选择 **Create internet gateway (创建 Internet 网关)**，为 Internet 网关输入名称，然后选择 **Create internet gateway (创建 Internet 网关)**。然后，对于您创建的 Internet 网关，依次选择 **Actions (操作)**、**Attach to VPC (附加到 VPC)**，选择您的 VPC，然后选择 **Attach internet gateway (附加 Internet 网关)** 将其附加到您的 VPC。

1. 在导航窗格中，选择 **Subnets**，然后选择您的子网。

1. 在 **Route Table (路由表)** 选项卡上，验证 `0.0.0.0/0` 的路由是否为目的地以及您的 VPC 的 Internet 网关是否为目标。如果您使用实例的 IPv6 地址连接到实例，请检查是否有一个路由可以将所有 IPv6 流量 (`::/0`) 指向 Internet 网关。否则请执行以下操作：

   1. 选择路由表的 ID (rtb-*xxxxxxxx*) 以导航到路由表。

   1. 在 **Routes（路由）**选项卡上，选择 **Edit routes（编辑路由）**。选择 **Add route (添加路由)**，将 `0.0.0.0/0` 用作目的地并将 Internet 网关用作目标。对于 IPv6，选择 **Add route (添加路由)**，将 `::/0` 用作目的地并将 Internet 网关用作目标。

   1. 选择 **Save routes（保存路由）**。

**检查子网的网络访问控制列表 (ACL)。**

该网络 ACL 必须允许端口 22 上来自本地 IP 地址的入站 SSH 流量。还须允许到临时端口 (1024-65535) 的出站流量。

1. 通过 [https://console.aws.amazon.com/vpc/](https://console.amazonaws.cn/vpc/) 打开 Amazon VPC 控制台。

1. 在导航窗格中，选择 **Subnets**(子网)。

1. 选择您的子网。

1. 对于 **Inbound rules (入站规则)**，请在 **Network ACL (网络 ACL)** 选项卡上验证这些规则是否允许来自所需端口的计算机的入站流量。如果不允许，请删除或修改阻止该流量的规则。

1. 对于 **Outbound rules (出站规则)**，验证规则是否允许到您的计算机临时端口的出站流量。如果不允许，请删除或修改阻止该流量的规则。

**如果您的计算机在企业网络上**  
请询问网络管理员内部防火墙是否允许端口 22 上来自您计算机的入站和出站流量。

如果计算机有防火墙，请验证其是否允许端口 22 上来自您计算机的入站和出站流量。

**检查您的实例是否具有公有 IPv4 地址。**  
如果没有，您可以将弹性 IP 地址与您的实例关联。有关更多信息，请参阅[弹性 IP 地址](elastic-ip-addresses-eip.md)。

**检查实例上的 CPU 负载；服务器可能已超过负载。**  
Amazon 自动提供数据，例如 Amazon CloudWatch 指标和实例状态，您可以使用这些数据查看实例上 CPU 的负载情况；如有必要，还可以调整负载的处理方式。有关更多信息，请参阅[使用 CloudWatch 监控您的实例](using-cloudwatch.md)。
+ 如果您的负载是可变的，您可以使用 [Auto Scaling](https://www.amazonaws.cn/autoscaling/) 和 [Elastic Load Balancing](https://www.amazonaws.cn/elasticloadbalancing/) 自动增加或减少实例。
+ 如果您的负载呈稳定增长的态势，您可以迁移到更大的实例类型。有关更多信息，请参阅[Amazon EC2 实例类型更改](ec2-instance-resize.md)。

**要使用 IPv6 地址连接实例，请检查以下各项：**
+ 您的子网必须与一个路由表关联，此表中具有一个将 IPv6 流量 (`::/0`) 指向 Internet 网关的路由。
+ 安全组规则必须允许端口 22 上来自本地 IPv6 地址的入站流量。
+ 您的网络 ACL 规则必须允许入站和出站 IPv6 流量。
+ 如果您从旧版 AMI 启动实例，则其可能未针对 DHCPv6 进行配置（IPv6 地址不会在网络接口上自动识别）。有关更多信息，请参阅《Amazon VPC 用户指南》中的 [在实例中配置 IPv6](https://docs.amazonaws.cn/vpc/latest/userguide/vpc-migrate-ipv6.html#vpc-migrate-ipv6-dhcpv6)。
+ 您的本地计算机必须拥有 IPv6 地址，且必须配置为使用 IPv6。

## Error: unable to load key ...(错误：无法加载密钥...) Expecting: ANY PRIVATE KEY(需要：任何私有密钥)


如果您尝试连接到您的实例并收到错误消息 `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. 使用新的密钥对连接到实例。

## 错误：服务器无法识别用户密钥


**如果您使用 SSH 连接到实例**
+ 请在连接时使用 `ssh -vvv` 获得三倍的详细调试信息：

  ```
  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 配置**窗口的**主机名**框中输入用户名。    
[\[See the AWS documentation website for more details\]](http://docs.amazonaws.cn/AWSEC2/latest/UserGuide/TroubleshootingInstancesConnecting.html)
+ 验证您的入站安全组规则允许入站流量进入合适的端口。有关更多信息，请参阅 [用于从您的计算机连接到实例的规则](security-group-rules-reference.md#sg-rules-local-access)。

## 错误：权限被拒绝或 [实例] 端口 22 关闭了连接


如果您使用 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. 通过以下网址打开 Amazon EC2 控制台：[https://console.aws.amazon.com/ec2/](https://console.amazonaws.cn/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. 启动您的实例。如果不再需要临时实例，可以终止它。

## 错误：未保护的私有密钥文件


必须保护您的私钥文件，防止其他任何用户对其进行读写操作。如果除您外其他任何人都能够读取或写入您的私钥，则 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. 选择**安全性**选项卡。

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-----”结尾


如果您使用第三方工具（如 **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
```

## 错误：主机密钥验证失败


如果实例上存储在 `known_hosts` 文件中的主机密钥与客户端上的主机密钥不匹配，则会出现此错误。例如，假设使用一个公有 IP 地址连接到某个实例，然后尝试使用其他公有 IP 地址重新连接到该实例，则可能会出现不匹配的情况。这一问题可能在添加或移除弹性 IP 地址之后出现，因为此操作会更改实例的公有 IP 地址。

要解决此错误，首先要确认实例的主机密钥或网络配置更改符合预期。连接到实例之前，您可能还需要[验证主机指纹](connection-prereqs-general.md#connection-prereqs-fingerprint)。连接到实例后，您可以从 `known_hosts` 文件中移除旧主机密钥。有关说明，请参阅有关实例上所用 Linux 发行版的文档。

## 错误：服务器拒绝我们的密钥*或* 没有支持的身份验证方法


如果您使用 PuTTY 连接到实例并出现以下任一错误：错误：服务器拒绝了我们的密钥或错误：没有支持的身份验证方法，请确认您使用 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 操作


`ping` 命令是一种 ICMP 流量 — 如果您无法对实例执行 ping 操作，请确保您的入站安全组规则允许的 `Echo Request` 消息的 ICMP 流量来自所有资源，或来自从中发出命令的计算机或实例。

如果您无法从实例发出 `ping` 命令，请确保您的出站安全组规则允许的 `Echo Request` 消息的 ICMP 流量发送到所有目标，或发送到您正在尝试对其执行 ping 操作的主机。

`Ping`由于网络延迟或硬件问题， 命令还可能被防火墙阻止或超时。您应咨询本地网络或系统管理员，以帮助进行进一步的故障排除。

## 错误：服务器意外关闭了网络连接


如果您使用 PuTTY 连接到实例并出现“服务器意外关闭了网络连接”错误，请确认您已在 PuTTY Configuration (PuTTY 配置) 的 Connection (连接) 页面上启用 keepalives 以避免断开连接。有些服务器如果在指定的时间内未接收到任何数据，将会断开与客户端的连接。将“Seconds between keepalives”(keepalives 之间的秒数) 设置为 59 秒。

如果在启用 keepalives 后仍出现问题，请尝试在 PuTTY Configuration (PuTTY 配置) 的 Connection (连接) 页面上禁用 Nagle 的算法。

## 错误：EC2 Instance Connect 的主机密钥验证失败


如果您轮换实例主机密钥，则新主机密钥不会自动上传到 Amazon 可信主机密钥数据库。当您尝试使用 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 实例


如果您使用 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
   ```

## 我丢失了私有密钥。如何连接到我的实例？


如果丢失由 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：创建新的密钥对


使用 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：获取有关原始实例及其根卷的信息


请记下以下信息，因为您需要它来完成此过程。

**获取有关原始实例的信息**

1. 通过以下网址打开 Amazon EC2 控制台：[https://console.aws.amazon.com/ec2/](https://console.amazonaws.cn/ec2/)。

1. 在导航窗格中选择 **Instances (实例)**，然后选择要连接到的实例。（我们将此称为*原始*实例。）

1. 在 **Details**（详细信息）选项卡上，记下实例 ID 和 AMI ID。

1. 在 **Networking**（网络）选项卡上，记下可用区。

1. 在 **Storage**（存储）选项卡的 **Root device name**（根设备名称）下，记下根卷的设备名称（例如 `/dev/xvda`）。然后，在 **Block devices**（块存储设备）下，查找此设备的名称并记下卷 ID（例如 vol-0a1234b5678c910de）。

### 步骤 3：停止原始实例


依次选择**实例状态**、**停止实例**。如果此选项处于禁用状态，则表示实例已停止，或者其根卷是实例存储卷。

**警告**  
停止某个实例时，实例存储卷上的数据将会丢失。要保留这些数据，请将其备份到持久性存储中。

### 步骤 4：启动临时实例


**启动临时实例**

1. 在导航窗格中，选择 **Instances**（实例），然后选择 **Launch instances**（启动实例）。

1. 在 **Name and tags**（名称和标签）部分，对于 **Name**（名称），输入 **Temporary**（临时）。

1. 在 **Application and OS Images**（应用程序和操作系统映像）部分中，选择您启动原始实例时所用的 AMI。如果此 AMI 不可用，您可以创建一个可在已停止的实例中使用的 AMI。有关更多信息，请参阅 [创建 Amazon EBS-backed AMI](creating-an-ami-ebs.md)。

1. 在 **Instance type**（实例类型）部分中，保留默认的实例类型。

1. 在 **Key pair**（密钥对）部分中，对于 **Key pair name**（密钥对名称），选择现有密钥对进行使用或创建新密钥对。

1. 在 **Network settings**（网络设置）部分，选择 **Edit**（编辑），然后为 **Subnet**（子网），选择与原始实例位于同一可用区的子网。

1. 在 **Summary**（摘要）面板中，选择 **Launch**（启动）。

### 步骤 5：从原始实例中分离根卷并将其附加到临时实例


1. 在导航窗格中，选择**卷**，并选择原始实例的根卷（您已在上一步骤中记下它的卷 ID）。依次选择 **Actions**（操作）、**Detach Volume**（分离卷），然后选择 **Detach**（分离）。等待卷的状态变为 `available`。（您可能需要选择“刷新”图标。）

1. 如果卷仍保持选中状态，则选择 **Actions**（操作），然后选择 **Attach Volume**（附加卷）。选择临时实例的实例 ID，记下在 **Device name**（设备名称）下指定的设备名称（例如 `/dev/sdf`），然后选择 **Attach volume**（附加卷）。
**注意**  
如果已从 Amazon Web Services Marketplace AMI 启动原始实例，并且卷包含 Amazon Web Services Marketplace 代码，则必须先停止临时实例，然后才能附加卷。

### 步骤 6：将新的公钥添加到已安装到临时实例的原始卷上的 `authorized_keys`


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 已经更改，请使用以下命令进行恢复。

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

### 步骤 7：从临时实例中卸载并分离原始卷，然后将其重新附加到原始实例


1. 在临时实例中，卸载已附加的卷，以将其重新附加到原始实例。例如，使用以下命令卸载 `/mnt/tempvol` 处的卷。

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

1. 从临时实例中分离卷（您在上一步中卸载了该卷）：从 Amazon EC2 控制台，在导航窗格中选择**卷**，为原始实例选择根卷（您在上一步中记下了卷 ID），依次选择**操作**、**分离卷**，然后选择**分离**。等待卷的状态变为 `available`。（您可能需要选择“刷新”图标。）

1. 将卷重新附加到原始实例：在卷仍保持选中状态时，选择 **Actions**（操作），然后选择 **Attach Volume**（附加卷）。选择原始实例的实例 ID，请指定您以前在[步骤 2](#step-2-get-info-about-original-instance) 中记下的原始根卷附加的设备名称（`/dev/sda1` 或 `/dev/xvda`），然后选择**附加卷**。
**重要**  
如果您不指定与原始附加相同的设备名称，则无法启动原始实例。Amazon EC2 要求根卷位于 `sda1` 或者 `/dev/xvda`。

### 步骤 8：使用新密钥对连接到原始实例


选择原始实例，然后依次选择**实例状态**、**启动实例**。在实例进入 `running` 状态后，您可以使用新密钥对的私有密钥文件连接到该实例。

**注意**  
如果您的新密钥对和相应私有密钥文件的名称不同于原始密钥对的名称，请确保在连接到实例时指定新私有密钥文件的名称。

### 步骤 9：清除


(可选) 如果您将不再使用临时实例，可以将其终止。选择临时实例，然后依次选择**实例状态**、**终止（删除）实例**。

# 通过失败状态检查来排查 Amazon EC2 Linux 实例问题
Linux 实例失败状态检查

如果您的 Linux 实例未能通过状态检查，则以下信息可帮助您排查问题。请首先确定您的应用程序是否存在任何问题。如果您验证的结果是实例没有按照预期运行应用程序，请查看状态检查信息和系统日志。

有关导致状态检查出现故障的问题示例，请参阅 [Amazon EC2 实例的状态检查](monitoring-system-instance-status-check.md)。

**Topics**
+ [

## 查看状态检查信息
](#InitialSteps)
+ [

## 检索系统日志
](#troubleshooting-retrieve-system-logs)
+ [

## 排查 Linux 的实例的系统日志错误
](#system-log-errors-linux)
+ [

## 内存不足：终止进程
](#MemoryOOM)
+ [

## 错误：mmu\$1update 失败 (内存管理更新失败)
](#MemoryMMU)
+ [

## I/O 错误（块储存设备故障）
](#DeviceBlock)
+ [

## I/O 错误：既不是本地磁盘也不是远程磁盘（破损的分布式块储存设备）
](#DeviceDistributed)
+ [

## request\$1module：runaway loop modprobe (在较旧的 Linux 版本上循环旧内核 modprobe)
](#KernelLoop)
+ [

## “严重错误：内核太旧”和“fsck：在尝试打开 /dev 时没有此文件或目录”(内核与 AMI 不匹配)
](#KernelOld)
+ [

## “FATAL: Could not load /lib/modules”或者“BusyBox”(内核模块缺失)
](#KernelMissing)
+ [

## ERROR：无效内核 (EC2 不兼容内核)
](#KernelInvalid)
+ [

## fsck：尝试打开时没有找到此文件或目录... (未找到文件系统)
](#FilesystemFschk)
+ [

## 挂载文件系统时出现一般性错误（挂载失败）
](#FilesystemGeneral)
+ [

## VFS：无法在未知块上挂载根 fs (根文件系统不匹配)
](#FilesystemKernel)
+ [

## 错误：无法确定根设备的主/次编号… （根文件系统/设备不匹配）
](#FilesystemError)
+ [

## XENBUS：设备没有驱动程序…
](#FilesystemXenbus)
+ [

## … 没有检查时，已强制执行检查的工作日 (文件系统检查要求)
](#FilesystemCheck)
+ [

## fsck 卡在退出状态... （设备缺失）
](#FilesystemFschkDied)
+ [

## GRUB 提示 (grubdom>)
](#OpSystemGrub)
+ [

## 提起接口 eth0：设备 eth0 的 MAC 地址与预期不同，驳回。(硬编码的 MAC 地址)。
](#OpSystemBringing)
+ [

## 无法加载 SELinux 策略。计算机处于强制执行模式。正在中断。(SELinux 配置错误)
](#OpSystemUnable)
+ [

## XENBUS：连接设备时超时 (Xenbus 超时)
](#OpSystemXenbus)

## 查看状态检查信息


**使用 Amazon EC2 控制台调查受损实例**

1. 通过以下网址打开 Amazon EC2 控制台：[https://console.aws.amazon.com/ec2/](https://console.amazonaws.cn/ec2/)。

1. 在导航窗格中，选择 **Instances (实例)**，然后选择您的实例。

1. 选择**状态和警报**选项卡，查看所有**系统状态检查**、**实例状态检查**和**附加 EBS 状态检查**的各项结果。

如果某种状态检查失败，可以尝试以下一种选项：
+ 创建警报来恢复实例，作为对失败状态检查的响应。有关更多信息，请参阅 [创建停止、终止、重启或恢复实例的警报](UsingAlarmActions.md)。
+ （实例状态检查）如果将实例类型更改为[基于 Nitro 的实例](instance-types.md#instance-hypervisor-type)，则在从没有所需 ENA 和 NVMe 驱动程序的实例迁移时，状态检查将会失败。有关更多信息，请参阅 [更改实例类型的兼容性](resize-limitations.md)。
+ 对于具有 EBS 根卷的实例，请停止并重新启动该实例。有关更多信息，请参阅 [启动和停止 Amazon EC2 实例](Stop_Start.md)。
+ 对于具有实例存储根卷的实例，请终止该实例并启动替换实例。有关更多信息，请参阅 [终止 Amazon EC2 实例](terminating-instances.md)。
+ 等待 Amazon EC2 解决问题。
+ 联系 Amazon Web Services 支持 或将问题发布到 [Amazon re:Post](https://repost.aws/)。
+ 如果实例位于自动扩缩组中：
  + （系统状态检查和实例状态检查）默认情况下，Amazon EC2 Auto Scaling 会自动启动替换实例。有关更多信息，请参阅《Amazon EC2 Auto Scaling 用户指南》**中的[自动扩缩组中实例的运行状况检查](https://docs.amazonaws.cn/autoscaling/ec2/userguide/ec2-auto-scaling-health-checks.html)。
  + （附加 EBS 状态检查）必须配置 Amazon EC2 Auto Scaling 来自动启动替换实例。有关更多信息，请参阅《Amazon EC2 Auto Scaling User Guide》**中的 [Monitor and replace Auto Scaling instances with impaired Amazon EBS volumes](https://docs.amazonaws.cn/autoscaling/ec2/userguide/monitor-and-replace-instances-with-impaired-ebs-volumes.html)。
+ 检索系统日志并查找错误。有关更多信息，请参阅 [检索系统日志](#troubleshooting-retrieve-system-logs)。

## 检索系统日志


如果实例状态检查失败，则您可以重启实例并检索系统日志。日志能够显示错误之处，从而帮助您诊断问题。重启可清除日志中不必要的信息。

**重启实例并检索系统日志**

1. 通过以下网址打开 Amazon EC2 控制台：[https://console.aws.amazon.com/ec2/](https://console.amazonaws.cn/ec2/)。

1. 在导航窗格中，选择 **Instances**，然后选择您的实例。

1. 依次选择 **Instance state (实例状态)**、**Reboot instance (启动实例)**。实例重启可能需要几分钟时间。

1. 验证问题是否依然存在；在一些情况下，重启可以解决此问题。

1. 如果实例位于 `running` 状态中，选择实例，依次选择 **Actions (操作)**、**Monitor and troubleshoot (监控和故障排除)**、**Get system log (获取系统日志)**。

1. 查看屏幕上显示的日志，使用下面的已知系统日志错误语句列表来诊断问题。

1. 如果您的问题没有得到解决，您可以将问题发布到 [Amazon re:Post](https://repost.aws/)。

## 排查 Linux 的实例的系统日志错误


对于无法通过实例状态检查（例如实例可达性检查）的 Linux 实例，请验证您是否按照上述步骤检索系统日志。以下列表中包含一些常见的系统日志错误，还有一些建议您采取以解决此问题的针对性操作。

**内存错误**
+ [内存不足：终止进程](#MemoryOOM)
+ [错误：mmu\$1update 失败 (内存管理更新失败)](#MemoryMMU)

**设备错误**
+ [I/O 错误（块储存设备故障）](#DeviceBlock)
+ [I/O 错误：既不是本地磁盘也不是远程磁盘（破损的分布式块储存设备）](#DeviceDistributed)

**内核错误**
+ [request\$1module：runaway loop modprobe (在较旧的 Linux 版本上循环旧内核 modprobe)](#KernelLoop)
+ [“严重错误：内核太旧”和“fsck：在尝试打开 /dev 时没有此文件或目录”(内核与 AMI 不匹配)](#KernelOld)
+ [“FATAL: Could not load /lib/modules”或者“BusyBox”(内核模块缺失)](#KernelMissing)
+ [ERROR：无效内核 (EC2 不兼容内核)](#KernelInvalid)

**文件系统错误**
+ [fsck：尝试打开时没有找到此文件或目录... (未找到文件系统)](#FilesystemFschk)
+ [挂载文件系统时出现一般性错误（挂载失败）](#FilesystemGeneral)
+ [VFS：无法在未知块上挂载根 fs (根文件系统不匹配)](#FilesystemKernel)
+ [错误：无法确定根设备的主/次编号… （根文件系统/设备不匹配）](#FilesystemError)
+ [XENBUS：设备没有驱动程序…](#FilesystemXenbus)
+ [… 没有检查时，已强制执行检查的工作日 (文件系统检查要求)](#FilesystemCheck)
+ [fsck 卡在退出状态... （设备缺失）](#FilesystemFschkDied)

**操作系统错误**
+ [GRUB 提示 (grubdom>)](#OpSystemGrub)
+ [提起接口 eth0：设备 eth0 的 MAC 地址与预期不同，驳回。(硬编码的 MAC 地址)。](#OpSystemBringing)
+ [无法加载 SELinux 策略。计算机处于强制执行模式。正在中断。(SELinux 配置错误)](#OpSystemUnable)
+ [XENBUS：连接设备时超时 (Xenbus 超时)](#OpSystemXenbus)

## 内存不足：终止进程


指示内存不足错误的系统日志条目与下方显示的内容类似。

```
[115879.769795] Out of memory: kill process 20273 (httpd) score 1285879
or a child 
[115879.769795] Killed process 1917 (php-cgi) vsz:467184kB, anon-
rss:101196kB, file-rss:204kB
```

### 潜在原因


内存耗尽

### 建议采取的措施



| 对于此实例类型  | 请执行该操作 | 
| --- | --- | 
|  由 Amazon EBS 支持  |  请执行下列操作之一： [\[See the AWS documentation website for more details\]](http://docs.amazonaws.cn/AWSEC2/latest/UserGuide/TroubleshootingInstances.html)  | 
|  实例存储支持的  |  请执行下列操作之一：[\[See the AWS documentation website for more details\]](http://docs.amazonaws.cn/AWSEC2/latest/UserGuide/TroubleshootingInstances.html)  | 

## 错误：mmu\$1update 失败 (内存管理更新失败)


表示内存管理更新故障的系统日志条目与以下示例类似：

```
...
Press `ESC' to enter the menu... 0   [H[J  Booting 'Amazon Linux 2011.09 (2.6.35.14-95.38.amzn1.i686)'


root (hd0)

 Filesystem type is ext2fs, using whole disk

kernel /boot/vmlinuz-2.6.35.14-95.38.amzn1.i686 root=LABEL=/ console=hvc0 LANG=

en_US.UTF-8 KEYTABLE=us

initrd /boot/initramfs-2.6.35.14-95.38.amzn1.i686.img

ERROR: mmu_update failed with rc=-22
```

### 潜在原因


Amazon Linux 的问题

### 建议采取的措施


将问题发布到 [Amazon re:Post](https://repost.aws/) 或联系 [Amazon Web Services 支持](https://www.amazonaws.cn/premiumsupport/)。

## I/O 错误（块储存设备故障）


表示输入/输出错误的系统日志条目类似于以下示例：

```
[9943662.053217] end_request: I/O error, dev sde, sector 52428288
[9943664.191262] end_request: I/O error, dev sde, sector 52428168
[9943664.191285] Buffer I/O error on device md0, logical block 209713024
[9943664.191297] Buffer I/O error on device md0, logical block 209713025
[9943664.191304] Buffer I/O error on device md0, logical block 209713026
[9943664.191310] Buffer I/O error on device md0, logical block 209713027
[9943664.191317] Buffer I/O error on device md0, logical block 209713028
[9943664.191324] Buffer I/O error on device md0, logical block 209713029
[9943664.191332] Buffer I/O error on device md0, logical block 209713030
[9943664.191339] Buffer I/O error on device md0, logical block 209713031
[9943664.191581] end_request: I/O error, dev sde, sector 52428280
[9943664.191590] Buffer I/O error on device md0, logical block 209713136
[9943664.191597] Buffer I/O error on device md0, logical block 209713137
[9943664.191767] end_request: I/O error, dev sde, sector 52428288
[9943664.191970] end_request: I/O error, dev sde, sector 52428288
[9943664.192143] end_request: I/O error, dev sde, sector 52428288
[9943664.192949] end_request: I/O error, dev sde, sector 52428288
[9943664.193112] end_request: I/O error, dev sde, sector 52428288
[9943664.193266] end_request: I/O error, dev sde, sector 52428288
...
```

### 潜在原因



| 实例类型  | 潜在原因 | 
| --- | --- | 
|  由 Amazon EBS 支持  |  发生故障的 Amazon EBS 卷   | 
|  实例存储支持的  |  发生故障的物理驱动器   | 

### 建议采取的措施



| 对于此实例类型  | 请执行该操作 | 
| --- | --- | 
|  由 Amazon EBS 支持  |  执行以下步骤： [\[See the AWS documentation website for more details\]](http://docs.amazonaws.cn/AWSEC2/latest/UserGuide/TroubleshootingInstances.html)  | 
|  实例存储支持的  |   终止实例并启动新的实例。  无法恢复数据。从备份恢复。   比较好的做法是使用 Amazon S3 或 Amazon EBS 进行备份。实例存储卷是直接与单个主机和磁盘故障相关的。   | 

## I/O 错误：既不是本地磁盘也不是远程磁盘（破损的分布式块储存设备）


表示设备的输入/输出错误的系统日志条目类似于以下示例：

```
...
block drbd1: Local IO failed in request_timer_fn. Detaching...

Aborting journal on device drbd1-8.

block drbd1: IO ERROR: neither local nor remote disk

Buffer I/O error on device drbd1, logical block 557056

lost page write due to I/O error on drbd1

JBD2: I/O error detected when updating journal superblock for drbd1-8.
```

### 潜在原因



| 实例类型  | 潜在原因 | 
| --- | --- | 
|  由 Amazon EBS 支持  |  发生故障的 Amazon EBS 卷   | 
|  实例存储支持的  |  发生故障的物理驱动器   | 

### 建议采取的措施


终止实例并启动新的实例。

对于由 Amazon EBS 支持的实例，您可以从最近拍摄的快照恢复数据，方法是从该快照创建映像。快照之后添加的任何数据都无法恢复。

## request\$1module：runaway loop modprobe (在较旧的 Linux 版本上循环旧内核 modprobe)


表示此条件的系统日志类似于下方显示的示例。使用不稳定或陈旧的 Linux 内核 (如 2.6.16-xenU) 可能会在启动时导致无法终止的循环环境。

```
Linux version 2.6.16-xenU (builder@xenbat.amazonsa) (gcc version 4.0.1 
20050727 (Red Hat 4.0.1-5)) #1 SMP Mon May 28 03:41:49 SAST 2007

BIOS-provided physical RAM map:

 Xen: 0000000000000000 - 0000000026700000 (usable)

0MB HIGHMEM available.
...

request_module: runaway loop modprobe binfmt-464c

request_module: runaway loop modprobe binfmt-464c

request_module: runaway loop modprobe binfmt-464c

request_module: runaway loop modprobe binfmt-464c

request_module: runaway loop modprobe binfmt-464c
```

### 建议采取的措施



| 对于此实例类型  | 请执行该操作 | 
| --- | --- | 
|  由 Amazon EBS 支持  |  使用以下其中一个选项可使用较新的内核 (基于 GRUB 的内核或静态内核)。 选项 1：终止实例并启动新实例，指定 `-kernel` 和 `-ramdisk` 参数。 选项 2： [\[See the AWS documentation website for more details\]](http://docs.amazonaws.cn/AWSEC2/latest/UserGuide/TroubleshootingInstances.html)  | 
|  实例存储支持的  |  终止实例并启动新实例，指定 `-kernel` 和 `-ramdisk` 参数。  | 

## “严重错误：内核太旧”和“fsck：在尝试打开 /dev 时没有此文件或目录”(内核与 AMI 不匹配)


表示此条件的系统日志类似于下方显示的示例。

```
Linux version 2.6.16.33-xenU (root@dom0-0-50-45-1-a4-ee.z-2.aes0.internal) 
(gcc version 4.1.1 20070105 (Red Hat 4.1.1-52)) #2 SMP Wed Aug 15 17:27:36 SAST 2007
...
FATAL: kernel too old
Kernel panic - not syncing: Attempted to kill init!
```

### 潜在原因


不可兼容的内核和用户空间

### 建议采取的措施



| 对于此实例类型  | 请执行该操作 | 
| --- | --- | 
|  由 Amazon EBS 支持  |  执行以下步骤： [\[See the AWS documentation website for more details\]](http://docs.amazonaws.cn/AWSEC2/latest/UserGuide/TroubleshootingInstances.html)  | 
|  实例存储支持的  |  执行以下步骤： [\[See the AWS documentation website for more details\]](http://docs.amazonaws.cn/AWSEC2/latest/UserGuide/TroubleshootingInstances.html)  | 

## “FATAL: Could not load /lib/modules”或者“BusyBox”(内核模块缺失)


表示此条件的系统日志类似于下方显示的示例。

```
[    0.370415] Freeing unused kernel memory: 1716k freed 
Loading, please wait...
WARNING: Couldn't open directory /lib/modules/2.6.34-4-virtual: No such file or directory
FATAL: Could not open /lib/modules/2.6.34-4-virtual/modules.dep.temp for writing: No such file or directory
FATAL: Could not load /lib/modules/2.6.34-4-virtual/modules.dep: No such file or directory
Couldn't get a file descriptor referring to the console
Begin: Loading essential drivers... ...
FATAL: Could not load /lib/modules/2.6.34-4-virtual/modules.dep: No such file or directory
FATAL: Could not load /lib/modules/2.6.34-4-virtual/modules.dep: No such file or directory
Done.
Begin: Running /scripts/init-premount ...
Done.
Begin: Mounting root file system... ...
Begin: Running /scripts/local-top ...
Done.
Begin: Waiting for root file system... ...
Done.
Gave up waiting for root device.  Common problems:
 - Boot args (cat /proc/cmdline)
   - Check rootdelay= (did the system wait long enough?)
   - Check root= (did the system wait for the right device?)
 - Missing modules (cat /proc/modules; ls /dev)
FATAL: Could not load /lib/modules/2.6.34-4-virtual/modules.dep: No such file or directory
FATAL: Could not load /lib/modules/2.6.34-4-virtual/modules.dep: No such file or directory
ALERT! /dev/sda1 does not exist. Dropping to a shell!


BusyBox v1.13.3 (Ubuntu 1:1.13.3-1ubuntu5) built-in shell (ash)
Enter 'help' for a list of built-in commands.

(initramfs)
```

### 潜在原因


以下一个或多个条件可能会导致此问题：
+ 虚拟磁盘缺失 
+ 缺少正确的虚拟磁盘模块
+ Amazon EBS 根卷没有正确附加为 `/dev/sda1`

### 建议采取的措施



| 对于此实例类型  | 请执行该操作 | 
| --- | --- | 
|  由 Amazon EBS 支持  |  执行以下步骤： [\[See the AWS documentation website for more details\]](http://docs.amazonaws.cn/AWSEC2/latest/UserGuide/TroubleshootingInstances.html)  | 
|  实例存储支持的  |  执行以下步骤： [\[See the AWS documentation website for more details\]](http://docs.amazonaws.cn/AWSEC2/latest/UserGuide/TroubleshootingInstances.html)  | 

## ERROR：无效内核 (EC2 不兼容内核)


表示此条件的系统日志类似于下方显示的示例。

```
...
root (hd0)

 Filesystem type is ext2fs, using whole disk

kernel /vmlinuz root=/dev/sda1 ro

initrd /initrd.img

ERROR Invalid kernel: elf_xen_note_check: ERROR: Will only load images 
built for the generic loader or Linux images
xc_dom_parse_image returned -1

Error 9: Unknown boot failure

  Booting 'Fallback'
  
root (hd0)

 Filesystem type is ext2fs, using whole disk

kernel /vmlinuz.old root=/dev/sda1 ro

Error 15: File not found
```

### 潜在原因


以下一个或两个条件都可能会导致此问题：
+ GRUB 不支持所提供的内核 
+ 后备内核不存在 

### 建议采取的措施



| 对于此实例类型  | 请执行该操作 | 
| --- | --- | 
|  由 Amazon EBS 支持  |  执行以下步骤： [\[See the AWS documentation website for more details\]](http://docs.amazonaws.cn/AWSEC2/latest/UserGuide/TroubleshootingInstances.html)  | 
|  实例存储支持的  |  执行以下步骤： [\[See the AWS documentation website for more details\]](http://docs.amazonaws.cn/AWSEC2/latest/UserGuide/TroubleshootingInstances.html)  | 

## fsck：尝试打开时没有找到此文件或目录... (未找到文件系统)


表示此条件的系统日志类似于下方显示的示例。

```
		Welcome to Fedora 
		Press 'I' to enter interactive startup.
Setting clock : Wed Oct 26 05:52:05 EDT 2011 [  OK  ]

Starting udev: [  OK  ]

Setting hostname localhost:  [  OK  ]

No devices found
Setting up Logical Volume Management: File descriptor 7 left open
  No volume groups found
[  OK  ]

Checking filesystems
Checking all file systems.
[/sbin/fsck.ext3 (1) -- /] fsck.ext3 -a /dev/sda1 
/dev/sda1: clean, 82081/1310720 files, 2141116/2621440 blocks
[/sbin/fsck.ext3 (1) -- /mnt/dbbackups] fsck.ext3 -a /dev/sdh 
fsck.ext3: No such file or directory while trying to open /dev/sdh

/dev/sdh: 
The superblock could not be read or does not describe a correct ext2
filesystem.  If the device is valid and it really contains an ext2
filesystem (and not swap or ufs or something else), then the superblock
is corrupt, and you might try running e2fsck with an alternate superblock:
    e2fsck -b 8193 <device>

[FAILED]


*** An error occurred during the file system check.
*** Dropping you to a shell; the system will reboot
*** when you leave the shell.
Give root password for maintenance
(or type Control-D to continue):
```

### 潜在原因

+ 虚拟磁盘文件系统定义 /etc/fstab 中存在错误
+ /etc/fstab 中存在配置错误的文件系统定义
+ 硬盘丢失/故障

### 建议采取的措施



| 对于此实例类型  | 请执行该操作 | 
| --- | --- | 
|  由 Amazon EBS 支持  |  执行以下步骤： [\[See the AWS documentation website for more details\]](http://docs.amazonaws.cn/AWSEC2/latest/UserGuide/TroubleshootingInstances.html) fstab 中的第 6 个字段定义此安装的可用性要求，非零值暗示将在该卷上执行文件系统检查并且*必须* 成功完成。能否在 Amazon EC2 中使用此字段还不确定，因为故障一般会导致交互性控制台提示信息，但是目前此功能在 Amazon EC2 中尚不可用。请谨慎使用此功能，并阅读 Linux man 页面了解有关 fstab 的信息。  | 
|  实例存储支持的  |  执行以下步骤： [\[See the AWS documentation website for more details\]](http://docs.amazonaws.cn/AWSEC2/latest/UserGuide/TroubleshootingInstances.html)  | 

## 挂载文件系统时出现一般性错误（挂载失败）


表示此条件的系统日志类似于下方显示的示例。

```
Loading xenblk.ko module 
xen-vbd: registered block device major 8

Loading ehci-hcd.ko module
Loading ohci-hcd.ko module
Loading uhci-hcd.ko module
USB Universal Host Controller Interface driver v3.0

Loading mbcache.ko module
Loading jbd.ko module
Loading ext3.ko module
Creating root device.
Mounting root filesystem.
kjournald starting.  Commit interval 5 seconds

EXT3-fs: mounted filesystem with ordered data mode.

Setting up other filesystems.
Setting up new root fs
no fstab.sys, mounting internal defaults
Switching to new root and running init.
unmounting old /dev
unmounting old /proc
unmounting old /sys
mountall:/proc: unable to mount: Device or resource busy
mountall:/proc/self/mountinfo: No such file or directory
mountall: root filesystem isn't mounted
init: mountall main process (221) terminated with status 1

General error mounting filesystems.
A maintenance shell will now be started.
CONTROL-D will terminate this shell and re-try.
Press enter for maintenance
(or type Control-D to continue):
```

### 潜在原因



| 实例类型  | 潜在原因 | 
| --- | --- | 
|  由 Amazon EBS 支持  |   [\[See the AWS documentation website for more details\]](http://docs.amazonaws.cn/AWSEC2/latest/UserGuide/TroubleshootingInstances.html)  | 
|  实例存储支持的  |   [\[See the AWS documentation website for more details\]](http://docs.amazonaws.cn/AWSEC2/latest/UserGuide/TroubleshootingInstances.html)  | 

### 建议采取的措施



| 对于此实例类型  | 请执行该操作 | 
| --- | --- | 
|  由 Amazon EBS 支持  |  执行以下步骤： [\[See the AWS documentation website for more details\]](http://docs.amazonaws.cn/AWSEC2/latest/UserGuide/TroubleshootingInstances.html)  | 
|  实例存储支持的  |  请尝试以下任一操作： [\[See the AWS documentation website for more details\]](http://docs.amazonaws.cn/AWSEC2/latest/UserGuide/TroubleshootingInstances.html)  | 

## VFS：无法在未知块上挂载根 fs (根文件系统不匹配)


表示此条件的系统日志类似于下方显示的示例。

```
Linux version 2.6.16-xenU (builder@xenbat.amazonsa) (gcc version 4.0.1 
 20050727 (Red Hat 4.0.1-5)) #1 SMP Mon May 28 03:41:49 SAST 2007
...
Kernel command line:  root=/dev/sda1 ro 4
...
Registering block device major 8
...
Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(8,1)
```

### 潜在原因



| 实例类型  | 潜在原因 | 
| --- | --- | 
|  由 Amazon EBS 支持  |  [\[See the AWS documentation website for more details\]](http://docs.amazonaws.cn/AWSEC2/latest/UserGuide/TroubleshootingInstances.html)  | 
|  实例存储支持的  |  硬件设备故障。  | 

### 建议采取的措施



| 对于此实例类型  | 请执行该操作 | 
| --- | --- | 
|  由 Amazon EBS 支持  |  请执行下列操作之一： [\[See the AWS documentation website for more details\]](http://docs.amazonaws.cn/AWSEC2/latest/UserGuide/TroubleshootingInstances.html)  | 
|  实例存储支持的  |  终止实例并使用新内核启动新实例。  | 

## 错误：无法确定根设备的主/次编号… （根文件系统/设备不匹配）


表示此条件的系统日志类似于下方显示的示例。

```
...
XENBUS: Device with no driver: device/vif/0
XENBUS: Device with no driver: device/vbd/2048
drivers/rtc/hctosys.c: unable to open rtc device (rtc0)
Initializing network drop monitor service
Freeing unused kernel memory: 508k freed
:: Starting udevd...
done.
:: Running Hook [udev]
:: Triggering uevents...<30>udevd[65]: starting version 173
done.
Waiting 10 seconds for device /dev/xvda1 ...
Root device '/dev/xvda1' doesn't exist. Attempting to create it.
ERROR: Unable to determine major/minor number of root device '/dev/xvda1'.
You are being dropped to a recovery shell
    Type 'exit' to try and continue booting
sh: can't access tty; job control turned off
[ramfs /]#
```

### 潜在原因

+ 虚拟块储存设备驱动程序缺失或配置错误
+ 设备枚举冲突 (sda 与 xvda，或是 sda 而不是 sda1)
+ 实例内核选择错误

### 建议采取的措施



| 对于此实例类型  | 请执行该操作 | 
| --- | --- | 
|  由 Amazon EBS 支持  |  执行以下步骤： [\[See the AWS documentation website for more details\]](http://docs.amazonaws.cn/AWSEC2/latest/UserGuide/TroubleshootingInstances.html)  | 
|  实例存储支持的  |  执行以下步骤： [\[See the AWS documentation website for more details\]](http://docs.amazonaws.cn/AWSEC2/latest/UserGuide/TroubleshootingInstances.html)  | 

## XENBUS：设备没有驱动程序…


表示此条件的系统日志类似于下方显示的示例。

```
XENBUS: Device with no driver: device/vbd/2048
drivers/rtc/hctosys.c: unable to open rtc device (rtc0)
Initializing network drop monitor service
Freeing unused kernel memory: 508k freed
:: Starting udevd...
done.
:: Running Hook [udev]
:: Triggering uevents...<30>udevd[65]: starting version 173
done.
Waiting 10 seconds for device /dev/xvda1 ...
Root device '/dev/xvda1' doesn't exist. Attempting to create it.
ERROR: Unable to determine major/minor number of root device '/dev/xvda1'.
You are being dropped to a recovery shell
    Type 'exit' to try and continue booting
sh: can't access tty; job control turned off
[ramfs /]#
```

### 潜在原因

+ 虚拟块储存设备驱动程序缺失或配置错误
+ 设备枚举冲突 (sda 与 xvda)
+ 实例内核选择错误

### 建议采取的措施



| 对于此实例类型  | 请执行该操作 | 
| --- | --- | 
|  由 Amazon EBS 支持  |  执行以下步骤： [\[See the AWS documentation website for more details\]](http://docs.amazonaws.cn/AWSEC2/latest/UserGuide/TroubleshootingInstances.html)  | 
|  实例存储支持的  |  执行以下步骤： [\[See the AWS documentation website for more details\]](http://docs.amazonaws.cn/AWSEC2/latest/UserGuide/TroubleshootingInstances.html)  | 

## … 没有检查时，已强制执行检查的工作日 (文件系统检查要求)


表示此条件的系统日志类似于下方显示的示例。

```
...
Checking filesystems
Checking all file systems.
[/sbin/fsck.ext3 (1) -- /] fsck.ext3 -a /dev/sda1 
/dev/sda1 has gone 361 days without being checked, check forced
```

### 潜在原因


文件系统检查时间已过；正在强制执行文件系统检查。

### 建议采取的措施

+ 耐心等候文件系统检查的完成。文件系统检查可能需要很长一段时间，具体取决于根文件系统的大小。
+  使用 tune2fs 或适合您的文件系统的工具修改文件系统，以去除强制执行文件系统检查 (fsck) 的功能。

## fsck 卡在退出状态... （设备缺失）


表示此条件的系统日志类似于下方显示的示例。

```
Cleaning up ifupdown....
Loading kernel modules...done.
...
Activating lvm and md swap...done.
Checking file systems...fsck from util-linux-ng 2.16.2
/sbin/fsck.xfs: /dev/sdh does not exist
fsck died with exit status 8
[31mfailed (code 8).[39;49m
```

### 潜在原因

+ 为缺失的磁盘查找虚拟磁盘
+ 强制执行文件系统一致性检查
+ 磁盘故障或者已分离

### 建议采取的措施



| 对于此实例类型  | 请执行该操作 | 
| --- | --- | 
|  由 Amazon EBS 支持  |  尝试以下一个或多个措施以解决此问题： [\[See the AWS documentation website for more details\]](http://docs.amazonaws.cn/AWSEC2/latest/UserGuide/TroubleshootingInstances.html)  | 
|  实例存储支持的  |  尝试以下一个或多个措施以解决此问题： [\[See the AWS documentation website for more details\]](http://docs.amazonaws.cn/AWSEC2/latest/UserGuide/TroubleshootingInstances.html)  | 

## GRUB 提示 (grubdom>)


表示此条件的系统日志类似于下方显示的示例。

```
    GNU GRUB  version 0.97  (629760K lower / 0K upper memory)

       [ Minimal BASH-like line editing is supported.   For

         the   first   word,  TAB  lists  possible  command

         completions.  Anywhere else TAB lists the possible

         completions of a device/filename. ]

grubdom>
```

### 潜在原因



| 实例类型  | 潜在原因 | 
| --- | --- | 
|  由 Amazon EBS 支持  |  [\[See the AWS documentation website for more details\]](http://docs.amazonaws.cn/AWSEC2/latest/UserGuide/TroubleshootingInstances.html)  | 
|  实例存储支持的  |  [\[See the AWS documentation website for more details\]](http://docs.amazonaws.cn/AWSEC2/latest/UserGuide/TroubleshootingInstances.html)  | 

### 建议采取的措施



| 对于此实例类型  | 请执行该操作 | 
| --- | --- | 
|  由 Amazon EBS 支持  |  选项 1：修改 AMI 并重启实例： [\[See the AWS documentation website for more details\]](http://docs.amazonaws.cn/AWSEC2/latest/UserGuide/TroubleshootingInstances.html) 选项 2：修复现有实例： [\[See the AWS documentation website for more details\]](http://docs.amazonaws.cn/AWSEC2/latest/UserGuide/TroubleshootingInstances.html)  | 
|  实例存储支持的  |  选项 1：修改 AMI 并重启实例： [\[See the AWS documentation website for more details\]](http://docs.amazonaws.cn/AWSEC2/latest/UserGuide/TroubleshootingInstances.html) 选项 2：终止此实例并启动新实例，指定正确的内核。  要从现有实例恢复数据，请联系 [Amazon Web Services 支持](https://www.amazonaws.cn/premiumsupport/)。   | 

## 提起接口 eth0：设备 eth0 的 MAC 地址与预期不同，驳回。(硬编码的 MAC 地址)。


表示此条件的系统日志类似于下方显示的示例。

```
... 
Bringing up loopback interface:  [  OK  ]

Bringing up interface eth0:  Device eth0 has different MAC address than expected, ignoring.
[FAILED]

Starting auditd: [  OK  ]
```

### 潜在原因


AMI 配置中存在硬编码接口 MAC

### 建议采取的措施



| 对于此实例类型  | 请执行该操作 | 
| --- | --- | 
|  由 Amazon EBS 支持  |  请执行下列操作之一： [\[See the AWS documentation website for more details\]](http://docs.amazonaws.cn/AWSEC2/latest/UserGuide/TroubleshootingInstances.html) OR 执行以下步骤： [\[See the AWS documentation website for more details\]](http://docs.amazonaws.cn/AWSEC2/latest/UserGuide/TroubleshootingInstances.html)  | 
|  实例存储支持的  |  请执行下列操作之一： [\[See the AWS documentation website for more details\]](http://docs.amazonaws.cn/AWSEC2/latest/UserGuide/TroubleshootingInstances.html)  | 

## 无法加载 SELinux 策略。计算机处于强制执行模式。正在中断。(SELinux 配置错误)


表示此条件的系统日志类似于下方显示的示例。

```
audit(1313445102.626:2): enforcing=1 old_enforcing=0 auid=4294967295
Unable to load SELinux Policy. Machine is in enforcing mode. Halting now.
Kernel panic - not syncing: Attempted to kill init!
```

### 潜在原因


SELinux 已在错误的情况下启动：
+ GRUB 不支持所提供的内核
+ 后备内核不存在

### 建议采取的措施



| 对于此实例类型  | 请执行该操作 | 
| --- | --- | 
|  由 Amazon EBS 支持  |  执行以下步骤： [\[See the AWS documentation website for more details\]](http://docs.amazonaws.cn/AWSEC2/latest/UserGuide/TroubleshootingInstances.html)  | 
|  实例存储支持的  |  执行以下步骤： [\[See the AWS documentation website for more details\]](http://docs.amazonaws.cn/AWSEC2/latest/UserGuide/TroubleshootingInstances.html)  | 

## XENBUS：连接设备时超时 (Xenbus 超时)


表示此条件的系统日志类似于下方显示的示例。

```
Linux version 2.6.16-xenU (builder@xenbat.amazonsa) (gcc version 4.0.1 
20050727 (Red Hat 4.0.1-5)) #1 SMP Mon May 28 03:41:49 SAST 2007
...
XENBUS: Timeout connecting to devices!
...
Kernel panic - not syncing: No init found.  Try passing init= option to kernel.
```

### 潜在原因

+ 块储存设备未连接到实例
+ 此实例使用的是旧实例内核

### 建议采取的措施



| 对于此实例类型  | 请执行该操作 | 
| --- | --- | 
|  由 Amazon EBS 支持  |  请执行下列操作之一： [\[See the AWS documentation website for more details\]](http://docs.amazonaws.cn/AWSEC2/latest/UserGuide/TroubleshootingInstances.html)  | 
|  实例存储支持的  |  请执行下列操作之一： [\[See the AWS documentation website for more details\]](http://docs.amazonaws.cn/AWSEC2/latest/UserGuide/TroubleshootingInstances.html)  | 

# 排查从错误的卷启动 Amazon EC2 Linux 实例的问题
Linux 实例从错误的卷启动

在某些情况下，某个并非附加到 `/dev/xvda` 或 `/dev/sda` 的卷成为了 Linux 实例的根卷。当您将另一个实例的根卷或从某个根卷的快照中创建的卷附加到带有现有根卷的实例时，可能会发生这种情况。

这是由于 Linux 中的初始虚拟磁盘的工作方式导致的。它将选择在 `/` 中定义为 `/etc/fstab` 的卷，在某些发行版中，这是由附加到卷分区的标签决定的。具体来说，您将发现您的 `/etc/fstab` 与下面类似：

```
LABEL=/ / ext4 defaults,noatime 1 1 
tmpfs /dev/shm tmpfs defaults 0 0 
devpts /dev/pts devpts gid=5,mode=620 0 0 
sysfs /sys sysfs defaults 0 0 
proc /proc proc defaults 0 0
```

如果您检查两个卷的标签，您将看到它们都包含 `/` 标签：

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

在此示例中，您最终可以让 `/dev/xvdf1`（而不是您打算从中启动实例的 `/dev/xvda1` 卷）成为您的实例在初始虚拟磁盘运行后从中启动的根卷。要解决此问题，请使用相同的 **e2label** 命令更改您不想从中启动实例的附加卷的标签。

某些情况下，在 `/etc/fstab` 中指定 UUID 可以解决此问题。但是，如果两个卷来自同一快照，或者辅助卷是通过主卷的快照创建的，则它们将共享 UUID。

```
[ec2-user ~]$ sudo blkid 
/dev/xvda1: LABEL="/" UUID=73947a77-ddbe-4dc7-bd8f-3fe0bc840778 TYPE="ext4" PARTLABEL="Linux" PARTUUID=d55925ee-72c8-41e7-b514-7084e28f7334 
/dev/xvdf1: LABEL="old/" UUID=73947a77-ddbe-4dc7-bd8f-3fe0bc840778 TYPE="ext4" PARTLABEL="Linux" PARTUUID=d55925ee-72c8-41e7-b514-7084e28f7334
```

**更改已附加 ext4 卷的标签**

1. 使用 **e2label** 命令将卷的标签更改为 `/` 之外的其他标签。

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

1. 验证卷是否有新标签。

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

**更改已附加 xfs 卷的标签**
+ 使用 **xfs\$1admin** 命令将卷的标签更改为 `/` 之外的其他标签。

  ```
  [ec2-user ~]$ sudo xfs_admin -L old/ /dev/xvdf1
  writing all SBs
  new label = "old/"
  ```

如上所示更改卷标签后，您应该能够重新引导实例并在实例引导时让初始虚拟磁盘选择适当的卷。

**重要**  
如果您要分离使用新标签的卷并将它返回到另一实例以用作根卷，则必须再次执行上述过程并将卷标签更改回其原始值。否则，其他实例将不会启动，因为内存虚拟磁盘无法找到标签为 `/` 的卷。

# 排查连接到 Amazon EC2 Windows 实例时遇到的问题
Windows 实例 RDP 问题

以下信息和常见错误可以帮助您排查连接到 Windows 实例时出现的问题。

**Topics**
+ [

## 远程桌面无法连接到远程计算机
](#rdp-issues)
+ [

## 使用 macOS RDP 客户端时出错
](#troubleshoot-instance-connect-mac-rdp)
+ [

## RDP 显示黑屏而不是桌面
](#rdp-black-screen)
+ [

## 无法使用非管理员用户远程登录到实例
](#remote-failure)
+ [

## 使用 Amazon Systems Manager 解决远程桌面问题
](#Troubleshooting-Remote-Desktop-Connection-issues-using-AWS-Systems-Manager)
+ [

## 在具有远程注册表的 EC2 实例上启用远程桌面
](#troubleshooting-windows-rdp-remote-registry)
+ [

## 我丢失了私有密钥。我怎样才能连接到我的 Windows 实例？
](#replacing-lost-key-pair-windows)

## 远程桌面无法连接到远程计算机


尝试以下操作以解决与连接实例有关的问题：
+ 确认您使用的是正确的公有 DNS 主机名。(在 Amazon EC2 控制台中，请选择实例，并在详细信息窗格中查看 **Public DNS (IPv4) (公有 DNS (IPv4))**。) 如果您的实例是在 VPC 中，并且您没有看到公有 DNS 名称，则必须启用 DNS 主机名。有关更多信息，请参阅《Amazon VPC 用户指南》**中的 [VPC 的 DNS 属性](https://docs.amazonaws.cn/vpc/latest/userguide/vpc-dns.html)。
+ 验证您的实例是否具有公有 IPv4 地址。如果没有，您可以将弹性 IP 地址与您的实例关联。有关更多信息，请参阅[弹性 IP 地址](elastic-ip-addresses-eip.md)。
+ 要使用 IPv6 地址连接到您的实例，请检查本地计算机是否具有 IPv6 地址以及是否已配置为可使用 IPv6。有关更多信息，请参阅《Amazon VPC 用户指南》中的 [在实例中配置 IPv6](https://docs.amazonaws.cn/vpc/latest/userguide/vpc-migrate-ipv6.html#vpc-migrate-ipv6-dhcpv6)。
+ 确认安全组具有允许端口 3389 RDP 访问的规则。
+ 如果您输入复制的密码，然后收到错误消息 `Your credentials did not work`，请尝试根据系统提示手动键入密码。可能是复制密码时丢失了字符或添加了额外空格。
+ 确认实例已通过状态检查。有关更多信息，请参阅[Amazon EC2 实例的状态检查](monitoring-system-instance-status-check.md)和[通过失败状态检查来排查 Amazon EC2 Linux 实例问题](TroubleshootingInstances.md)。
+ 确认子网的路由表具有这样一个路由，该路由将发往 VPC 外部的所有流量发送到该 VPC 的 Internet 网关。有关更多信息，请参阅 *Amazon VPC 用户指南* 中的[创建自定义路由表](https://docs.amazonaws.cn/vpc/latest/userguide/VPC_Internet_Gateway.html#Add_IGW_Routing)（Internet 网关）。
+ 确认 Windows 防火墙或其他防火墙软件没有阻止到实例的 RDP 流量。我们建议您禁用 Windows 防火墙，使用安全组规则来控制对实例的访问。尝试以下选项之一：
  + 可使用 [AWSSupport-TroubleshootRDP](#AWSSupport-TroubleshootRDP) 来[disable the Windows Firewall profiles using SSM Agent](#disable-firewall)。此选项要求为 Amazon Systems Manager 配置实例。
  + 使用 [AWSSupport-ExecuteEC2Rescue](#AWSSupport-ExecuteEC2Rescue)。
  + 停止实例，分离根卷，然后将该卷作为数据卷附加到临时实例。连接到临时实例，将该卷联机。从数据卷加载注册表配置单元。在 `HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\SharedAccess\Parameters\FirewallPolicyStandardProfile` 下方，将 `EnableFirewall` 设置为 0。卸载注册表配置单元，然后将卷脱机。从临时实例中分离卷并将其作为根卷附加到原始实例。启动原始实例。
+  验证是否在不属于 Active Directory 域的实例上禁用网络级身份验证（使用 [AWSSupport-TroubleshootRDP](#AWSSupport-TroubleshootRDP) 来 [disable NLA](#disable-nla)）。
+ 验证远程桌面服务（TermService）启动类型是否为“自动”，服务是否启动（使用 [AWSSupport-TroubleshootRDP](#AWSSupport-TroubleshootRDP) 来 [enable and start the RDP service](#rdp-auto)）。
+ 验证是否连接到正确的远程桌面协议端口，默认情况下为 3389（使用 [AWSSupport-TroubleshootRDP](#AWSSupport-TroubleshootRDP) 来 [read the current RDP port](#check-rdp) 和 [change it back to 3389](#restore-3389)）。
+  验证实例是否允许远程桌面连接（使用 [AWSSupport-TroubleshootRDP](#AWSSupport-TroubleshootRDP) 来 [enable Remote Desktop connections](#allow-rdp)）。
+ 确认密码没有过期。如果密码已过期，可以重置密码。有关更多信息，请参阅 [重置 Amazon EC2 Windows 实例的 Windows 管理员密码](ResettingAdminPassword.md)。
+ 如果您尝试使用在实例上创建的用户进行连接并收到错误消息 `The user cannot connect to the server due to insufficient access privileges`，请确认您已为该用户授予本地登录权限。有关更多信息，请参阅[向成员授予本地登录权限](https://learn.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2008-r2-and-2008/ee957044(v%3dws.10))。
+ 如果尝试次数超过所允许的并发 RDP 会话的最大数目，则会终止会话，并显示消息 `Your Remote Desktop Services session has ended. Another user connected to the remote computer, so your connection was lost.`。默认情况下，实例可以有两个并发 RDP 会话。

## 使用 macOS RDP 客户端时出错


如果使用 Microsoft 网站上的远程桌面连接客户端连接到 Windows Server 实例，则可能会出现以下错误：

```
Remote Desktop Connection cannot verify the identity of the computer that you want to connect to.
```

从 Mac 应用商店下载 Microsoft 远程桌面应用程序，然后使用该应用程序连接到实例。

## RDP 显示黑屏而不是桌面


请尝试以下操作解决该问题：
+ 检查控制台输出有无其他信息。要使用 Amazon EC2 控制台获取您的实例的控制台输出，请选择实例，然后依次选择 **Actions (操作)**、**Monitor and troubleshoot (显示屏和问题排查)**、**Get System Log (获取系统日志)**。
+ 确认您正在运行最新版本的 RDP 客户端。
+ 尝试使用 RDP 客户端的默认设置。
+ 如果您要使用远程桌面连接，请尝试使用 `/admin` 选项，通过以下方式将其启动。

  ```
  mstsc /v:instance /admin
  ```
+ 如果服务器正在运行全屏应用程序，则它可能会停止响应。使用 Ctrl\$1Shift\$1Esc 以启动 Windows 任务管理器，然后关闭应用程序。
+ 如果过度使用服务器，则服务器可能已停止响应。要使用 Amazon EC2 控制台来监控实例，请选择实例，然后选择 **Monitoring (监控)** 选项卡。如果需要将实例类型更改为更大大小，请参阅[Amazon EC2 实例类型更改](ec2-instance-resize.md)。

## 无法使用非管理员用户远程登录到实例


如果无法通过非管理员用户远程登录到 Windows 实例，请确保您已为该用户授予本地登录权限。请参阅[为用户或组授予本地登录到域中的域控制器的权限](https://learn.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2008-R2-and-2008/ee957044(v=ws.10)#grant-a-user-or-group-the-right-to-log-on-locally-to-the-domain-controllers-in-the-domain)。

## 使用 Amazon Systems Manager 解决远程桌面问题


您可以使用 Amazon Systems Manager 解决使用 RDP 连接到 Windows 实例的问题。

### Amazon Web Services Support-TroubleshootRDP


利用 Amazon Web Services Support-TroubleshootRDP 自动化文档，用户可以检查或修改目标实例上可影响远程桌面协议 (RDP) 连接的常规设置，如 **RDP 端口**、**网络层身份验证 (NLA)** 和 **Windows 防火墙**配置文件。默认情况下，此文档读取和输出这些设置的值。

Amazon Web Services Support-TroubleshootRDP 自动化文档可与 EC2 实例、本地实例和虚拟机 (VM)（已允许它们与 Amazon Systems Manager（托管实例）一起使用）一起使用。此外，它还可以*不* 允许与 Systems Manager 一起使用的适用于 Windows 服务器的 EC2 实例一起使用。有关启用实例以与 Amazon Systems Manager 一起使用的信息，请参阅《Amazon Systems Manager 用户指南》中的 [托管式节点](https://docs.amazonaws.cn/systems-manager/latest/userguide/fleet-manager-managed-nodes.html)。

**使用 Amazon Web Services Support-TroubleshootRDP 文档进行故障排除**

1. 登录 [Systems Manager 控制台](https://console.amazonaws.cn/systems-manager/)。

1.  确认您与受损 实例位于同一区域。

1. 从左侧导航窗格中选择 **Documents**（文档）。

1. 在 **Owned by Amazon**（由 Amazon 拥有）选项卡上，在搜索字段中输入 `AWSSupport-TroubleshootRDP`。`AWSSupport-TroubleshootRDP` 文档显示时，选择该文档。

1. 选择**执行自动化**。

1. 对于 **Execution Mode (执行模式)**，选择 **Simple execution (简单执行)**。

1. 对于 **Input parameters (输入参数)** **InstanceId**，启用**Show interactive instance picker (显示交互式实例选取器)**。

1. 选择您的 Amazon EC2 实例。

1. 检查[示例](#AWSSupport-TroubleshootRDP-Examples)，然后选择 **Execute (执行)**。

1. 要监控执行进度，对于 **Execution status (执行状态)**，等待状态从 **Pending (待处理)** 变为 **Success (成功)**。展开 **Outputs (输出)** 以查看结果。要查看各个步骤的输出，请在 **Executed Steps (执行步骤)** 中，选择 **Step ID (步骤 ID)**。

#### Amazon Web Services Support-TroubleshootRDP 示例


以下示例介绍如何使用 Amazon Web Services Support-TroubleshootRDP 完成常见的故障排除任务。您可以使用示例 Amazon CLI [https://docs.amazonaws.cn/cli/latest/reference/ssm/start-automation-execution.html](https://docs.amazonaws.cn/cli/latest/reference/ssm/start-automation-execution.html) 命令或提供的 Amazon Web Services 管理控制台 链接。

**Example 示例：检查当前的 RDP 状态**  <a name="check-rdp"></a>
Amazon CLI:  

```
aws ssm start-automation-execution --document-name "AWSSupport-TroubleshootRDP" --parameters "InstanceId=i-1234567890abcdef0, Action=Custom" --region region_code
```
Amazon Systems Manager 控制台：  

```
https://console.aws.amazon.com/systems-manager/automation/execute/AWSSupport-TroubleshootRDP?region=region#documentVersion=$LATEST
```

**Example 示例：禁用 Windows 防火墙**  <a name="disable-firewall"></a>
Amazon CLI:  

```
aws ssm start-automation-execution --document-name "AWSSupport-TroubleshootRDP" --parameters "InstanceId=i-1234567890abcdef0, Action=Custom, Firewall=Disable" --region region_code
```
Amazon Systems Manager 控制台：  

```
https://console.aws.amazon.com/systems-manager/automation/execute/AWSSupport-TroubleshootRDP?region=region_code#documentVersion=$LATEST&Firewall=Disable
```

**Example 示例：禁用网络级别身份验证**  <a name="disable-nla"></a>
Amazon CLI:  

```
aws ssm start-automation-execution --document-name "AWSSupport-TroubleshootRDP" --parameters "InstanceId=i-1234567890abcdef0, Action=Custom, NLASettingAction=Disable" --region region_code
```
Amazon Systems Manager 控制台：  

```
https://console.aws.amazon.com/systems-manager/automation/execute/AWSSupport-TroubleshootRDP?region=region_code#documentVersion
```

**Example 示例：将 RDP 服务启动类型设置为自动并启动 RDP 服务**  <a name="rdp-auto"></a>
Amazon CLI:  

```
aws ssm start-automation-execution --document-name "AWSSupport-TroubleshootRDP" --parameters "InstanceId=i-1234567890abcdef0, Action=Custom, RDPServiceStartupType=Auto, RDPServiceAction=Start" --region region_code
```
Amazon Systems Manager 控制台：  

```
https://console.aws.amazon.com/systems-manager/automation/execute/AWSSupport-TroubleshootRDP?region=region_code#documentVersion=$LATEST&RDPServiceStartupType=Auto&RDPServiceAction=Start
```

**Example 示例：恢复默认 RDP 端口 (3389)**  <a name="restore-3389"></a>
Amazon CLI:  

```
aws ssm start-automation-execution --document-name "AWSSupport-TroubleshootRDP" --parameters "InstanceId=i-1234567890abcdef0, Action=Custom, RDPPortAction=Modify" --region region_code
```
Amazon Systems Manager 控制台：  

```
https://console.aws.amazon.com/systems-manager/automation/execute/AWSSupport-TroubleshootRDP?region=region_code#documentVersion=$LATEST&RDPPortAction=Modify
```

**Example 示例：允许远程连接**  <a name="allow-rdp"></a>
Amazon CLI:  

```
aws ssm start-automation-execution --document-name "AWSSupport-TroubleshootRDP" --parameters "InstanceId=i-1234567890abcdef0, Action=Custom, RemoteConnections=Enable" --region region_code
```
Amazon Systems Manager 控制台：  

```
https://console.aws.amazon.com/systems-manager/automation/execute/AWSSupport-TroubleshootRDP?region=region_code#documentVersion=$LATEST&RemoteConnections=Enable
```

### Amazon Web Services Support-ExecuteEC2Rescue


AWSSupport-ExecuteEC2Rescue 自动化文档使用 EC2Rescue for Windows Server 自动排查并修复 EC2 实例连接和 RDP 问题。有关更多信息，请参阅 [在无法访问的实例上运行 EC2Rescue 工具](https://docs.amazonaws.cn/systems-manager/latest/userguide/automation-ec2rescue.html)。

Amazon Web Services Support-ExecuteEC2Rescue 自动化文档需要停止并重新启动实例。Systems Manager Automation 将停止实例并创建 Amazon Machine Image (AMI) (Amazon 系统映像)。实例存储卷中存储的数据将会丢失。如果未使用弹性 IP 地址，公有 IP 地址将发生变化。有关更多信息，请参阅《Amazon Systems Manager 用户指南》中的 [在无法访问的实例上运行 EC2Rescue 工具](https://docs.amazonaws.cn/systems-manager/latest/userguide/automation-ec2rescue.html)。

**使用 Amazon Web Services Support-ExecuteEC2Rescue 文档进行故障排除**

1. 打开 [Systems Manager 控制台](https://console.amazonaws.cn/systems-manager/)。

1. 确认您与受损 Amazon EC2 实例位于同一区域。

1. 在导航面板中，选择**文档**。

1. 搜索并选择 `AWSSupport-ExecuteEC2Rescue` 文档，然后选择**执行自动化**。

1. 在 **Execution Mode (执行模式)** 中，选择 **Simple execution (简单执行)**。

1.  在 **Input parameters (输入参数)** 部分的 **UnreachableInstanceId** 中，输入无法访问的实例的 Amazon EC2 实例 ID。

1.  （可选）对于 **LogDestination**，请输入 Amazon Simple Storage Service (Amazon S3) 存储桶名称（如果需要收集操作系统日志以便排查 Amazon EC2 实例问题）。日志会自动上传到此指定存储桶。

1. 选择 **Execute (执行)**。

1.  要监控执行进度，请在 **Execution (执行)** 状态中，等待状态从 **Pending (待处理)** 变为 **Success (成功)**。展开 **Outputs (输出)** 以查看结果。要查看各个步骤的输出，请在 **Executed Steps (执行步骤)** 中，选择 **Step ID (步骤 ID)**。

## 在具有远程注册表的 EC2 实例上启用远程桌面


如果无法访问的实例未由 Amazon Systems Manager 会话管理器管理，则可以使用远程注册表启用远程桌面。

1. 从 EC2 控制台停止无法访问的实例。

1. 分离无法访问实例的根卷并将其附加到与存储卷位于同一可用区中的可访问实例。如果您在同一可用区中没有可访问的实例，请启动一个实例。记下无法访问的实例上根卷的设备名称。

1. 在可访问的实例上，打开磁盘管理。您可以通过在“命令提示符”窗口中运行以下命令来执行此操作。

   ```
   diskmgmt.msc
   ```

1. 右键单击来自无法访问的实例的新附加卷，然后选择**在线**。

1. 打开 Windows 注册表编辑器。您可以通过在“命令提示符”窗口中运行以下命令来执行此操作。

   ```
   regedit
   ```

1. 在注册表编辑器中，选择 **HKEY\$1LOCAL\$1MACHINE**，然后选择**文件**、**加载配置单元**。

1. 选择附加卷的驱动器，导航到 `\Windows\System32\config\`，选择 `SYSTEM`，然后选择 **Open (打开)**。

1. 对于 **Key Name (密钥名称)**，输入配置单元的唯一名称，然后选择 **OK (确定)**。

1. 在对注册表进行任何更改之前，备份注册表配置单元。

   1. 在注册表编辑器控制台树中，选择您加载的配置单元：**HKEY\$1LOCAL\$1MACHINE**\$1*your-key-name*。

   1. 选择**文件**、**导出**。

   1. 在 Export Registry File (导出注册表文件) 对话框中，选择要保存备份副本的位置，然后在 **File name (文件名)** 字段中键入备份文件的名称 。

   1. 选择**保存**。

1. 在注册表编辑器中，导航到 `HKEY_LOCAL_MACHINE\your key name\ControlSet001\Control\Terminal Server`，然后在详细信息窗格中双击 **fDenyTSConnections**。

1. 在 **Edit DWORD (编辑 DWORD)** 值框中，在 **Value data (值数据)** 字段中输入 `0`。

1. 选择 **OK**。
**注意**  
如果 **Value data (值数据)** 字段中的值为 `1`，则实例将拒绝远程桌面连接。值为 `0` 允许远程桌面连接。

1. 在注册表编辑器中，选择 **HKEY\$1LOCAL\$1MACHINE**\$1*your-key-name*，然后选择**文件**、**卸载配置单元**。

1. 关闭注册表编辑器和磁盘管理。

1. 在 EC2 控制台中，将根卷与可访问的实例分离，然后将其重新附加到无法访问的实例。将卷附加到无法访问的实例时，请在**设备**字段中输入您之前保存的设备名称。

1. 重新启动无法访问的实例。

## 我丢失了私有密钥。我怎样才能连接到我的 Windows 实例？


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

如果丢失了管理员密码并且不再具有私有密钥，您必须重置密码或创建新的实例。有关更多信息，请参阅 [重置 Amazon EC2 Windows 实例的 Windows 管理员密码](ResettingAdminPassword.md)。有关使用 Systems Manager 文档重置密码的步骤，请参阅《Amazon Systems Manager 用户指南》**中的[重置 Amazon EC2 实例上的密码和 SSH 密钥](https://docs.amazonaws.cn/systems-manager/latest/userguide/automation-ec2reset.html)。

# 排查 Amazon EC2 Windows 实例的启动问题
Windows 实例的启动问题

以下问题排查技巧有助于解决与 Amazon EC2 Windows 实例相关的密码和激活问题。

**Topics**
+ [

## "密码不可用"
](#password-not-available)
+ [

## "密码尚不可用"
](#password-not-ready)
+ [

## "无法检索 Windows 密码"
](#cannot-retrieve-password)
+ [

## "等待元数据服务"
](#metadata-unavailable)
+ [

## "无法激活 Windows"
](#activate-windows)
+ [

## "Windows 不是正版 (0x80070005)"
](#windows-not-genuine)
+ [

## "没有终端服务器许可服务器可提供许可证"
](#no-license-servers)
+ [

## “某些设置由您的组织管理”
](#some-settings-managed-by-org)

## "密码不可用"


要使用远程桌面连接到 Windows 实例，必须指定账户和密码。提供的账户和密码基于用于启动实例的 AMI。您可以为管理员账户检索自动生成的密码，也可以使用在创建该 AMI 的原始实例中所用的账户和密码。

您可以为使用自定义 Windows AMI 启动的实例生成管理员账户密码。要生成密码，您需要在创建 AMI 之前在操作系统中配置一些设置。有关更多信息，请参阅 [创建 Amazon EBS-backed AMI](creating-an-ami-ebs.md)。

如果未将 Windows 实例配置为生成随机密码，则在使用控制台检索自动生成的密码时会收到以下消息：

```
Password is not available.
The instance was launched from a custom AMI, or the default password has changed. A
password cannot be retrieved for this instance. If you have forgotten your password, you can
reset it using the Amazon EC2 configuration service. For more information, see Passwords for a
Windows Server instance.
```

检查实例的控制台输出，查看用于启动实例的 AMI 是不是在禁用了密码生成的情况下创建的。如果禁用了密码生成，则控制台输出包含以下内容：

```
Ec2SetPassword: Disabled
```

如果禁用了密码生成并且您未记住原始实例的密码，则可以重置该实例的密码。有关更多信息，请参阅[重置 Amazon EC2 Windows 实例的 Windows 管理员密码](ResettingAdminPassword.md)。

## "密码尚不可用"


要使用远程桌面连接到 Windows 实例，必须指定账户和密码。提供的账户和密码基于用于启动实例的 AMI。您可以为管理员账户检索自动生成的密码，也可以使用在创建该 AMI 的原始实例中所用的账户和密码。

您的密码应在几分钟内可用。如果密码不可用，则在使用控制台检索自动生成的密码时会收到以下消息：

```
Password not available yet.
Please wait at least 4 minutes after launching an instance before trying to retrieve the 
auto-generated password.
```

如果超过四分钟后您仍然无法获取密码，则您的实例的启动代理可能未配置为生成密码。请根据控制台输出是否为空，对此进行验证。有关更多信息，请参阅[无法获取控制台输出](win-ts-common-issues.md#no-console-output)。

另请验证用于访问管理门户的 Amazon Identity and Access Management（IAM）账户是否允许执行 `ec2:GetPasswordData` 操作。有关 IAM 权限的更多信息，请参阅[什么是 IAM？](https://docs.amazonaws.cn/IAM/latest/UserGuide/introduction.html)。

## "无法检索 Windows 密码"


要为管理员账户检索自动生成的密码，您必须针对启动实例时指定的密钥对使用私有密钥。如果在启动实例时未指定密钥对，您将会收到以下消息。

```
Cannot retrieve Windows password
```

您可以终止该实例并使用相同的 AMI 启动新实例，并确保指定密钥对。

## "等待元数据服务"


Windows 实例必须包含其实例元数据中的信息才能将自身激活。默认情况下，`WaitForMetaDataAvailable` 设置可确保 EC2Config 服务等待实例元数据可以访问，然后继续启动过程。有关更多信息，请参阅[使用实例元数据管理 EC2 实例](ec2-instance-metadata.md)。

如果实例未通过实例可到达性测试，请尝试以下操作来解决此问题。
+ 检查您的 VPC 的 CIDR 块。如果 Windows 实例启动至 IP 地址范围为 `224.0.0.0` - `255.255.255.255` (D 类和 E 类 IP 地址范围) 的 VPC，则其无法正确启动。这些 IP 地址范围是预留的，不应分配给主机设备。我们建议您创建一台 CIDR 块来自私有（非公共可路由）IP 地址范围（如 [RFC 1918](http://www.faqs.org/rfcs/rfc1918.html) 所指）的 VPC。
+ 系统有可能配置了静态 IP 地址。尝试[创建网络接口](create-network-interface.md)并[将其连接到实例](network-interface-attachments.md#attach_eni)。
+ 

**在无法连接到的 Windows 实例上启用 DHCP**

  1. 停止受影响的实例并分离其根卷。

  1. 在受影响的实例所在的可用区中启动临时实例。
**警告**  
如果您的临时实例与原始实例基于相同的 AMI，则您必须完成额外的步骤，否则在您恢复原始实例的根卷之后，由于磁盘签名冲突，您将无法启动原始实例。或者，可以为临时实例选择不同的 AMI。例如，如果原始实例使用适用于 Windows Server 2016 的 Amazon Windows AMI，则使用适用于 Windows Server 2019 的 Amazon Windows AMI 来启动临时实例。

  1. 将根卷从受影响的实例附加到此临时实例。连接到临时实例，打开 **Disk Management (磁盘管理)** 实用工具，将驱动器联机。

  1. 从临时实例，打开 **Regedit** 并选择 **HKEY\$1LOCAL\$1MACHINE**。从 **File** 菜单中，选择 **Load Hive**。选择驱动器，打开文件 `Windows\System32\config\SYSTEM`，在出现提示时指定键名 (您可以使用任何名称)。

  1. 选择刚加载的键并导航至 `ControlSet001\Services\Tcpip\Parameters\Interfaces`。每个网络接口均按 GUID 列出。选择正确的网络接口。如果禁用了 DHCP 且分配了静态 IP 地址，则 `EnableDHCP` 设置为 0。要启用 DHCP，请将 `EnableDHCP` 设置为 1，并且删除以下键 (如果存在)：`NameServer`、`SubnetMask`、`IPAddress` 和 `DefaultGateway`。再次选择该键，在 **File** 菜单中，选择 **Unload Hive**。
**注意**  
如果您有多个网络接口，您将需要确定适合的 DHCP 来启用接口。要确定适合的网络接口，请查看以下键值 `NameServer`、`SubnetMask`、`IPAddress` 和 `DefaultGateway`。这些值显示前一实例的静态配置。

  1. （可选）如果已启用 DHCP，则可能是您没有通向该元数据服务的路由。更新 EC2Config 可以解决此问题。

     1. [下载](https://s3.amazonaws.com/ec2-downloads-windows/EC2Config/EC2Install.zip)并安装最新版本的 EC2Config 服务。有关安装此服务的更多信息，请参阅[安装最新版的 EC2Config](UsingConfig_Install.md)。

     1. 将文件从 `.zip` 文件提取到附加的驱动器上的 `Temp` 目录。

     1. 打开 **Regedit**，选择 **HKEY\$1LOCAL\$1MACHINE**。从 **File** 菜单中，选择 **Load Hive**。选择驱动器，打开文件 `Windows\System32\config\SOFTWARE`，在出现提示时指定键名 (您可以使用任何名称)。

     1. 选择刚加载的键并导航至 `Microsoft\Windows\CurrentVersion`。选择 `RunOnce` 键。(如果此键不存在，请右键单击 `CurrentVersion`，指向 **New**，选择 **Key**，然后将该键命名为 `RunOnce`。) 右键单击，指向 **New (新建)**，选择 **String Value (字符串值)**。输入 `Ec2Install` 作为名称并输入 `C:\Temp\Ec2Install.exe -q` 作为数据。

     1. 再次选择该键，在 **File** 菜单中，选择 **Unload Hive**。

  1. （可选）如果您的临时实例与原始实例基于相同的 AMI，则您必须完成以下步骤，否则在您恢复原始实例的根卷之后，由于磁盘签名冲突，您将无法启动原始实例。
**警告**  
以下过程介绍了如何使用注册表编辑器编辑 Windows 注册表。如果您不熟悉 Windows 注册表或如何安全地使用注册表编辑器进行更改，请参阅[配置注册表](https://learn.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2008-R2-and-2008/cc725612(v=ws.11))。

     1. 打开命令提示符，键入 **regedit.exe**，然后按 Enter。

     1. 在 **Registry Editor (注册表编辑器)** 中，从上下文菜单（右键单击）中选择 **HKEY\$1LOCAL\$1MACHINE**，然后选择 **Find (查找)**。

     1. 键入 **Windows Boot Manager**，然后选择 **Find Next (查找下一个)**。

     1. 选择名为 `11000001` 的密钥。此密钥是您在上一步中找到的密钥的同级。

     1. 在右侧窗格中，选择 `Element`，然后从上下文菜单（右键单击）中选择 **Modify (修改)**。

     1. 找到数据中偏移 0x38 处的四字节磁盘签名。反转字节以创建磁盘签名，然后将其记录下来。例如，由以下数据表示的磁盘签名是 `E9EB3AA5`：

        ```
        ...
        0030  00 00 00 00 01 00 00 00
        0038  A5 3A EB E9 00 00 00 00
        0040  00 00 00 00 00 00 00 00
        ...
        ```

     1. 在命令提示符窗口运行以下命令以启动 Microsoft DiskPart。

        ```
        diskpart
        ```

     1. 运行以下 DiskPart 命令以选择卷。（您可以使用**磁盘管理**实用程序验证磁盘号是否为 1。）

        ```
        DISKPART> select disk 1
        
        Disk 1 is now the selected disk.
        ```

     1. 运行以下 DiskPart 命令以获取磁盘签名。

        ```
        DISKPART>  uniqueid disk
        
        Disk ID: 0C764FA8
        ```

     1. 如果上一步中显示的磁盘签名与之前写下的 BCD 中的磁盘签名不匹配，请使用以下 DiskPart 命令更改磁盘签名，使其匹配：

        ```
        DISKPART> uniqueid disk id=E9EB3AA5
        ```

  1. 使用 **Disk Management (磁盘管理)** 实用工具，将驱动器脱机。
**注意**  
如果临时实例与受影响的实例运行相同的操作系统，则驱动程序将自动离线，因此您无需手动使其离线。

  1. 将该卷从临时实例分离。如果您不再使用临时实例，则可以将其终止。

  1. 将受影响实例的根卷作为 `/dev/sda1` 附加，从而将其还原。

  1. 启动受影响的实例。

如果您已连接到实例，请从该实例打开 Internet 浏览器，然后输入元数据服务器的以下 URL：

```
http://169.254.169.254/latest/meta-data/
```

如果您无法连接到元数据服务器，请尝试以下操作解决问题：
+ [下载](https://s3.amazonaws.com/ec2-downloads-windows/EC2Config/EC2Install.zip)并安装最新版本的 EC2Config 服务。有关安装此服务的更多信息，请参阅[安装最新版的 EC2Config](UsingConfig_Install.md)。
+ 检查 Windows 实例是否正在运行 Red Hat PV 驱动程序。如果正在运行这种驱动程序，请更新至 Citrix PV 驱动程序。有关更多信息，请参阅 [在 EC2 Windows 实例上升级半虚拟化驱动程序](Upgrading_PV_drivers.md)。
+ 验证防火墙、IPSec 和代理设置没有阻止到元数据服务 (`169.254.169.254`) 或 Amazon KMS 服务器（地址在 `TargetKMSServer` 中的 `C:\Program Files\Amazon\Ec2ConfigService\Settings\ActivationSettings.xml` 元素中指定）的传出流量。
+ 使用以下命令验证您拥有到元数据服务 (`169.254.169.254`) 的路由。

  ```
  route print
  ```
+ 检查可能影响您的实例的可用区的网络问题。请访问 [http://status.aws.amazon.com/](https://status.amazonaws.cn/)。

## "无法激活 Windows"


Windows 实例使用 Windows Amazon KMS 激活。如果您的实例无法访问 `A problem occurred when Windows tried to activate. Error Code 0xC004F074` 服务器，您可能会收到此消息：Amazon KMS。必须每隔 180 天激活一次 Windows。在激活期限到期之前，EC2Config 会尝试连接 Amazon KMS 服务器以确保 Windows 仍处于激活状态。

如果您遇到 Windows 激活问题，请使用以下过程来解决此问题。

**对于 EC2Config（Windows Server 2012 R2 AMI 及更早版本）**

1. [下载](https://s3.amazonaws.com/ec2-downloads-windows/EC2Config/EC2Install.zip)并安装最新版本的 EC2Config 服务。有关安装此服务的更多信息，请参阅[安装最新版的 EC2Config](UsingConfig_Install.md)。

1. 登录实例并打开以下文件：`C:\Program Files\Amazon\Ec2ConfigService\Settings\config.xml`。

1. 在 文件中找到 **Ec2WindowsActivate** 插件。`config.xml`将状态更改为 **Enabled** 并保存您的更改。

1. 在 Windows 服务管理单元中，重新启动 EC2Config 服务或者重启实例。

如果这没有解决激活问题，请按照下面这些额外步骤操作。

1. 设定 Amazon KMS 目标：**C:\$1> slmgr.vbs /skms 169.254.169.250:1688**

1. 激活 Windows：**C:\$1> slmgr.vbs /ato**

**对于 EC2Launch（Windows Server 2016 AMI 及更高版本）**

1. 从具有管理权限的 PowerShell 提示符中，导入 EC2Launch 模块：

   ```
   PS C:\> Import-Module "C:\ProgramData\Amazon\EC2-Windows\Launch\Module\Ec2Launch.psd1"
   ```

1. 调用 Add Routes 函数查看新路由列表：

   ```
   PS C:\> Add-Routes
   ```

1. 调用 Set-ActivationSettings 函数：

   ```
   PS C:\> Set-Activationsettings
   ```

1. 然后，运行以下脚本以激活 Windows：

   ```
   PS C:\> cscript "${env:SYSTEMROOT}\system32\slmgr.vbs" /ato
   ```

 对于 EC2Config 和 EC2Launch，如果您仍收到激活错误，请验证以下信息。
+ 确认您有到 Amazon KMS 服务器的路由。打开 `C:\Program Files\Amazon\Ec2ConfigService\Settings\ActivationSettings.xml`，找到 `TargetKMSServer` 元素。运行以下命令，检查是否列出了这些 Amazon KMS 服务器的地址。

  ```
  route print
  ```
+ 确认已设置 Amazon KMS 客户端密钥。运行以下命令并检查输出。

  ```
  C:\Windows\System32\slmgr.vbs /dlv
  ```

  如果输出包含 Error: product key not found，则说明未设置 Amazon KMS 客户端密钥。如果未设置 Amazon KMS 客户端密钥，请按 Microsoft 文章（[Amazon KMS 客户端激活和产品密钥](https://learn.microsoft.com/en-us/windows-server/get-started/kms-client-activation-keys)）中的说明查找客户端密钥，然后运行以下命令来设置 Amazon KMS 客户端密钥。

  ```
  C:\Windows\System32\slmgr.vbs /ipk client_key
  ```
+ 确认系统的时间和时区是正确的。如果您使用的是 UTC 之外的其他时区，请添加以下注册表项并将其设置为 `1` 以确保时间正确：`HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\TimeZoneInformation\RealTimeIsUniversal`。
+ 如果启用了 Windows 防火墙，请使用以下命令临时将其禁用。

  ```
  netsh advfirewall set allprofiles state off
  ```

## "Windows 不是正版 (0x80070005)"


Windows 实例使用 Windows Amazon KMS 激活。如果实例无法完成激活过程，则会报告该 Windows 副本不是正版。

请尝试有关["无法激活 Windows"](#activate-windows) 的建议。

## "没有终端服务器许可服务器可提供许可证"


默认情况下，Windows Server 已获得授权，允许两个用户通过远程桌面同时使用。如果需要允许两个以上用户通过远程桌面同时访问您的 Windows 实例，您可以购买远程桌面服务客户端访问许可证 (CAL)，并安装“Remote Desktop Session Host (远程桌面会话主机)”和“Remote Desktop Licensing Server (远程桌面许可服务器)”角色。

检查有无以下问题：
+ 已超过并发 RDP 会话的最大数目。
+ 已安装 Windows 远程桌面服务角色。
+ 许可已过期。如果许可已过期，那么您无法作为用户连接到您的 Windows 实例。您可以尝试以下操作：
  + 使用 `/admin` 参数从命令行连接到实例，例如：

    ```
    mstsc /v:instance /admin
    ```

    有关更多信息，请参阅以下 Microsoft 文章：[通过命令行访问远程桌面](https://learn.microsoft.com/en-us/archive/technet-wiki/4487.access-remote-desktop-via-commandline)。
  + 停止该实例，分离其 Amazon EBS 卷，然后将这些卷附加到同一可用区中的另一个实例以恢复数据。

## “某些设置由您的组织管理”


从最新的 Windows Server AMI 启动的实例可能会显示 Windows Update 对话框消息，说明“某些设置由您的组织管理”。显示此消息是由于 Windows Server 中的一些变化导致的，不会影响 Windows Update 的行为或您管理更新设置的能力。

**消除警告**

1. 打开 `gpedit.msc`，并依次导航到**计算机配置**、**管理模板**、**Windows 组件**、**Windows 更新**。编辑**配置自动更新**，并将其设置为**已启用**。

1. 在命令提示符下，使用 **gpupdate /force** 更新组策略。

1. 关闭并重新打开“Windows 更新设置”。此时将会看到有关您的组织正在管理的设置的上述消息，然后显示“我们将自动下载更新，但通过按流量计费的连接除外（在此情况下会收费）。在这种情况下，我们将自动下载保持 Windows 平稳运行所需的更新”。

1. 返回到 `gpedit.msc`，并将组策略重新设置为**未配置**。再次运行 **gpupdate /force**。

1. 关闭命令提示符并等待几分钟。

1. 重新打开“Windows 更新设置”。您将不会再看到“某些设置由您的组织管理”消息。

# 排查 Amazon EC2 Windows 实例问题
Windows 实例问题

以下问题排查技巧有助于解决与 Amazon EC2 Windows 实例相关的问题。

**Topics**
+ [

## 无法将 Amazon Systems Manager 会话管理器连接到 Windows Server 2025 实例
](#connect-sysmgr-win2025)
+ [

## EBS 卷在 Windows Server 2016 和 2019 上不初始化
](#init-disks-win2k16)
+ [

## 将 EC2 Windows 实例启动至目录服务还原模式 (DSRM)
](#boot-dsrm)
+ [

## 实例失去网络连接或计划的任务不按预期方式运行
](#instance-loses-network-connectivity)
+ [

## 无法获取控制台输出
](#no-console-output)
+ [

## 网络上不可用的 Windows Server 2012 R2
](#server-2012-network-loss)
+ [

## 磁盘签名冲突
](#disk-signature-collision)

## 无法将 Amazon Systems Manager 会话管理器连接到 Windows Server 2025 实例


将 Amazon Systems Manager 会话管理器连接到 Windows Server 2025 实例可能会遇到问题。要解决此问题，请登录实例，然后导航到`Settings > Apps > Optional Features`并添加 `WMIC`。重启 SSM 代理服务或重启实例，并且Sessions Manager应该可以连接了。

您也可以使用以下 PowerShell 命令执行相同的操作：

```
Start-Process -FilePath "$env:SystemRoot\system32\Dism.exe" -ArgumentList @('/Online', '/Add-Capability', '/CapabilityName:WMIC~~~~') -Wait; Restart-Service -Name AmazonSSMAgent
```

## EBS 卷在 Windows Server 2016 和 2019 上不初始化


从 Windows Server 2016 和 2019 的 Amazon 系统映像（AMI）创建的实例使用 EC2Launch v1 代理来执行各种启动任务，包括初始化 EBS 卷。默认情况下，EC2Launch v1 不初始化辅助卷。不过，您可以将 EC2Launch v1 配置为自动初始化这些磁盘，如下所示。

**将盘符映射到卷**

1. 连接到要配置的实例并在文本编辑器中打开 `C:\ProgramData\Amazon\EC2-Windows\Launch\Config\DriveLetterMappingConfig.json` 文件。

1. 指定卷设置如下：

   ```
   {
   "driveLetterMapping": [
   	{
   	  "volumeName": "sample volume",
   	  "driveLetter": "H"
   	}]
   }
   ```

1. 保存更改并关闭文件。

1. 打开 Windows PowerShell 并使用以下命令来运行初始化磁盘的 EC2Launch v1 脚本：

   ```
   PS C:\>  C:\ProgramData\Amazon\EC2-Windows\Launch\Scripts\InitializeDisks.ps1
   ```

   要在每次实例启动时初始化磁盘，请添加 `-Schedule` 标记，如下所示：

   ```
   PS C:\>  C:\ProgramData\Amazon\EC2-Windows\Launch\Scripts\InitializeDisks.ps1 -Schedule
   ```

   EC2Launch v1 代理可以运行实例初始化脚本，例如 `initializeDisks.ps1` 与 `InitializeInstance.ps1` 脚本并行使用。如果 `InitializeInstance.ps1` 脚本重启实例，它可能会中断实例启动时运行的其他计划任务。为避免任何潜在的冲突，建议向 `initializeDisks.ps1` 脚本添加逻辑，以确保首先完成实例初始化。
**注意**  
如果 EC2Launch 脚本未初始化卷，请确保卷处于联机状态。如果卷处于脱机状态，请运行以下命令，使所有磁盘联机。  

   ```
   PS C:\> Get-Disk | Where-Object IsOffline -Eq $True | Set-Disk -IsOffline $False
   ```

## 将 EC2 Windows 实例启动至目录服务还原模式 (DSRM)


如果运行 Microsoft Active Directory 的实例遇到系统故障或其他关键问题，您可以通过启动至特殊版本的安全模式（称为*目录服务还原模式* (DSRM)）对该实例进行故障排除。在 DSRM 中，您可以修复或恢复 Active Directory。

### DSRM 的驱动程序支持


您启用 DSRM 和启动至实例的方式取决于实例正在运行的驱动程序。在 EC2 控制台中，您可以从系统日志查看实例的驱动程序版本详细信息。下表显示了 DSRM 支持的驱动程序。


| 驱动程序版本 | DSRM 是否支持？ | 后续步骤 | 
| --- | --- | --- | 
| Citrix PV 驱动程序 5.9 | 否 | 从备份还原实例。您无法启用 DSRM。 | 
| Amazon PV 7.2.0 | 否 | 尽管该驱动程序不支持 DSRM，但您仍可以将根卷从实例分离并为其创建快照或 AMI，然后将其作为辅助卷附加到同一个可用区中的其他实例。然后，您可以按照本部分的说明启用 DSRM。 | 
| Amazon PV 7.2.2 和更高版本 | 是 | 分离根卷，将其附加到其他实例，然后启用 DSRM (如本节中所述)。 | 
| 增强联网 | 是 | 分离根卷，将其附加到其他实例，然后启用 DSRM (如本节中所述)。 | 

有关如何启用增强联网的信息，请参阅 [在 EC2 实例上使用 ENA 启用增强联网功能](enhanced-networking-ena.md)。有关升级 Amazon PV 驱动程序的信息，请参阅[在 Windows 实例上升级半虚拟化驱动程序](Upgrading_PV_drivers.md)。

### 将实例配置为启动至 DSRM


在操作系统运行前，EC2 Windows 实例没有网络连接。因此，您无法通过按键盘上的 F8 键来选择启动选项。您必须使用以下过程之一将 EC2 Windows Server 实例启动至 DSRM。

如果您怀疑 Active Directory 已损坏，但该实例仍在运行，则可以使用 System Configuration 对话框或命令提示符将该实例配置为启动至 DSRM。

**使用 System Configuration 对话框将在线实例启动至 DSRM**

1. 在 **Run** 对话框中，键入 `msconfig` 并按下 Enter。

1. 选择 **Boot** 选项卡。

1. 在 **Boot options** 下，选择 **Safe boot**。

1. 选择 **Active Directory repair**，然后选择 **OK**。系统将提示您重新启动服务器。

**使用命令行将在线实例启动至 DSRM**  
从命令提示符窗口运行以下命令：

```
bcdedit /set safeboot dsrepair
```

如果某个实例处于离线状态并且无法访问，您必须先分离根卷并将其附加到其他实例才能启用 DSRM 模式。

**将离线实例启动至 DSRM**

1. 通过以下网址打开 Amazon EC2 控制台：[https://console.aws.amazon.com/ec2/](https://console.amazonaws.cn/ec2/)。

1. 在导航窗格中，选择 **Instances (实例)**。

1. 找到并选择受影响的实例。依次选择**实例状态**、**停止实例**。

1. 选择**启动实例**并在受影响实例所在的同一可用区中创建一个临时实例。选择使用其他 Windows 版本的实例类型。例如，如果实例是 Windows Server 2016，请选择 Windows Server 2019 实例。
**重要**  
如果您未在与受影响实例相同的可用区中创建该实例，则无法将受影响的实例的根卷附加到新实例。

1. 在导航窗格中，选择 **Volumes**。

1. 找到受影响的实例的根卷。[分离](https://docs.amazonaws.cn/ebs/latest/userguide/ebs-detaching-volume.html)该卷并将其[附加到](https://docs.amazonaws.cn/ebs/latest/userguide/ebs-attaching-volume.html)早先创建的临时实例。使用默认设备名称 (xvdf) 附加该卷。

1. 使用远程桌面连接临时实例，然后通过磁盘管理实用工具[使该卷可供使用](https://docs.amazonaws.cn/ebs/latest/userguide/ebs-using-volumes.html)。

1. 打开命令提示符窗口并运行以下命令。将 *D* 替换为您刚刚附加的辅助卷的实际驱动器号：

   ```
   bcdedit /store D:\Boot\BCD /set {default} safeboot dsrepair
   ```

1. 在磁盘管理实用工具中，选择您之前附加的驱动器，打开上下文（右键单击）菜单，然后选择**脱机**。

1. 在 EC2 控制台中，将受影响的卷从临时实例分离，然后将其重新附加到设备名称为 `/dev/sda1` 的原始实例。您必须指定此设备名称才能将卷指派为根卷。

1. [启动实例。](Stop_Start.md)

1. 在实例将健康检查传入 EC2 控制台后，使用远程桌面连接到实例，然后验证实例是否启动至 DSRM 模式。

1. (可选) 删除或停止您在本过程中创建的临时实例。

## 实例失去网络连接或计划的任务不按预期方式运行


如果您重新启动实例而该实例失去网络连接，则可能该实例的时间不正确。

默认情况下，Windows 实例使用协调世界时 (UTC)。如果将实例的时间设置为不同的时区，然后再重新启动实例，则时间会发生偏移，该实例暂时失去其 IP 地址。实例最终会重新获取网络连接，但这可能要用数小时的时间。实例重新获取网络连接所用的时间取决于 UTC 与其他时区之间的差异。

这种时间问题也可能导致计划的任务不如期运行。在这种情况下，计划的任务会因实例的时间不正确而不如期运行。

要持久使用 UTC 以外的时区，您必须设置 **RealTimeIsUniversal** 注册表项。若不设置此项，则实例会在重新启动后使用 UTC。

**解决造成网络连接丢失的时间问题**

1. 确保所运行的是建议的半虚拟化驱动程序。有关更多信息，请参阅 [在 EC2 Windows 实例上升级半虚拟化驱动程序](Upgrading_PV_drivers.md)。

1. 验证以下注册表项存在并且已设置为 `1`：**HKEY\$1LOCAL\$1MACHINE\$1SYSTEM\$1CurrentControlSet\$1Control\$1TimeZoneInformation\$1RealTimeIsUniversal**

## 无法获取控制台输出


对于 Windows 实例，实例控制台显示在 Windows 引导过程中执行的任务的输出。如果 Windows 成功启动，则最后记录的消息是 `Windows is Ready to use`。您也可以在控制台中显示事件日志消息，但根据您的 Windows 版本，此功能可能默认未启用。有关更多信息，请参阅 [Amazon EC2 Windows 实例上的 Windows 启动代理](configure-launch-agents.md)。

要使用 Amazon EC2 控制台获取您的实例的控制台输出，请选择实例，然后依次选择 **Actions (操作)**、**Monitor and troubleshoot (显示屏和问题排查)**、**Get System Log (获取系统日志)**。要使用命令行获取控制台输出，请使用以下命令之一：[get-console-output](https://docs.amazonaws.cn/cli/latest/reference/ec2/get-console-output.html) (Amazon CLI) 或 [Get-EC2ConsoleOutput](https://docs.amazonaws.cn/powershell/latest/reference/items/Get-EC2ConsoleOutput.html) (Amazon Tools for Windows PowerShell)。

对于运行 Windows Server 2012 R2 和更早版本的实例，如果控制台输出为空，则可能表示 EC2Config 服务出现问题（如未正确配置的配置文件），或者 Windows 无法正确引导。要修复该问题，请下载并安装最新版本的 EC2Config。有关更多信息，请参阅 [安装最新版的 EC2Config](UsingConfig_Install.md)。

## 网络上不可用的 Windows Server 2012 R2


有关对网络上不可用的 Windows Server 2012 R2 实例进行故障排除的信息，请参阅 [Windows Server 2012 R2 在实例重启后丢失网络和存储连接](pvdrivers-troubleshooting.md#server2012R2-instance-unavailable)。

## 磁盘签名冲突


您可以使用 [EC2Rescue for Windows Server](Windows-Server-EC2Rescue.md) 检查和解决磁盘签名冲突。或者，您可以通过执行以下步骤手动解决磁盘签名问题。
**警告**  
以下过程介绍了如何使用注册表编辑器编辑 Windows 注册表。如果您不熟悉 Windows 注册表或如何安全地使用注册表编辑器进行更改，请参阅[配置注册表](https://learn.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2008-R2-and-2008/cc725612(v=ws.11))。

1. 打开命令提示符，键入 **regedit.exe**，然后按 Enter。

1. 在 **Registry Editor (注册表编辑器)** 中，从上下文菜单（右键单击）中选择 **HKEY\$1LOCAL\$1MACHINE**，然后选择 **Find (查找)**。

1. 键入 **Windows Boot Manager**，然后选择 **Find Next (查找下一个)**。

1. 选择名为 `11000001` 的密钥。此密钥是您在上一步中找到的密钥的同级。

1. 在右侧窗格中，选择 `Element`，然后从上下文菜单（右键单击）中选择 **Modify (修改)**。

1. 找到数据中偏移 0x38 处的四字节磁盘签名。这是启动配置数据库签名 (BCD)。反转字节以创建磁盘签名，然后将其记录下来。例如，由以下数据表示的磁盘签名是 `E9EB3AA5`：

   ```
   ...
   0030  00 00 00 00 01 00 00 00
   0038  A5 3A EB E9 00 00 00 00
   0040  00 00 00 00 00 00 00 00
   ...
   ```

1. 在命令提示符窗口运行以下命令以启动 Microsoft DiskPart。

   ```
   diskpart
   ```

1. 运行 `select disk` DiskPart 命令，并为存在磁盘签名冲突的卷指定磁盘号。
**提示**  
要检查存在磁盘签名冲突的卷的磁盘号，请使用**磁盘管理**实用程序。打开命令提示符，键入 `compmgmt.msc`，然后按 **Enter** 键。在左侧导航面板中，双击**磁盘管理**。在**磁盘管理**实用程序中，检查存在磁盘签名冲突的脱机卷的磁盘号。

   ```
   DISKPART> select disk 1
   Disk 1 is now the selected disk.
   ```

1. 运行以下 DiskPart 命令以获取磁盘签名。

   ```
   DISKPART>  uniqueid disk
   Disk ID: 0C764FA8
   ```

1. 如果上一步中显示的磁盘签名与之前写下的磁盘签名不匹配，请使用以下 DiskPart 命令更改磁盘签名，使其匹配：

   ```
   DISKPART> uniqueid disk id=E9EB3AA5
   ```

# 重置 Amazon EC2 Windows 实例的 Windows 管理员密码
重置 Windows 管理员密码

如果因为 Windows 管理员密码丢失或过期而无法连接到 Amazon EC2 Windows 实例，则可以重置密码。

**注意**  
有一个自动应用重置本地管理员密码所需的手动步骤的 Amazon Systems Manager 自动化文档。有关更多信息，请参阅 *Amazon Systems Manager 用户指南*中的[在 Amazon EC2 实例上重置密码和 SSH 密钥](https://docs.amazonaws.cn/systems-manager/latest/userguide/automation-ec2reset.html)。

重置管理员密码的手动方法使用 EC2Launch v2、EC2Config 或 EC2Launch。
+ 对于包含 EC2Launch v2 代理的所有受支持的 Windows AMI，请使用 EC2Launch v2。
+ 对于 Windows Server 2016 之前的 Windows AMI，请使用 EC2Config 服务。
+ 对于 Windows Server 2016 及更高版本 AMI，请使用 EC2Launch 服务。

这些过程还描述了在丢失用于创建实例的密钥对时如何连接实例。Amazon EC2 使用公有密钥加密某个数据（如一个密码)，并使用私有密钥解密数据。公有和私有密钥被称为*密钥对*。对于 Windows 实例，您可以使用密钥对获得管理员密码，然后使用 RDP 登录实例。

**注意**  
如果您在实例上禁用了本地管理员账户，并且您的实例已配置为 Systems Manager，则还可以使用 EC2Rescue 和 Run Command 重新启用和重置本地管理员密码。有关更多信息，请参阅[将适用于 Windows Server 的 EC2Rescue 与 Systems Manager Run Command 配合使用](ec2rw-ssm.md)。

**Topics**
+ [

# 使用 EC2Launch v2 重置 EC2 实例的 Windows 管理员密码
](ResettingAdminPassword_EC2Launchv2.md)
+ [

# 使用 EC2Launch 重置 EC2 实例的 Windows 管理员密码
](ResettingAdminPassword_EC2Launch.md)
+ [

# 使用 EC2Config 重置 EC2 实例的 Windows 管理员密码
](ResettingAdminPassword_EC2Config.md)

# 使用 EC2Launch v2 重置 EC2 实例的 Windows 管理员密码
使用 EC2Launch v2 重置密码

如果您丢失了 Windows 管理员密码，并且正在使用包含 EC2Launch v2 代理的受支持的 Windows AMI，则可以使用 EC2Launch v2 生成新密码。

如果您使用的是不包含 EC2Launch v2 代理的 Windows Server 2016 或更高版本的 AMI，请参阅 [使用 EC2Launch 重置 EC2 实例的 Windows 管理员密码](ResettingAdminPassword_EC2Launch.md)。

如果您使用的是不包含 EC2Launch v2 代理的低于 Windows Server 2016 版本的 Windows Server AMI，请参阅 [使用 EC2Config 重置 EC2 实例的 Windows 管理员密码](ResettingAdminPassword_EC2Config.md)。

**注意**  
如果您在实例上禁用了本地管理员账户，并且您的实例已配置为 Systems Manager，则还可以使用 EC2Rescue 和 Run Command 重新启用和重置本地管理员密码。有关更多信息，请参阅[将适用于 Windows Server 的 EC2Rescue 与 Systems Manager Run Command 配合使用](ec2rw-ssm.md)。

**注意**  
有一个自动应用重置本地管理员密码所需的手动步骤的 Amazon Systems Manager 自动化文档。有关更多信息，请参阅 *Amazon Systems Manager 用户指南*中的[在 Amazon EC2 实例上重置密码和 SSH 密钥](https://docs.amazonaws.cn/systems-manager/latest/userguide/automation-ec2reset.html)。

要使用 EC2Launch v2 重置 Windows 管理员密码，需要执行以下操作：
+ [第 1 步：验证 EC2Launch v2 代理是否正在运行](#resetting-password-ec2launchv2-step1)
+ [步骤 2：从实例分离根卷](#resetting-password-ec2launchv2-step2)
+ [步骤 3：将卷附加到临时实例](#resetting-password-ec2launchv2-step3)
+ [步骤 4：删除 .run-once 文件](#resetting-password-ec2launchv2-step4)
+ [步骤 5：重启原始实例](#resetting-password-ec2launchv2-step5)

## 第 1 步：验证 EC2Launch v2 代理是否正在运行
验证 EC2Launch v2 代理是否正在运行

在尝试重置管理员密码之前，您需要首先验证 EC2Launch v2 代理已经安装并且正在运行。在本节后面的内容中，您将使用 EC2Launch v2 代理重置管理员密码。

**验证 EC2Launch v2 代理是否正在运行**

1. 通过以下网址打开 Amazon EC2 控制台：[https://console.aws.amazon.com/ec2/](https://console.amazonaws.cn/ec2/)。

1. 在导航窗格中，选择 **Instances (实例)**，然后选择要重置密码的实例。在本过程中，该实例称为*原始* 实例。

1. 依次选择 **Actions (操作)**、**Monitor and troubleshoot (监控和问题排查)**、**Get system log (获取系统日志)**。

1. 找到 EC2 Launch 条目，例如 **Launch: EC2Launch v2 service v2.0.124**。如果您看到此条目，则表示 EC2Launch v2 服务正在运行。

   如果系统日志输出为空，或者 EC2Launch v2 代理未运行，则使用实例控制台屏幕截图服务对实例进行问题排查。有关更多信息，请参阅 [捕获无法访问的实例的屏幕截图](troubleshoot-unreachable-instance.md#instance-console-screenshot)。

## 步骤 2：从实例分离根卷


如果存储密码的卷作为根卷附加到实例，则无法使用 EC2Launch v2 重置管理员密码。必须先从原始实例分离该卷，然后才能将其作为辅助卷附加到临时实例。

**从实例分离根卷**

1. 通过以下网址打开 Amazon EC2 控制台：[https://console.aws.amazon.com/ec2/](https://console.amazonaws.cn/ec2/)。

1. 在导航窗格中，选择 **Instances (实例)**。

1. 选择需要重置密码的实例，然后依次选择**实例状态**、**停止实例**。在实例的状态更改为 **Stopped (已停止)** 后，继续下一步。

1. （可选）如果您拥有在启动此实例时指定的私有密钥，请继续执行下一步。否则，请使用以下步骤将实例替换为使用新密钥对启动的新实例。

   1. 使用 Amazon EC2 控制台创建新的密钥对。要将新密钥对的名称设置为与丢失的私有密钥相同的名称，则必须先删除现有密钥对。

   1. 选择要替换的实例。请注意实例的实例类型、VPC、子网、安全组和 IAM 角色。

   1. 选择实例后，再依次选择**操作**、**映像和模板**、**创建映像**。键入映像名称和描述，然后选择 **Create Image (创建映像)**。

   1. 在导航窗格中，选择 **AMI**。等待映像状态变为**可用**。然后，选择映像并选择**从映像启动实例**。

   1. 完成字段以启动实例，并确保选择与要替换的实例相同的实例类型、VPC、子网、安全组和 IAM 角色，然后选择**启动**。

   1. 出现提示后，选择您为新实例创建的密钥对，然后选择**启动实例**。

   1. （可选）如果原始实例有关联的弹性 IP 地址，则请将其传输到新实例。如果原始实例除了根卷之外还有 EBS 卷，请将它们传输到新实例。

1. 按如下操作从原始实例分离根卷：

   1. 选择原始实例，然后选择**存储**选项卡。记下**根设备名称**下根设备的名称。在**块设备**下找到带有此设备名称的卷，并记下卷 ID。

   1. 在导航窗格中，选择 **Volumes**。

   1. 在卷列表中，选择记为根设备的卷，然后依次选择**操作**、**断开卷**。在卷状态更改为**可用**后，继续进行下一步操作。

1. 如果您创建了新实例来替换原始实例，则现在可立即终止原始实例。该原始实例已不再需要。对于本过程的其余部分，对原始实例的所有引用都将应用于您创建的新实例。

## 步骤 3：将卷附加到临时实例


接下来，启动一个临时实例，将卷作为辅助卷附加到该临时实例。这是用来修改配置文件的实例。

**启动临时实例并附加卷**

1. 启动临时实例，如下所示：

   1. 在导航窗格中，选择 **Instances (实例)**，然后选择 **Launch instances (启动实例)** 和 AMI。
**重要**  
要避免磁盘签名冲突，必须为不同版本的 Windows 选择 AMI。例如，如果原始实例运行 Windows Server 2019，则使用 Windows Server 2016 的基础 AMI 启动临时实例。

   1. 保留默认实例类型，然后选择 **Next: Configure Instance Details (下一步: 配置实例详细信息)**。

   1. 在 **Configure Instance Details (配置实例详细信息)** 页面上，为 **Subnet (子网)** 选择与原始实例相同的可用区，然后选择 **Review and Launch (审核和启动)**。
**重要**  
临时实例必须与原始实例位于同一可用区。如果您的临时实例位于不同的可用区中，则无法将原始实例的根卷附加到该实例。

   1. 在 **Review Instance Launch** 页面上，选择 **Launch**。

   1. 出现提示后，创建新的密钥对，将其下载到您计算机中的安全位置，然后选择 **Launch Instances (启动实例)**。

1. 将卷作为辅助卷附加到临时实例，如下所示：

   1. 在导航窗格中，选择 **Volumes (卷)**，选择从原始实例中分离的卷，然后依次选择 **Actions (操作)**、**Attach Volume (附加卷)**。

   1. 在 **Attach Volume (附加卷)** 对话框中，对于 **Instances (实例)**，开始键入临时实例的名称或 ID，然后从列表中选择实例。

   1. 对于 **Device (设备)**，键入 **xvdf**（如果尚未打开），然后选择 **Attach (附加)**。

## 步骤 4：删除 .run-once 文件


现在，您必须从附加到实例的脱机卷中删除 `.run-once` 文件。这将指示 EC2Launch v2 运行以 `once` 频率执行所有任务，其中包括设置管理员密码。您附加的辅助卷中的文件路径将类似于 `D:\ProgramData\Amazon\EC2Launch\state\.run-once`。

**删除 .run-once 文件**

1. 打开**磁盘管理**实用程序，按照以下说明使驱动器联机：[使 Amazon EBS 卷可供使用](https://docs.amazonaws.cn/ebs/latest/userguide/ebs-using-volumes.html)。

1. 在您联机的磁盘中找到 `.run-once` 文件。

1. 删除 .run-once 文件。

**重要**  
任何设置为运行一次的脚本都将由此操作触发。

## 步骤 5：重启原始实例


删除 `.run-once` 文件后，将卷作为根卷重新附加到原始实例，并使用其密钥对连接到该实例以检索管理员密码。

1. 按以下操作将卷重新附加到原始实例：

   1. 在导航窗格中，选择 **Volumes (卷)**，选择从临时实例中分离的卷，然后依次选择 **Actions (操作)**、**Attach Volume (附加卷)**。

   1. 在 **Attach Volume (附加卷)** 对话框中，对于 **Instances (实例)**，开始键入原始实例的名称或 ID，然后选择实例。

   1. 对于 **Device (设备)**，键入 **/dev/sda1**。

   1. 选择 **附加**。在卷状态更改为 `in-use` 后，继续进行下一步操作。

1. 在导航窗格中，选择 **Instances (实例)**。选择原始实例，然后依次选择 **Instance state (实例状态)**、**Start instance (启动实例)**。在实例状态更改为 `Running` 后，继续进行下一步操作。

1. 使用新密钥对的私有密钥会检索您的新 Windows 管理员密码，然后连接到实例。有关更多信息，请参阅 [使用 RDP 连接到 Windows 实例](connecting_to_windows_instance.md)。
**重要**  
实例在您停止并启动它后将获取一个新的公共 IP 地址。确保使用实例的当前公有 DNS 名称连接到实例。有关更多信息，请参阅 [Amazon EC2 实例状态更改](ec2-instance-lifecycle.md)。

1. （可选）如果您不再使用临时实例，可以将其终止。选择临时实例，然后依次选择 **Instance State (实例状态)** 和 **Terminate instance (终止实例)**。

# 使用 EC2Launch 重置 EC2 实例的 Windows 管理员密码
使用 EC2Launch 重置密码

如果丢失了 Windows 管理员密码并且使用的是 Windows Server 2016 或更高版本 AMI，可以使用 [EC2Rescue 工具](Windows-Server-EC2Rescue.md)（使用 EC2Launch 服务）生成新密码。

如果您使用的是不包含 EC2Launch v2 代理的 Windows Server 2016 或更高版本的 AMI，则可以使用 EC2Launch v2 生成新密码。

如果您使用的是 Windows Server 2016 之前的 Windows Server AMI，请参阅[使用 EC2Config 重置 EC2 实例的 Windows 管理员密码](ResettingAdminPassword_EC2Config.md)。

**警告**  
停止某个实例时，实例存储卷上的数据将会丢失。要保留这些数据，请将其备份到持久性存储中。

**注意**  
如果您在实例上禁用了本地管理员账户，并且您的实例已配置为 Systems Manager，则还可以使用 EC2Rescue 和 Run Command 重新启用和重置本地管理员密码。有关更多信息，请参阅[将适用于 Windows Server 的 EC2Rescue 与 Systems Manager Run Command 配合使用](ec2rw-ssm.md)。

**注意**  
有一个自动应用重置本地管理员密码所需的手动步骤的 Amazon Systems Manager 自动化文档。有关更多信息，请参阅 *Amazon Systems Manager 用户指南*中的[在 Amazon EC2 实例上重置密码和 SSH 密钥](https://docs.amazonaws.cn/systems-manager/latest/userguide/automation-ec2reset.html)。

要使用 EC2Launch 重置 Windows 管理员密码，需要执行以下操作：
+ [步骤 1：从实例分离根卷](#resetting-password-ec2launch-step1)
+ [步骤 2：将卷附加到临时实例](#resetting-password-ec2launch-step2)
+ [步骤 3：重置管理员密码](#resetting-password-ec2launch-step3)
+ [步骤 4：重启原始实例](#resetting-password-ec2launch-step4)

## 步骤 1：从实例分离根卷


如果存储密码的卷作为根卷附加到实例，则无法使用 EC2Launch 重置管理员密码。必须先从原始实例分离该卷，然后才能将其作为辅助卷附加到临时实例。

**从实例分离根卷**

1. 通过以下网址打开 Amazon EC2 控制台：[https://console.aws.amazon.com/ec2/](https://console.amazonaws.cn/ec2/)。

1. 在导航窗格中，选择 **Instances (实例)**。

1. 选择需要重置密码的实例，然后依次选择**实例状态**、**停止实例**。在实例的状态更改为 **Stopped (已停止)** 后，继续下一步。

1. （可选）如果您拥有在启动此实例时指定的私有密钥，请继续执行下一步。否则，请使用以下步骤将实例替换为使用新密钥对启动的新实例。

   1. 使用 Amazon EC2 控制台创建新的密钥对。要将新密钥对的名称设置为与丢失的私有密钥相同的名称，则必须先删除现有密钥对。

   1. 选择要替换的实例。请注意实例的实例类型、VPC、子网、安全组和 IAM 角色。

   1. 选择实例后，再依次选择**操作**、**映像和模板**、**创建映像**。键入映像名称和描述，然后选择 **Create Image (创建映像)**。

   1. 在导航窗格中，选择 **AMI**。等待映像状态变为**可用**。然后，选择映像并选择**从映像启动实例**。

   1. 完成字段以启动实例，并确保选择与要替换的实例相同的实例类型、VPC、子网、安全组和 IAM 角色，然后选择**启动**。

   1. 出现提示后，选择您为新实例创建的密钥对，然后选择**启动实例**。

   1. （可选）如果原始实例有关联的弹性 IP 地址，则请将其传输到新实例。如果原始实例除了根卷之外还有 EBS 卷，请将它们传输到新实例。

1. 按如下操作从原始实例分离根卷：

   1. 选择原始实例，然后选择**存储**选项卡。记下**根设备名称**下根设备的名称。在**块设备**下找到带有此设备名称的卷，并记下卷 ID。

   1. 在导航窗格中，选择 **Volumes**。

   1. 在卷列表中，选择记为根设备的卷，然后依次选择**操作**、**断开卷**。在卷状态更改为**可用**后，继续进行下一步操作。

1. 如果您创建了新实例来替换原始实例，则现在可立即终止原始实例。该原始实例已不再需要。对于本过程的其余部分，对原始实例的所有引用都将应用于您创建的新实例。

## 步骤 2：将卷附加到临时实例


接下来，启动一个临时实例，将卷作为辅助卷附加到该临时实例。这是用来运行 EC2Launch 的实例。

**启动临时实例并附加卷**

1. 启动临时实例，如下所示：

   1. 在导航窗格中，选择 **Instances (实例)**，然后选择 **Launch instances (启动实例)** 和 AMI。
**重要**  
要避免磁盘签名冲突，必须为不同版本的 Windows 选择 AMI。例如，如果原始实例运行 Windows Server 2019，则使用 Windows Server 2016 的基础 AMI 启动临时实例。

   1. 保留默认实例类型，然后选择 **Next: Configure Instance Details (下一步: 配置实例详细信息)**。

   1. 在 **Configure Instance Details (配置实例详细信息)** 页面上，为 **Subnet (子网)** 选择与原始实例相同的可用区，然后选择 **Review and Launch (审核和启动)**。
**重要**  
临时实例必须与原始实例位于同一可用区。如果您的临时实例位于不同的可用区中，则无法将原始实例的根卷附加到该实例。

   1. 在 **Review Instance Launch** 页面上，选择 **Launch**。

   1. 出现提示后，创建新的密钥对，将其下载到您计算机中的安全位置，然后选择 **Launch Instances (启动实例)**。

1. 将卷作为辅助卷附加到临时实例，如下所示：

   1. 在导航窗格中，选择 **Volumes (卷)**，选择从原始实例中分离的卷，然后依次选择 **Actions (操作)**、**Attach Volume (附加卷)**。

   1. 在 **Attach Volume (附加卷)** 对话框中，对于 **Instances (实例)**，开始键入临时实例的名称或 ID，然后从列表中选择实例。

   1. 对于 **Device (设备)**，键入 **xvdf**（如果尚未打开），然后选择 **Attach (附加)**。

## 步骤 3：重置管理员密码


接下来，连接到临时实例并使用 EC2Launch 重置管理员密码。

**重置管理员密码**

1. 连接到该临时实例并在该实例上使用 EC2Rescue for Windows Server 工具重置管理员密码，如下所示：

   1. 下载 [EC2Rescue for Windows Server](https://s3.amazonaws.com/ec2rescue/windows/EC2Rescue_latest.zip) zip 文件，提取内容，然后运行 **EC2Rescue.exe**。

   1. 在 **License Agreement (许可协议)** 屏幕上，阅读许可协议，如果您接受条款，请选择 **I Agree (我同意)**。

   1. 在 **Welcome to EC2Rescue for Windows Server (欢迎使用 EC2Rescue for Windows Server)** 屏幕上，选择 **Next (下一步)**。

   1. 在 **Select mode (选择模式)** 屏幕上，选择 **Offline instance (离线实例)**。

   1. 在 **Select a disk (选择磁盘)** 屏幕上，选择 **xvdf** 设备，然后选择 **Next (下一步)**。

   1. 确认所选磁盘并选择 **Yes**。

   1. 卷加载完成后，选择 **OK (确定)**。

   1. 在 **Select Offline Instance Option (选择离线实例选项)** 屏幕上，选择 **Diagnose and Rescue (诊断和抢救)**。

   1. 在 **Summary (摘要)** 屏幕上，查看信息，然后选择 **Next (下一步)**。

   1. 在 **Detected possible issues (检测到可能存在的问题)** 屏幕上，选择 **Reset Administrator Password (重置管理员密码)**，然后选择 **Next (下一步)**。

   1. 在 **Confirm (确认)** 屏幕上，选择 **Rescue (抢救)**，然后选择 **OK (确定)**。

   1. 在 **Done (完成)** 屏幕上，选择 **Finish (完成)**。

   1. 关闭 EC2Rescue for Windows Server 工具，断开与临时实例的连接，然后返回到 Amazon EC2 控制台。

1. 通过以下操作从临时实例分离辅助 (`xvdf`) 卷：

   1. 在导航窗格中，选择**实例**，然后选择临时实例。

   1. 在临时实例的 **Storage (存储)** 选项卡上，记下列为 ** xvdf ** 的 EBS 卷的 ID。

   1. 在导航窗格中，选择 **Volumes**。

   1. 在卷列表中，选择在上一步中记下的卷，然后依次选择**操作**、**断开卷**。在卷状态更改为**可用**后，继续进行下一步操作。

## 步骤 4：重启原始实例


使用 EC2Launch 重置管理员密码后，将卷作为根卷重新附加到原始实例，并使用其密钥对连接到实例以检索管理员密码。

**重启原始实例**

1. 按以下操作将卷重新附加到原始实例：

   1. 在导航窗格中，选择 **Volumes (卷)**，选择从临时实例中分离的卷，然后依次选择 **Actions (操作)**、**Attach Volume (附加卷)**。

   1. 在 **Attach Volume (附加卷)** 对话框中，对于 **Instances (实例)**，开始键入原始实例的名称或 ID，然后选择实例。

   1. 对于 **Device (设备)**，键入 **/dev/sda1**。

   1. 选择 **附加**。在卷状态更改为 `in-use` 后，继续进行下一步操作。

1. 在导航窗格中，选择 **Instances (实例)**。选择原始实例，然后依次选择 **Instance state (实例状态)**、**Start instance (启动实例)**。在实例状态更改为 `Running` 后，继续进行下一步操作。

1. 使用新密钥对的私有密钥会检索您的新 Windows 管理员密码，然后连接到实例。有关更多信息，请参阅 [使用 RDP 连接到 Windows 实例](connecting_to_windows_instance.md)。

1. （可选）如果您不再使用临时实例，可以将其终止。选择临时实例，然后依次选择 **Instance State (实例状态)** 和 **Terminate instance (终止实例)**。

# 使用 EC2Config 重置 EC2 实例的 Windows 管理员密码
使用 EC2Config 重置密码

如果您丢失了 Windows 管理员密码并且使用的是 Windows Server 2016 之前的 Windows AMI，则可以使用 EC2Config 代理生成新密码。

如果使用的是 Windows Server 2016 或更高版本 AMI，请参阅 [使用 EC2Launch 重置 EC2 实例的 Windows 管理员密码](ResettingAdminPassword_EC2Launch.md)，或者可以使用 [EC2Rescue 工具](Windows-Server-EC2Rescue.md)（使用 EC2Launch 服务）生成新密码。

**注意**  
如果您在实例上禁用了本地管理员账户，并且您的实例已配置为 Systems Manager，则还可以使用 EC2Rescue 和 Run Command 重新启用和重置本地管理员密码。有关更多信息，请参阅[将适用于 Windows Server 的 EC2Rescue 与 Systems Manager Run Command 配合使用](ec2rw-ssm.md)。

**注意**  
有一个自动应用重置本地管理员密码所需的手动步骤的 Amazon Systems Manager 自动化文档。有关更多信息，请参阅 *Amazon Systems Manager 用户指南*中的[在 Amazon EC2 实例上重置密码和 SSH 密钥](https://docs.amazonaws.cn/systems-manager/latest/userguide/automation-ec2reset.html)。

要使用 EC2Config 重置 Windows 管理员密码，需要执行以下操作：
+ [步骤 1：确认 EC2Config 服务正在运行](#resetting-password-ec2config-step1)
+ [步骤 2：从实例分离根卷](#resetting-password-ec2config-step2)
+ [步骤 3：将卷附加到临时实例](#resetting-password-ec2config-step3)
+ [步骤 4：修改配置文件](#resetting-password-ec2config-step4)
+ [步骤 5：重启原始实例](#resetting-password-ec2config-step5)

## 步骤 1：确认 EC2Config 服务正在运行
确认 EC2Config 服务正在运行

在尝试重置管理员密码之前，请确认已安装并运行 EC2Config 服务。在本节后面的内容中，您将使用 EC2Config 服务重置管理员密码。

**确认 EC2Config 服务正在运行**

1. 通过以下网址打开 Amazon EC2 控制台：[https://console.aws.amazon.com/ec2/](https://console.amazonaws.cn/ec2/)。

1. 在导航窗格中，选择 **Instances (实例)**，然后选择要重置密码的实例。在本过程中，该实例称为*原始* 实例。

1. 依次选择 **Actions (操作)**、**Monitor and troubleshoot (监控和问题排查)**、**Get system log (获取系统日志)**。

1. 找到 EC2 代理条目，例如，**EC2 Agent: Ec2Config service v3.18.1118**。如果您看到此条目，则 EC2Config 服务正在运行。

   如果系统日志输出为空，或者 EC2Config 服务未运行，则使用实例控制台屏幕快照截图服务对实例进行故障排除。有关更多信息，请参阅 [捕获无法访问的实例的屏幕截图](troubleshoot-unreachable-instance.md#instance-console-screenshot)。

## 步骤 2：从实例分离根卷


如果存储密码的卷作为根卷附加到实例，则无法使用 EC2Config 重置管理员密码。必须先从原始实例分离该卷，然后才能将其作为辅助卷附加到临时实例。

**从实例分离根卷**

1. 通过以下网址打开 Amazon EC2 控制台：[https://console.aws.amazon.com/ec2/](https://console.amazonaws.cn/ec2/)。

1. 在导航窗格中，选择 **Instances (实例)**。

1. 选择需要重置密码的实例，然后依次选择**实例状态**、**停止实例**。在实例的状态更改为 **Stopped (已停止)** 后，继续下一步。

1. （可选）如果您拥有在启动此实例时指定的私有密钥，请继续执行下一步。否则，请使用以下步骤将实例替换为使用新密钥对启动的新实例。

   1. 使用 Amazon EC2 控制台创建新的密钥对。要将新密钥对的名称设置为与丢失的私有密钥相同的名称，则必须先删除现有密钥对。

   1. 选择要替换的实例。请注意实例的实例类型、VPC、子网、安全组和 IAM 角色。

   1. 选择实例后，再依次选择**操作**、**映像和模板**、**创建映像**。键入映像名称和描述，然后选择 **Create Image (创建映像)**。

   1. 在导航窗格中，选择 **AMI**。等待映像状态变为**可用**。然后，选择映像并选择**从映像启动实例**。

   1. 完成字段以启动实例，并确保选择与要替换的实例相同的实例类型、VPC、子网、安全组和 IAM 角色，然后选择**启动**。

   1. 出现提示后，选择您为新实例创建的密钥对，然后选择**启动实例**。

   1. （可选）如果原始实例有关联的弹性 IP 地址，则请将其传输到新实例。如果原始实例除了根卷之外还有 EBS 卷，请将它们传输到新实例。

1. 按如下操作从原始实例分离根卷：

   1. 选择原始实例，然后选择**存储**选项卡。记下**根设备名称**下根设备的名称。在**块设备**下找到带有此设备名称的卷，并记下卷 ID。

   1. 在导航窗格中，选择 **Volumes**。

   1. 在卷列表中，选择记为根设备的卷，然后依次选择**操作**、**断开卷**。在卷状态更改为**可用**后，继续进行下一步操作。

1. 如果您创建了新实例来替换原始实例，则现在可立即终止原始实例。该原始实例已不再需要。对于本过程的其余部分，对原始实例的所有引用都将应用于您创建的新实例。

## 步骤 3：将卷附加到临时实例


接下来，启动一个临时实例，将卷作为辅助卷附加到该临时实例。这是用来修改配置文件的实例。

**启动临时实例并附加卷**

1. 启动临时实例，如下所示：

   1. 在导航窗格中，选择 **Instances (实例)**，然后选择 **Launch instances (启动实例)** 和 AMI。
**重要**  
要避免磁盘签名冲突，必须为不同版本的 Windows 选择 AMI。例如，如果原始实例运行 Windows Server 2019，则使用 Windows Server 2016 的基础 AMI 启动临时实例。

   1. 保留默认实例类型，然后选择 **Next: Configure Instance Details (下一步: 配置实例详细信息)**。

   1. 在 **Configure Instance Details (配置实例详细信息)** 页面上，为 **Subnet (子网)** 选择与原始实例相同的可用区，然后选择 **Review and Launch (审核和启动)**。
**重要**  
临时实例必须与原始实例位于同一可用区。如果您的临时实例位于不同的可用区中，则无法将原始实例的根卷附加到该实例。

   1. 在 **Review Instance Launch** 页面上，选择 **Launch**。

   1. 出现提示后，创建新的密钥对，将其下载到您计算机中的安全位置，然后选择 **Launch Instances (启动实例)**。

1. 将卷作为辅助卷附加到临时实例，如下所示：

   1. 在导航窗格中，选择 **Volumes (卷)**，选择从原始实例中分离的卷，然后依次选择 **Actions (操作)**、**Attach Volume (附加卷)**。

   1. 在 **Attach Volume (附加卷)** 对话框中，对于 **Instances (实例)**，开始键入临时实例的名称或 ID，然后从列表中选择实例。

   1. 对于 **Device (设备)**，键入 **xvdf**（如果尚未打开），然后选择 **Attach (附加)**。

## 步骤 4：修改配置文件


将卷作为辅助卷附加到临时实例后，修改配置文件中的 `Ec2SetPassword` 插件。

**修改配置文件**

1. 在临时实例中，修改辅助卷上的配置文件，如下所示：

   1. 启动并连接到临时实例。

   1. 按照以下说明使驱动器联机：[使 Amazon EBS 卷可用](https://docs.amazonaws.cn/ebs/latest/userguide/ebs-using-volumes.html)。

   1. 导航到辅助卷，使用文本编辑器 (如 Notepad) 打开 `\Program Files\Amazon\Ec2ConfigService\Settings\config.xml`。

   1. 在文件顶部，查找名为 `Ec2SetPassword` 的插件，如屏幕截图所示。将状态从 `Disabled` 更改为 `Enabled`，然后保存文件。  
![\[要更改的 Config.xml 文件区域\]](http://docs.amazonaws.cn/AWSEC2/latest/UserGuide/images/pwreset_config.png)

1. 修改配置文件后，按如下方式从临时实例分离辅助卷：

   1. 使用 **Disk Management (磁盘管理)** 实用工具，将该卷脱机。

   1. 断开与临时实例的连接，并返回 Amazon EC2 控制台。

   1. 在导航窗格中，选择**卷**，选择该卷，然后依次选择**操作**、**断开卷**。当卷的状态变为 **available** 之后，继续下一步操作。

## 步骤 5：重启原始实例


修改配置文件后，将卷作为根卷重新附加到原始实例，并使用其密钥对连接到该实例以检索管理员密码。

1. 按以下操作将卷重新附加到原始实例：

   1. 在导航窗格中，选择 **Volumes (卷)**，选择从临时实例中分离的卷，然后依次选择 **Actions (操作)**、**Attach Volume (附加卷)**。

   1. 在 **Attach Volume (附加卷)** 对话框中，对于 **Instances (实例)**，开始键入原始实例的名称或 ID，然后选择实例。

   1. 对于 **Device (设备)**，键入 **/dev/sda1**。

   1. 选择 **附加**。在卷状态更改为 `in-use` 后，继续进行下一步操作。

1. 在导航窗格中，选择 **Instances (实例)**。选择原始实例，然后依次选择 **Instance state (实例状态)**、**Start instance (启动实例)**。在实例状态更改为 `Running` 后，继续进行下一步操作。

1. 使用新密钥对的私有密钥会检索您的新 Windows 管理员密码，然后连接到实例。有关更多信息，请参阅 [使用 RDP 连接到 Windows 实例](connecting_to_windows_instance.md)。
**重要**  
实例在您停止并启动它后将获取一个新的公共 IP 地址。确保使用实例的当前公有 DNS 名称连接到实例。有关更多信息，请参阅 [Amazon EC2 实例状态更改](ec2-instance-lifecycle.md)。

1. （可选）如果您不再使用临时实例，可以将其终止。选择临时实例，然后依次选择 **Instance State (实例状态)** 和 **Terminate instance (终止实例)**。

# 排查 Amazon EC2 Windows 实例的 Sysprep 问题
排查 Sysprep 问题

如果在映像准备过程中遇到问题或收到错误消息，请查看以下日志。日志位置取决于您是使用 Sysprep 运行 EC2Config、EC2Launch v1 还是 EC2Launch v2。
+ `%WINDIR%\Panther\Unattendgc`（EC2Config、EC2Launch v1 和 EC2Launch v2）
+ `%WINDIR%\System32\Sysprep\Panther`（EC2Config、EC2Launch v1 和 EC2Launch v2）
+ `C:\Program Files\Amazon\Ec2ConfigService\Logs\Ec2ConfigLog.txt`（仅限 EC2Config）
+ `C:\ProgramData\Amazon\Ec2Config\Logs`（仅限 EC2Config）
+ `C:\ProgramData\Amazon\EC2-Windows\Launch\Log\EC2Launch.log`（仅限 EC2Launch v1）
+ `%ProgramData%\Amazon\EC2Launch\log\agent.log`（仅限 EC2Launch v2）

如果在使用 Sysprep 进行映像准备的过程中收到错误消息，则 OS 可能无法访问。要查看日志文件，您必须停止实例，将其根卷作为辅助卷附加到另一个运行状况良好的实例，然后在辅助卷上查看前述日志。如需详细了解如何通过名称辨别日志文件的用途，请参阅 Microsoft 文档中的 [Windows 设置相关日志文件](https://learn.microsoft.com/en-us/windows-hardware/manufacture/desktop/deployment-troubleshooting-and-log-files#windows-setup-related-log-files)。

如果在 Unattendgc 日志文件中找到错误，请使用 [Microsoft 错误查找工具](https://www.microsoft.com/en-us/download/details.aspx?id=100432)获取有关错误的更多详细信息。以下在 Unattendgc 日志文件中报告的问题通常是实例上一个或多个损坏的用户配置文件造成的：

```
Error [Shell Unattend] _FindLatestProfile failed (0x80070003) [gle=0x00000003]
Error [Shell Unattend] CopyProfile failed (0x80070003) [gle=0x00000003]
```

有两个选项可用于解决此问题：

**选项 1**

在实例上使用 Regedit 搜索以下项。验证已删除用户是否没有配置文件注册表项。

`[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\ProfileList\`

**选项 2**

1. 按如下方式编辑相关文件：
   + Windows Server 2012 R2 及更早版本 — 编辑 EC2Config 应答文件 (`C:\Program Files\Amazon\Ec2ConfigService\sysprep2008.xml`)。
   + Windows Server 2016 和 2019 – 编辑 unattend.xml 应答文件 (`C:\ProgramData\Amazon\EC2-Windows\Launch\Sysprep\Unattend.xml`)。
   + Windows Server 2022 – 编辑 unattend.xml 应答文件 (`C:\ProgramData\Amazon\EC2Launch\sysprep\unattend.xml`)。

1. 将 `<CopyProfile>true</CopyProfile>` 更改为 `<CopyProfile>false</CopyProfile>`。

1. 再次运行 Sysprep。请注意，此配置更改会在 Sysprep 完成之后删除内置管理员用户配置文件。

# 使用 EC2Rescue 对受损的 Amazon EC2 Linux 实例进行问题排查
适用于 Linux 实例的 EC2Rescue

EC2Rescue for Linux 是一种易于使用的开源工具，可在 Amazon EC2 Linux 实例上运行此工具以通过其包含 100 多个*模块*的库来诊断、排查和修复常见问题。模块是包含 BASH 或 Python 脚本以及必要元数据的 YAML 文件。

EC2Rescue for Linux 实例的一些通用使用案例包括：
+ 收集系统日志和软件包管理器日志
+ 收集资源利用率数据
+ 诊断和修复已知有问题的内核参数和常见 OpenSSH 问题

**注意**  
`AWSSupport-TroubleshootSSH` Amazon Systems Manager Automation 运行手册安装了 EC2Rescue for Linux，然后使用该工具检查或尝试修复阻止 SSH 连接到 Linux 实例的常见问题。有关更多信息，请参阅 [AWSSupport-TroubleshootSSH](https://docs.amazonaws.cn/systems-manager-automation-runbooks/latest/userguide/automation-awssupport-troubleshootssh.html)。

如果您使用的是 Windows 实例，则请参阅 [使用 EC2Rescue 对受损的 Amazon EC2 Windows 实例进行问题排查](Windows-Server-EC2Rescue.md)。

**Topics**
+ [安装 EC2Rescue](ec2rl_install.md)
+ [运行 EC2Rescue 命令](ec2rl_working.md)
+ [开发 EC2Rescue 模块](ec2rl_moduledev.md)

# 在 Amazon EC2 Linux 实例上安装 EC2Rescue
安装 EC2Rescue

EC2Rescue for Linux 工具可以安装在满足以下先决条件的 Amazon EC2 Linux 实例上。

**先决条件**
+ 支持的操作系统：
  + Amazon Linux 2
  + Amazon Linux 2016.09\$1
  + SUSE Linux Enterprise Server 12\$1
  + RHEL 7\$1
  + Ubuntu 16.04\$1
+ 软件要求：
  + Python 2.7.9\$1 或 3.2\$1

## 安装 EC2Rescue


`AWSSupport-TroubleshootSSH` 运行手册安装了 EC2Rescue for Linux，使用该工具检查或尝试修复阻止通过 SSH 远程连接到 Linux 计算机的常见问题。有关详细信息以及要运行此自动化，请参阅 [Amazon Web Services 支持-TroubleshootSSH](https://docs.amazonaws.cn/systems-manager-automation-runbooks/latest/userguide/automation-awssupport-troubleshootssh.html)。

如果您的系统具有所需的 Python 版本，可以安装标准构建过程。否则，您可以安装捆绑构建过程，其中包括 Python 的最小副本。

**安装标准构建过程**

1. 从正常工作的 Linux 实例下载 [EC2Rescue for Linux](https://s3.amazonaws.com/ec2rescuelinux/ec2rl.tgz) 工具：

1. （*可选*）验证 EC2Rescue for Linux 安装文件的签名。有关更多信息，请参阅 [（可选）验证 EC2Rescue for Linux 的签名](#ec2rl_verify)。

1. 下载 sha256 哈希文件：

1. 验证 tarball 的完整性：

   ```
   sha256sum -c ec2rl.tgz.sha256
   ```

1. 解压缩 tarball：

   ```
   tar -xzvf ec2rl.tgz
   ```

1. 通过列出帮助文件来验证安装：

   ```
   cd ec2rl-<version_number>
   ./ec2rl help
   ```

**安装捆绑构建过程**  
有关指向下载和限制列表的链接，请参阅 github 上的 [EC2Rescue for Linux](https://github.com/awslabs/aws-ec2rescue-linux/blob/master/README.md)。

## （可选）验证 EC2Rescue for Linux 的签名


下面是验证基于 Linux 的操作系统的 EC2Rescue for Linux 软件包是否有效的推荐过程。

当您从 Internet 下载应用程序时，我们建议您验证软件发行商的身份，并检查应用程序在发行后是否已遭更改或损坏。这会保护您免于安装含有病毒或其他恶意代码的应用程序版本。

如果您在执行本主题中的步骤后确定适用于 EC2Rescue for Linux 的软件已遭更改或损坏，请不要运行安装文件。否则，可联系 Amazon Web Services。

适用于基于 Linux 的操作系统的 EC2Rescue for Linux 文件是使用 GnuPG（安全数字签名的 Pretty Good Privacy 的开源式执行 (OpenPGP) 标准）进行签名的。GnuPG（也称为 GPG）通过数字签名进行身份验证和完整性检查。Amazon 发布了公有密钥和签名，可供您用于验证下载的 EC2Rescue for Linux 程序包。有关 PGP 和 GnuPG (GPG) 的更多信息，请访问 [https://www.gnupg.org/](https://www.gnupg.org/)。

第一步是与软件发行商建立信任。下载软件发行商的公有密钥，检查公有密钥的所有人是否真为其人，然后将该公有密钥添加到您的密钥环。密钥环是已知公有密钥的集合。验证公有密钥的真实性后，您可以使用它来验证应用程序的签名。

**Topics**
+ [

### 验证并导入公有密钥
](#ec2rl_authenticate)
+ [

### 验证软件包的签名
](#ec2rl_verify_signature)

### 验证并导入公有密钥


本流程的下一步是验证 EC2Rescue for Linux 公有密钥，并在 GPG 密钥环中将其添加为可信任密钥。

**验证并导入 EC2Rescue for Linux 公有密钥**

1. 在命令提示符处，使用以下命令获取我们的公共 GPG 生成密钥的副本：

1. 在保存 `ec2rl.key` 的目录中的命令提示符处，使用以下命令将 EC2Rescue for Linux 公有密钥导入密钥环：

   ```
   gpg2 --import ec2rl.key
   ```

   该命令返回的结果类似于下方内容：

   ```
   gpg: /home/ec2-user/.gnupg/trustdb.gpg: trustdb created
   gpg: key 2FAE2A1C: public key "ec2autodiag@amazon.com <EC2 Rescue for Linux>" imported
   gpg: Total number processed: 1
   gpg:               imported: 1  (RSA: 1)
   ```
**提示**  
如果您看到指示找不到该命令的错误，请使用 `apt-get install gnupg2`（基于 Debian 的 Linux）或 `yum install gnupg2`（基于 Red Hat 的 Linux）安装 GnuPG 实用程序。

### 验证软件包的签名


在安装 GPG 工具、验证并导入 EC2Rescue for Linux 公有密钥以及确认 EC2Rescue for Linux 公有密钥可信后，便可以验证 EC2Rescue for Linux 安装脚本的签名。

**验证 EC2Rescue for Linux 安装脚本签名**

1. 在命令提示符处，运行以下命令以下载安装脚本的签名文件：

1. 通过在保存 `ec2rl.tgz.sig` 和 EC2Rescue for Linux 安装文件的目录中的命令提示符处运行以下命令来验证签名。这两个文件都必须存在。

   ```
   gpg2 --verify ./ec2rl.tgz.sig
   ```

   输出应与以下内容类似：

   ```
   gpg: Signature made Thu 12 Jul 2018 01:57:51 AM UTC using RSA key ID 6991ED45
   gpg: Good signature from "ec2autodiag@amazon.com <EC2 Rescue for Linux>"
   gpg: WARNING: This key is not certified with a trusted signature!
   gpg:          There is no indication that the signature belongs to the owner.
   Primary key fingerprint: E528 BCC9 0DBF 5AFA 0F6C  C36A F780 4843 2FAE 2A1C
        Subkey fingerprint: 966B 0D27 85E9 AEEC 1146  7A9D 8851 1153 6991 ED45
   ```

   如果输出包含短语 `Good signature from "ec2autodiag@amazon.com <EC2 Rescue for Linux>"`，则意味着已成功验证签名，您可以继续运行 EC2Rescue for Linux 安装脚本。

   如果输出包含短语 `BAD signature`，则检查是否正确执行了此过程。如果您持续获得此响应，请联系 Amazon Web Services，而不要运行之前下载的安装文件。

下面是有关您可能看到的警告的详细信息：
+ **WARNING: This key is not certified with a trusted signature\$1 There is no indication that the signature belongs to the owner.**这表示您坚信自己拥有 EC2Rescue for Linux 的可信公有密钥的个人信任级别。理想情况下，您将前往 Amazon Web Services 办公室并亲自接收此密钥。但更常见的情况是，从网站下载此密钥。在这种情况下，该网站是 Amazon Web Services 网站。
+ **gpg2: no ultimately trusted keys found.** 这意味着您 (或您信任的其他人) 对特定密钥不是“绝对信任”。

有关更多信息，请参阅 [https://www.gnupg.org/](https://www.gnupg.org/)。

# 在 Amazon EC2 Linux 实例上运行 EC2Rescue 命令
运行 EC2Rescue 命令

EC2Rescue 是一个命令行工具。在 Linux 实例上安装 EC2Rescue 后，您可以通过运行 `./ec2rl help` 获得有关如何使用该工具的一般帮助。您可以通过运行 `./ec2rl list` 查看可用模块，也可以通过运行 `./ec2rl help module_name` 获得有关特定模块的帮助。

下面是您可以执行以便开始使用此工具的常见任务。

**Topics**
+ [

## 运行 EC2Rescue 模块
](#ec2rl_running_module)
+ [

## 上传 EC2Rescue 模块结果
](#ec2rl_uploading_results)
+ [

## 创建 Amazon EC2 Linux 实例的备份
](#ec2rl_creating_backups)

## 运行 EC2Rescue 模块


**运行所有 EC2Rescue 模块**  
使用 **./ec2rl run** 命令而不指定任何附加参数。有些模块需要根访问权限。如果您不是根用户，请在运行命令时使用 **sudo**。

```
./ec2rl run
```

**运行特定的 EC2Rescue 模块**  
使用 **./ec2rl run** 命令并为 `--only-modules` 指定要运行的模块的名称。有些模块需要*参数*才能使用。

```
./ec2rl run --only-modules=module_name --arguments
```

例如，要运行 **dig** 模块查询 `amazon.com` 域，请使用以下命令。

```
./ec2rl run --only-modules=dig --domain=amazon.com
```

**查看 EC2Rescue 模块的结果**  
运行该模块，然后查看 `cat /var/tmp/ec2rl/logfile_location` 中的日志文件。例如，可在以下位置找到 **dig** 模块的日志文件：

```
cat /var/tmp/ec2rl/timestamp/mod_out/run/dig.log
```

## 上传 EC2Rescue 模块结果


如果 Amazon Web Services 支持 请求 EC2Rescue 模块的结果，则可以使用 EC2Rescue 工具上传日志文件。您可以将结果上传到 Amazon Web Services 支持 提供的位置或您自己的 Amazon S3 存储桶。

**将结果上传到 Amazon Web Services 支持 提供的位置**  
使用 **./ec2rl upload** 命令。对于 `--upload-directory`，指定日志文件的位置。对于 `--support-url`，请指定 Amazon Web Services 支持 提供的 URL。

```
./ec2rl upload --upload-directory=/var/tmp/ec2rl/logfile_location --support-url="url_provided_by_aws_support"
```

**将结果上传到 Amazon S3 存储桶**  
使用 **./ec2rl upload** 命令。对于 `--upload-directory`，指定日志文件的位置。对于 `--presigned-url`，为 S3 存储桶指定预签名 URL。有关为 Amazon S3 生成预签名 URL 的更多信息，请参阅[使用预签名 URL 上传对象](https://docs.amazonaws.cn/AmazonS3/latest/userguide/PresignedUrlUploadObject.html)。

```
./ec2rl upload --upload-directory=/var/tmp/ec2rl/logfile_location --presigned-url="presigned_s3_url"
```

## 创建 Amazon EC2 Linux 实例的备份


您可以使用 EC2Rescue 通过创建 AMI 或创建其附加卷的快照来备份您的 Linux 实例。

**创建 AMI**  
使用 `./ec2rl run` 命令，并为 --`backup` 指定 `ami`。

```
./ec2rl run --backup=ami
```

**创建所有附加卷的多卷快照**  
使用 `./ec2rl run` 命令，并为 --`backup` 指定 `allvolumes`。

```
./ec2rl run --backup=allvolumes
```

**创建特定附加卷的快照**  
使用 `./ec2rl run` 命令，并为 --`backup` 指定要备份的卷的 ID。

```
./ec2rl run --backup=vol-01234567890abcdef
```

# 为 Amazon EC2 Linux 实例开发 EC2Rescue 模块
开发 EC2Rescue 模块

模块使用 YAML 编写，这是一种数据序列化标准。模块的 YAML 文件包括一个文档，用于表示模块及其属性。

## 添加模块属性


下表列出了可用的模块属性。


| 属性 | 说明 | 
| --- | --- | 
| name | 模块的名称。该名称长度应少于或等于 18 个字符。 | 
| 版本 | 模块的版本号。 | 
| 删除实例快照 | 模块的简短说明性标题。此值的长度应少于或等于 50 个字符。 | 
| helptext |  模块的详细说明。每一行的长度应少于或等于 75 个字符。如果模块使用必需或可选参数，请在 helptext 值中包括这些参数。 例如： <pre>helptext: !!str |<br />  Collect output from ps for system analysis<br />  Consumes --times= for number of times to repeat<br />  Consumes --period= for time period between repetition</pre> | 
| placement | 运行模块的阶段。支持的值： [\[See the AWS documentation website for more details\]](http://docs.amazonaws.cn/AWSEC2/latest/UserGuide/ec2rl_moduledev.html)  | 
| language | 编写模块代码使用的语言。支持的值： [\[See the AWS documentation website for more details\]](http://docs.amazonaws.cn/AWSEC2/latest/UserGuide/ec2rl_moduledev.html)  Python 代码必须同时兼容 Python 2.7.9\$1 和 Python 3.2\$1。   | 
| 修复 |  指示模块是否支持修正。支持的值为 `True` 或 `False`。 模块默认为 `False`（如果不存在），这使其成为那些不支持修正的模块的可选属性。  | 
| content | 整个脚本代码。 | 
| constraint | 包含限制值的对象的名称。 | 
| 域 | 说明如何分组或分类模块的描述符。所包括的模块组使用以下域： [\[See the AWS documentation website for more details\]](http://docs.amazonaws.cn/AWSEC2/latest/UserGuide/ec2rl_moduledev.html) | 
| class | 由模块执行的任务类型的描述符。所包括的模块组使用以下类： [\[See the AWS documentation website for more details\]](http://docs.amazonaws.cn/AWSEC2/latest/UserGuide/ec2rl_moduledev.html) | 
| distro | 此模块支持的 Linux 发行版的列表。所包含的模块组使用以下发行版： [\[See the AWS documentation website for more details\]](http://docs.amazonaws.cn/AWSEC2/latest/UserGuide/ec2rl_moduledev.html) | 
| 必需 | 模块从 CLI 选项使用的必需参数。 | 
| optional | 模块可使用的可选参数。 | 
| 软件 | 模块中使用的软件可执行文件。此属性用于指定默认情况下未安装的软件。EC2Rescue for Linux 逻辑在运行模块之前确保这些程序存在并且可执行。 | 
| 程序包 | 可执行文件的源软件包。此属性用于随软件提供软件包的详细信息，包括用于下载或者获取更多信息的 URL。 | 
| sudo | 指示运行模块是否需要根访问权限。 您无需在模块脚本中实施 sudo 检查。如果值为 true，则 EC2Rescue for Linux 逻辑仅在执行用户具有根访问权限时才运行模块。 | 
| perfimpact | 指示模块对其运行环境是否会产生重大性能影响。如果值为 true 并且没有 `--perfimpact=true` 参数，则跳过模块。 | 
| parallelexclusive | 指定需要互斥的程序。例如，所有指定“bpf”的模块以串行方式运行。 | 

## 设置环境变量


下表列出了可用的环境变量。


| 环境变量 | 说明 | 
| --- | --- | 
|  `EC2RL_CALLPATH`  | ec2rl.py 的路径。此路径可用于定位 lib 目录和使用分发的 Python 模块。 | 
|  `EC2RL_WORKDIR`  |  诊断工具的主 tmp 目录。 默认值：`/var/tmp/ec2rl`。 | 
|  `EC2RL_RUNDIR`  |  用于存储所有输出的目录。 默认值：`/var/tmp/ec2rl/<date&timestamp>`。  | 
|  `EC2RL_GATHEREDDIR`  |  用于放置收集的模块数据的根目录。 默认值:`/var/tmp/ec2rl/<date&timestamp>/mod_out/gathered/`。  | 
|  `EC2RL_NET_DRIVER`  |  为实例上第一个 (按照字母顺序排序) 非虚拟网络接口使用的驱动程序。 示例： [\[See the AWS documentation website for more details\]](http://docs.amazonaws.cn/AWSEC2/latest/UserGuide/ec2rl_moduledev.html)  | 
|  `EC2RL_SUDO`  |  如果 EC2Rescue for Linux 以根身份运行，则为 true；否则为 false。  | 
|  `EC2RL_VIRT_TYPE`  |  由实例元数据提供的虚拟化类型。 示例： [\[See the AWS documentation website for more details\]](http://docs.amazonaws.cn/AWSEC2/latest/UserGuide/ec2rl_moduledev.html)  | 
|  `EC2RL_INTERFACES`  |  系统上的接口枚举列表。该值为包含名称的字符串，例如 `eth0`、`eth1` 等。这通过 `functions.bash` 生成，仅对其来源模块可用。  | 

## 使用 YAML 语法


在您构建模块 YAML 文件时，应注意以下事项：
+ 三个连字符 (`---`) 表示文档的明确开始位置。
+ `!ec2rlcore.module.Module` 标签指示 YAML 分析器在从数据流创建对象时调用哪个构造函数。您可在 `module.py` 文件内部查找构造函数。
+ `!!str` 标签告知 YAML 解析器不尝试确定数据的类型，而是将内容解释为字符串文本。
+ 竖线字符 (`|`) 告知 YAML 解析器该值为文字类型的标量。在这种情况下，解析器包括所有空格。对于模块而言这非常重要，因为保留了缩进和换行字符。
+ YAML 标准缩进为两个空格，在下例中可以看到。请确保您为脚本保留了标准缩进 (例如，对于 Python 为四个空格)，然后在模块文件中将全部内容缩进两个空格。

## 模块示例


示例 1 (`mod.d/ps.yaml`)：

```
--- !ec2rlcore.module.Module
# Module document. Translates directly into an almost-complete Module object
name: !!str ps
path: !!str
version: !!str 1.0
title: !!str Collect output from ps for system analysis
helptext: !!str |
  Collect output from ps for system analysis
  Requires --times= for number of times to repeat
  Requires --period= for time period between repetition
placement: !!str run
package: 
  - !!str
language: !!str bash
content: !!str |
  #!/bin/bash
  error_trap()
  {
      printf "%0.s=" {1..80}
      echo -e "\nERROR:	"$BASH_COMMAND" exited with an error on line ${BASH_LINENO[0]}"
      exit 0
  }
  trap error_trap ERR

  # read-in shared function
  source functions.bash
  echo "I will collect ps output from this $EC2RL_DISTRO box for $times times every $period seconds."
  for i in $(seq 1 $times); do
      ps auxww
      sleep $period
  done
constraint:
  requires_ec2: !!str False
  domain: !!str performance
  class: !!str collect
  distro: !!str alami ubuntu rhel suse
  required: !!str period times
  optional: !!str
  software: !!str
  sudo: !!str False
  perfimpact: !!str False
  parallelexclusive: !!str
```

# 使用 EC2Rescue 对受损的 Amazon EC2 Windows 实例进行问题排查
EC2Rescue for Windows 实例

EC2Rescue for Windows Server 是一个易于使用的工具，可以在 Amazon EC2 Windows Server 实例上运行，以诊断和排查可能存在的问题。它不仅可以收集日志文件以及进行故障排除，还会主动搜索可能存在问题的区域，具有很高的价值。它甚至可以检查其他实例中的 Amazon EBS 根卷，并收集相关日志以对使用该卷的 Windows Server 实例进行故障排除。以下是 EC2Rescue 可以解决的一些常见问题：
+ 防火墙、远程桌面协议（RDP）或网络接口配置导致的实例连接问题
+ 停止错误、启动循环或注册表损坏导致的操作系统启动问题
+ 可能需要进行高级日志分析和问题排查的问题

EC2Rescue for Windows Server 有两个不同模块：
+ 一个是**数据收集器模块**，用于收集所有不同来源的数据
+ 一个是**分析器模块**，用于解析根据一系列预定义规则收集的数据，从而识别问题并提供建议

EC2Rescue for Windows Server 工具只能在运行 Windows Server 2012 及更高版本的 Amazon EC2 实例上运行。该工具启动后，将检查它是否正在 Amazon EC2 实例上运行。

**注意**  
`AWSSupport-ExecuteEC2Rescue` Amazon Systems Manager 自动化运行手册使用 EC2Rescue 工具进行问题排查，并尽可能修复指定 EC2 实例的常见连接问题。有关详细信息以及要运行此自动化，请参阅 [>AWSSupport-ExecuteEC2Rescue](https://docs.amazonaws.cn/systems-manager-automation-runbooks/latest/userguide/automation-awssupport-executeec2rescue.html)。

如果您使用的是 Linux 实例，则请参阅 [使用 EC2Rescue 对受损的 Amazon EC2 Linux 实例进行问题排查](Linux-Server-EC2Rescue.md)。

**Topics**
+ [使用 EC2Rescue GUI 进行问题排查](ec2rw-gui.md)
+ [使用 EC2Rescue CLI 进行问题排查](ec2rw-cli.md)
+ [使用 EC2Rescue 和 Systems Manager 进行问题排查](ec2rw-ssm.md)

# 使用 EC2Rescue GUI 对受损的 Windows 实例进行问题排查
使用 EC2Rescue GUI 进行问题排查

EC2Rescue for Windows Server 可以对**离线实例**执行以下分析：


| 选项 | 描述 | 
| --- | --- | 
| 诊断和抢救 | EC2Rescue for Windows Server 可以使用以下服务设置检测和解决问题： [\[See the AWS documentation website for more details\]](http://docs.amazonaws.cn/AWSEC2/latest/UserGuide/ec2rw-gui.html) [\[See the AWS documentation website for more details\]](http://docs.amazonaws.cn/AWSEC2/latest/UserGuide/ec2rw-gui.html) [\[See the AWS documentation website for more details\]](http://docs.amazonaws.cn/AWSEC2/latest/UserGuide/ec2rw-gui.html) [\[See the AWS documentation website for more details\]](http://docs.amazonaws.cn/AWSEC2/latest/UserGuide/ec2rw-gui.html) [\[See the AWS documentation website for more details\]](http://docs.amazonaws.cn/AWSEC2/latest/UserGuide/ec2rw-gui.html) [\[See the AWS documentation website for more details\]](http://docs.amazonaws.cn/AWSEC2/latest/UserGuide/ec2rw-gui.html) | 
| Restore | 执行以下操作之一： [\[See the AWS documentation website for more details\]](http://docs.amazonaws.cn/AWSEC2/latest/UserGuide/ec2rw-gui.html) | 
| 捕获日志 | 允许您捕获实例的日志，用于分析。 | 

EC2Rescue for Windows Server 可以从**活动实例和离线实例**收集以下数据：


| Item | 说明 | 
| --- | --- | 
| Event Log (事件日志) | 收集应用程序、系统和 EC2Config 事件日志。 | 
| 注册表 | 收集 SYSTEM 和 SOFTWARE Hive。 | 
| Windows 更新日志 | 收集 Windows 更新生成的日志文件。 在 Windows Server 2016 及更高版本中，日志以 Windows 事件跟踪 (ETW) 格式收集。 | 
| Sysprep 日志 | 收集 Windows 系统准备工具生成的日志文件。 | 
| 驱动程序安装日志 | 收集 Windows SetupAPI 日志 (setupapi.dev.log 和 setupapi.setup.log)。 | 
| 启动配置 | 收集 HKEY\$1LOCAL\$1MACHINE\$1BCD00000000 Hive。 | 
| 内存转储 | 收集实例上的所有内存转储文件。 | 
| EC2Config 文件 | 收集 EC2Config 服务生成的日志文件。 | 
| EC2Launch 文件 | 收集 EC2Launch 脚本生成的日志文件。 | 
| SSM Agent 文件 | 收集 SSM Agent 生成的日志文件和 Patch Manager 日志。 | 
| EC2 ElasticGPU 文件 | 收集与 Elastic GPU 相关的事件日志。 | 
| ECS | 收集与 Amazon ECS 相关的日志。 | 
| CloudEndure | 收集与 CloudEndure 代理相关的日志文件。 | 
| 适用于 MGN 或 DRS 日志文件的 Amazon Replication Agent | 收集与 Amazon Application Migration Service 或 Amazon Elastic Disaster Recovery相关的日志文件。 | 

EC2Rescue for Windows Server 可以从**活动实例**收集以下额外数据：


| Item | 说明 | 
| --- | --- | 
| 信息系统 | 收集 MSInfo32。 | 
| 组策略结果 | 收集组策略报告。 | 

## 分析离线实例


**Offline Instance** 选项在调试 Windows 实例的启动问题时很有用。

**在离线实例上执行操作**

1. 在正在运行的 Windows Server 实例上，下载 [EC2Rescue for Windows Server](https://s3.amazonaws.com/ec2rescue/windows/EC2Rescue_latest.zip?x-download-source=docs) 工具并提取文件。

   您可以运行以下 PowerShell 命令以下载 EC2Rescue，而无需更改 Internet Explorer 增强安全性配置 (ESC)：

   ```
   Invoke-WebRequest https://s3.amazonaws.com/ec2rescue/windows/EC2Rescue_latest.zip -OutFile $env:USERPROFILE\Desktop\EC2Rescue_latest.zip
   ```

   该命令将 EC2Rescue .zip 文件下载到当前登录用户的桌面中。
**注意**  
如果您在下载文件时收到错误，并且正在使用 Windows Server 2016 或更早的版本，则可能需要为 PowerShell 终端启用 TLS 1.2。可以使用以下命令为当前 PowerShell 会话启用 TLS 1.2，然后重试：  

   ```
   [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
   ```

1. 停止出现故障的实例 (如果目前尚未停止)。

1. 从出现故障的实例中分离 EBS 根卷，并将该卷附加到安装了 EC2Rescue for Windows Server 的正在运行的 Windows 实例。

1. 在正在运行的实例上运行 EC2Rescue for Windows Server 工具并选择**离线实例**。

1. 选择新装载卷的磁盘，并选择 **Next**。

1. 确认所选磁盘并选择 **Yes**。

1. 选择要执行的离线实例选项，并选择 **Next**。

EC2Rescue for Windows Server 工具会扫描该卷，并根据所选的日志文件收集故障排除信息。

## 收集来自活动实例的数据


您可以收集活动实例的日志和其他数据。

**收集来自活动实例的数据**

1. 连接到您的 Windows 实例。

1. 将 [EC2Rescue for Windows Server](https://s3.amazonaws.com/ec2rescue/windows/EC2Rescue_latest.zip?x-download-source=docs) 工具下载到您的 Windows 实例并提取文件。

   您可以运行以下 PowerShell 命令以下载 EC2Rescue，而无需更改 Internet Explorer 增强安全性配置 (ESC)：

   ```
   Invoke-WebRequest https://s3.amazonaws.com/ec2rescue/windows/EC2Rescue_latest.zip -OutFile $env:USERPROFILE\Desktop\EC2Rescue_latest.zip
   ```

   该命令将 EC2Rescue .zip 文件下载到当前登录用户的桌面中。
**注意**  
如果您在下载文件时收到错误，并且正在使用 Windows Server 2016 或更早的版本，则可能需要为 PowerShell 终端启用 TLS 1.2。可以使用以下命令为当前 PowerShell 会话启用 TLS 1.2，然后重试：  

   ```
   [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
   ```

1. 打开 EC2Rescue for Windows Server 应用程序并接受许可协议。

1. 选择 **Next**、**Current instance**、**Capture logs**。

1. 选择要收集的数据项，然后选择 **Collect...**。阅读警告并选择 **Yes** 以继续操作。

1. 选择 ZIP 文件的文件名和位置，然后选择 **Save**。

1. EC2Rescue for Windows Server 完成之后，选择**打开包含文件夹**查看 ZIP 文件。

1. 选择**结束**。

# 使用 EC2Rescue CLI 对受损的 Windows 实例进行问题排查
使用 EC2Rescue CLI 进行问题排查

利用 EC2Rescue for Windows Server 命令行界面 (CLI)，您可以编程方式运行 EC2Rescue for Windows Server 插件（称为“操作”）。

EC2Rescue for Windows Server 工具有两种执行模式：
+ **/online** — 这允许您对安装了 EC2Rescue for Windows Server 的实例执行操作（如收集日志文件）。
+ **/offline:<device\$1id>** — 这允许您对附加到单独的 Amazon EC2 Windows 实例（已安装 EC2Rescue for Windows Server）的脱机根卷执行操作。

将 [EC2Rescue for Windows Server](https://s3.amazonaws.com/ec2rescue/windows/EC2Rescue_latest.zip?x-download-source=docs) 工具下载到您的 Windows 实例并提取文件。您可以使用以下命令查看帮助文件：

```
EC2RescueCmd.exe /help
```

EC2Rescue for Windows Server 可对 Amazon EC2 Windows 实例执行下列操作：
+ [收集操作](#ec2rw-collect)
+ [救援行动](#ec2rw-rescue)
+ [还原操作](#ec2rw-restore)

## 收集操作


**注意**  
您可以收集所有日志、整个日志组或一个组中的单个日志。

EC2Rescue for Windows Server 可以从**活动实例和离线实例**收集以下数据。


| 日志组 | 可用日志 | 说明 | 
| --- | --- | --- | 
| all |  | 收集所有可用日志。 | 
| eventlog |  [\[See the AWS documentation website for more details\]](http://docs.amazonaws.cn/AWSEC2/latest/UserGuide/ec2rw-cli.html)  | 收集应用程序、系统和 EC2Config 事件日志。 | 
| memory-dump |  [\[See the AWS documentation website for more details\]](http://docs.amazonaws.cn/AWSEC2/latest/UserGuide/ec2rw-cli.html)  | 收集实例上的所有内存转储文件。 | 
| ec2config |  [\[See the AWS documentation website for more details\]](http://docs.amazonaws.cn/AWSEC2/latest/UserGuide/ec2rw-cli.html)  | 收集 EC2Config 服务生成的日志文件。 | 
| ec2launch |  [\[See the AWS documentation website for more details\]](http://docs.amazonaws.cn/AWSEC2/latest/UserGuide/ec2rw-cli.html)  | 收集 EC2Launch 脚本生成的日志文件。 | 
| ssm-agent |  [\[See the AWS documentation website for more details\]](http://docs.amazonaws.cn/AWSEC2/latest/UserGuide/ec2rw-cli.html)  | 收集 SSM Agent 生成的日志文件和 Patch Manager 日志。 | 
| sysprep | 'Log Files' | 收集 Windows 系统准备工具生成的日志文件。 | 
| driver-setup |  [\[See the AWS documentation website for more details\]](http://docs.amazonaws.cn/AWSEC2/latest/UserGuide/ec2rw-cli.html)  | 收集 Windows SetupAPI 日志 (setupapi.dev.log 和 setupapi.setup.log)。 | 
| registry |  [\[See the AWS documentation website for more details\]](http://docs.amazonaws.cn/AWSEC2/latest/UserGuide/ec2rw-cli.html)  | 收集 SYSTEM 和 SOFTWARE Hive。 | 
| egpu |  [\[See the AWS documentation website for more details\]](http://docs.amazonaws.cn/AWSEC2/latest/UserGuide/ec2rw-cli.html)  | 收集与 Elastic GPU 相关的事件日志。 | 
| boot-config | 'BCDEDIT Output' | 收集 HKEY\$1LOCAL\$1MACHINE\$1BCD00000000 Hive。 | 
| windows-update | 'Log Files' | 收集 Windows 更新生成的日志文件。 在 Windows Server 2016 及更高版本中，日志以 Windows 事件跟踪 (ETW) 格式收集。 | 
| cloudendure |  [\[See the AWS documentation website for more details\]](http://docs.amazonaws.cn/AWSEC2/latest/UserGuide/ec2rw-cli.html)  | 收集与 CloudEndure 代理相关的日志文件。 | 

EC2Rescue for Windows Server 可以从**活动实例**收集以下额外数据。


| 日志组 | 可用日志 | 说明 | 
| --- | --- | --- | 
| system-info | 'MSInfo32 Output' | 收集 MSInfo32。 | 
| gpresult | 'GPResult Output' |  收集组策略报告。  | 

可用选项如下：
+ **/output:<outputFilePath>** – 使用 zip 格式保存收集的日志文件所需的目标文件路径位置。
+ **/no-offline** – 离线模式下使用的可选属性。不会在完成操作后将卷设置为脱机。
+ **/no-fix-signature** – 离线模式下使用的可选属性。不会在完成操作后修复可能的磁盘签名冲突。

### 示例


以下示例使用的是 EC2Rescue for Windows Server CLI。

#### 在线模式示例


收集所有可用日志：

```
EC2RescueCmd /accepteula /online /collect:all /output:<outputFilePath>
```

仅收集特定日志组：

```
EC2RescueCmd /accepteula /online /collect:ec2config /output:<outputFilePath>
```

收集日志组中的单个日志：

```
EC2RescueCmd /accepteula /online /collect:'ec2config.Log Files,driver-setup.SetupAPI Log Files' /output:<outputFilePath>
```

#### 离线模式示例


从 EBS 卷收集所有可用日志。该卷按 device\$1id 值指定。

```
EC2RescueCmd /accepteula /offline:xvdf /collect:all /output:<outputFilePath>
```

仅收集特定日志组：

```
EC2RescueCmd /accepteula /offline:xvdf /collect:ec2config /output:<outputFilePath>
```

## 救援行动


EC2Rescue for Windows Server 可以使用以下服务设置检测和解决问题：


|  服务组  | 可用操作 |  说明  | 
| --- | --- | --- | 
| all |  |  | 
| system-time | 'RealTimeIsUniversal' | 系统时间[\[See the AWS documentation website for more details\]](http://docs.amazonaws.cn/AWSEC2/latest/UserGuide/ec2rw-cli.html) | 
| firewall |  [\[See the AWS documentation website for more details\]](http://docs.amazonaws.cn/AWSEC2/latest/UserGuide/ec2rw-cli.html)  |  Windows 防火墙 [\[See the AWS documentation website for more details\]](http://docs.amazonaws.cn/AWSEC2/latest/UserGuide/ec2rw-cli.html)  | 
| rdp |  [\[See the AWS documentation website for more details\]](http://docs.amazonaws.cn/AWSEC2/latest/UserGuide/ec2rw-cli.html)  |  远程桌面 [\[See the AWS documentation website for more details\]](http://docs.amazonaws.cn/AWSEC2/latest/UserGuide/ec2rw-cli.html)  | 
| ec2config |  [\[See the AWS documentation website for more details\]](http://docs.amazonaws.cn/AWSEC2/latest/UserGuide/ec2rw-cli.html)  |  EC2Config [\[See the AWS documentation website for more details\]](http://docs.amazonaws.cn/AWSEC2/latest/UserGuide/ec2rw-cli.html)  | 
| ec2launch | 'Reset Administrator Password' | 生成新的 Windows 管理员密码。 | 
| network | 'DHCP Service Startup' |  网络接口 [\[See the AWS documentation website for more details\]](http://docs.amazonaws.cn/AWSEC2/latest/UserGuide/ec2rw-cli.html)  | 

可用选项如下：
+ **/level:<level>** – 操作应触发的检查级别的可选属性。允许的值包括：`information`、`warning`、`error`、`all`。默认情况下，将它设置为 `error`。
+ **/check-only** – 可生成报告但不修改离线卷的可选属性。
**注意**  
如果 EC2Rescue for Windows Server 检测到可能存在磁盘签名冲突，则默认情况下，即使您使用 `/check-only` 选项，它也会在此离线过程完成后更正签名。必须使用 `/no-fix-signature` 选项才能阻止更正。
+ **/no-offline** – 可防止在完成操作之后将卷设置为离线的可选属性。
+ **/no-fix-signature** – 不会在完成操作后修复可能的磁盘签名冲突的可选属性。

### 救援示例


以下示例使用的是 EC2Rescue for Windows Server CLI。该卷是使用 device\$1id 值指定的。

尝试修复在卷上发现的所有问题：

```
EC2RescueCmd /accepteula /offline:xvdf /rescue:all
```

尝试修复卷上的一个服务组内的所有问题：

```
EC2RescueCmd /accepteula /offline:xvdf /rescue:firewall
```

尝试修复卷上的一个服务组内的特定项目：

```
EC2RescueCmd /accepteula /offline:xvdf /rescue:rdp.'Service Start'
```

指定在一个卷上要尝试修复的多个问题：

```
EC2RescueCmd /accepteula /offline:xvdf /rescue:'system-time.RealTimeIsUniversal,ec2config.Service Start'
```

## 还原操作


EC2Rescue for Windows Server 可以使用以下服务设置检测和解决问题：


|  服务组  | 可用操作 |  说明  | 
| --- | --- | --- | 
|  还原上次已知的正常配置  | lkgc | 上次已知的正常配置 – 尝试以上次已知的可启动状态启动实例。 | 
| 从最新备份还原 Windows 注册表 | regback | 从备份还原注册表 – 从 \$1Windows\$1System32\$1config\$1RegBack 还原注册表。 | 

可用选项如下：
+ **/no-offline** — 可防止在完成操作之后将卷设置为脱机的可选属性。
+ **/no-fix-signature** — 不会在完成操作后修复可能的磁盘签名冲突的可选属性。

### 还原示例


以下示例使用的是 EC2Rescue for Windows Server CLI。该卷是使用 device\$1id 值指定的。

在卷上还原上次已知的正常配置：

```
EC2RescueCmd /accepteula /offline:xvdf /restore:lkgc
```

在卷上还原上一个 Windows 注册表备份：

```
EC2RescueCmd /accepteula /offline:xvdf /restore:regback
```

# 使用 EC2Rescue 和 Systems Manager 对受损的 Windows 实例进行问题排查
使用 EC2Rescue 和 Systems Manager 进行问题排查

Amazon Web Services 支持 为您提供了 Systems Manager Run Command 文档，目的是与您启用了 Systems Manager 的实例交互来运行 EC2Rescue for Windows Server。Run Command 文档称为 `AWSSupport-RunEC2RescueForWindowsTool`。

此 Systems Manager Run Command 文档执行下列任务：
+ 下载并验证 EC2Rescue for Windows Server。
+ 导入 PowerShell 模块以使您与此工具的交互变得简单。
+ 使用提供的命令和参数运行 EC2RescueCmd。

Systems Manager Run Command 文档接受三个参数：
+ **命令** — EC2Rescue for Windows Server 操作。当前允许的值如下：
  + **ResetAccess** — 重置本地管理员密码。将会重置当前实例的本地管理员密码，并且随机生成的密码将会作为 `/EC2Rescue/Password/<INSTANCE_ID>` 安全地存储在 Parameter Store 中。如果您选择此操作并且不提供任何参数，则密码将自动使用默认的 KMS 密钥 密钥加密。（可选）可以在参数中指定 KMS 密钥 ID，以使用您自己的密钥来加密密码。
  + **CollectLogs** — 使用 `/collect:all` 操作运行 EC2Rescue for Windows Server。如果选择此操作，`Parameters` 必须包含将日志上传到的 Amazon S3 存储桶名称。
  + **FixAll** — 使用 `/rescue:all` 操作运行 EC2Rescue for Windows Server。如果您选择此操作，`Parameters` 必须包含要抢救的块储存设备名称。
+ **参数** — 要为指定命令传递的 PowerShell 参数。

## 要求


要运行 **ResetAccess** 操作，您的 Amazon EC2 实例必须附加策略，以授予将加密的密码写入 Parameter Store 的权限。附加策略后，请等待几分钟，然后再将此策略附加到相关 IAM 角色后尝试重置实例的密码。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "ssm:PutParameter"
      ],
      "Resource": [
        "arn:aws:ssm:us-east-1:111122223333:parameter/EC2Rescue/Passwords/<instanceid>"
      ]
    }
  ]
}
```

------

如果您使用的是自定义 KMS 密钥而不是默认 KMS 密钥，请使用此策略。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "ssm:PutParameter"
      ],
      "Resource": [
        "arn:aws:ssm:us-east-1:111122223333:parameter/EC2Rescue/Passwords/<instanceid>"
      ] 
    }, 
    { 
      "Effect": "Allow",
      "Action": [
        "kms:Encrypt"
      ],
      "Resource": [
        "arn:aws:kms:us-east-1:111122223333:key/<kmskeyid>"
      ]
    }
  ]
}
```

------

## 查看文档的 JSON
查看文档

以下过程介绍了如何查看此文档的 JSON。

**查看 Systems Manager Run Command 文档的 JSON**

1. 访问 [https://console.aws.amazon.com/systems-manager/](https://console.amazonaws.cn/systems-manager/)，打开 Amazon Systems Manager 控制台。

1. 在导航窗格中，展开**变更管理工具**，然后选择**文档**。

1. 在搜索栏中，输入 `AWSSupport-RunEC2RescueForWindowsTool`，然后选择 `AWSSupport-RunEC2RescueForWindowsTool` 文档。

1. 选择**内容**选项卡。

## 示例


下面是一些有关如何使用 Systems Manager Run Command 文档通过 Amazon CLI 运行 EC2Rescue for Windows Server 的示例。有关使用 Amazon CLI 发送命令的更多信息，请参阅 [send-command](https://docs.amazonaws.cn/cli/latest/reference/ssm/send-command.html)。

**Topics**
+ [

### 尝试修复脱机根卷上的所有已识别问题
](#ec2rw-ssm-exam1)
+ [

### 从当前 Amazon EC2 Windows 实例收集日志
](#ec2rw-ssm-exam2)
+ [

### 重置本地管理员密码
](#ec2rw-ssm-exam4)

### 尝试修复脱机根卷上的所有已识别问题


尝试修复在附加到 Amazon EC2 Windows 实例的脱机根卷上发现的所有问题：

```
aws ssm send-command --instance-ids "i-0cb2b964d3e14fd9f" --document-name "AWSSupport-RunEC2RescueForWindowsTool" --parameters "Command=FixAll, Parameters='xvdf'" --output text
```

### 从当前 Amazon EC2 Windows 实例收集日志


从当前的在线 Amazon EC2 Windows 实例收集所有日志并将日志上传到 Amazon S3 存储桶：

```
aws ssm send-command --instance-ids "i-0cb2b964d3e14fd9f" --document-name "AWSSupport-RunEC2RescueForWindowsTool" --parameters "Command=CollectLogs, Parameters='amzn-s3-demo-bucket'" --output text
```

### 重置本地管理员密码


下面的示例显示了可用于重置本地管理员密码的方法。输出提供了一个指向 Parameter Store 的链接，在那里您可以找到随机生成的安全密码，然后您可以使用它以本地管理员身份来 RDP 到您的 Amazon EC2 Windows 实例。

使用默认的 Amazon KMS key 密钥 alias/aws/ssm 重置联机实例的本地管理员密码：

```
aws ssm send-command --instance-ids "i-0cb2b964d3e14fd9f" --document-name "AWSSupport-RunEC2RescueForWindowsTool" --parameters "Command=ResetAccess" --output text
```

使用 KMS 密钥 重置联机实例的本地管理员密码：

```
aws ssm send-command --instance-ids "i-0cb2b964d3e14fd9f" --document-name "AWSSupport-RunEC2RescueForWindowsTool" --parameters "Command=ResetAccess, Parameters=a133dc3c-a2g4-4fc6-a873-6c0720104bf0" --output text
```

**注意**  
在此示例中，KMS 密钥 为 `a133dc3c-a2g4-4fc6-a873-6c0720104bf0`。

# 适用于实例的 EC2 Serial Console
EC2 Serial Console

使用 EC2 Serial Console，您可以访问 Amazon EC2 实例的串行端口，通过该端口可以排查启动、网络配置和其他方面的问题。串行控制台不要求您的实例拥有任何联网功能。使用串行控制台，您可以向实例输入命令，就像键盘和显示器直接连接到实例的串行端口一样。串行控制台会话在实例重启和停止期间持续存在。在重新启动过程中，您可以从一开始就查看所有引导消息。

默认情况下，对串行控制台的访问权限不可用。您的组织必须授予账户对串行控制台的访问权限，并配置 IAM policy 以授予用户对串行控制台的访问权限。通过使用实例 ID、资源标签和其他 IAM 操作，可以精细地控制串行控制台访问。有关更多信息，请参阅[配置对 EC2 Serial Console 的访问](configure-access-to-serial-console.md)。

串行控制台可使用 EC2 控制台或 Amazon CLI 访问。

串行控制台不会产生额外的成本。

**Topics**
+ [

# EC2 Serial Console 的先决条件
](ec2-serial-console-prerequisites.md)
+ [

# 配置对 EC2 Serial Console 的访问
](configure-access-to-serial-console.md)
+ [

# 连接到 EC2 Serial Console
](connect-to-serial-console.md)
+ [

# 断开与 EC2 Serial Console 的连接
](disconnect-serial-console-session.md)
+ [

# 使用 EC2 Serial Console 对 Amazon EC2 实例进行故障排查
](troubleshoot-using-serial-console.md)

# EC2 Serial Console 的先决条件
先决条件

**Topics**
+ [

## Amazon Web Services 区域
](#sc-prereqs-regions)
+ [

## Wavelength 区域和 Amazon Outposts
](#sc-prereqs-wavelength-zones-outposts)
+ [

## Local Zones
](#sc-prereqs-local-zones)
+ [

## 实例类型
](#sc-prereqs-instance-types)
+ [

## 授予访问权限
](#sc-prereqs-configure-ec2-serial-console)
+ [

## 支持基于浏览器的客户端
](#sc-prereqs-for-browser-based-connection)
+ [

## 实例状态
](#sc-prereqs-instance-state)
+ [

## Amazon EC2 Systems Manager
](#sc-prereqs-ssm)
+ [

## 配置您选择的故障排除工具
](#sc-prereqs-configure-troubleshooting-tool)

## Amazon Web Services 区域


在除亚太地区（台北）之外的所有 Amazon Web Services 区域中都受支持。

## Wavelength 区域和 Amazon Outposts


不支持。

## Local Zones


在所有 Local Zones 中支持。

## 实例类型


支持的实例类型：
+ **Linux**
  + 基于 Nitro 系统构建的所有虚拟化实例。
  + 所有裸机实例，以下项除外：
    + 通用：`a1.metal`、`mac1.metal`、`mac2.metal`
    + 加速计算：`g5g.metal`
    + 内存优化型：`u-6tb1.metal`、`u-9tb1.metal`、`u-12tb1.metal`、`u-18tb1.metal`、`u-24tb1.metal`
+ **Windows**

  基于 Nitro 系统构建的所有虚拟化实例。不支持裸机实例。

## 授予访问权限


您必须完成配置任务才能授予对 EC2 Serial Console 的访问权限。有关更多信息，请参阅 [配置对 EC2 Serial Console 的访问](configure-access-to-serial-console.md)。

## 支持基于浏览器的客户端


如需[使用基于浏览器的客户端](connect-to-serial-console.md#sc-connect-browser-based-client)连接至串行控制台，您的浏览器必须支持 WebSocket。如果您的浏览器不支持 WebSocket，请[使用您自己的密钥和 SSH 客户端](connect-to-serial-console.md#sc-connect-SSH)连接至串行控制台。

## 实例状态


必须是 `running`。

如果实例处于 `pending`、`stopping`、`stopped`、`shutting-down` 或 `terminated` 状态，则无法连接到串行控制台。

有关实例状态的更多信息，请参阅 [Amazon EC2 实例状态更改](ec2-instance-lifecycle.md)。

## Amazon EC2 Systems Manager


如果实例使用 Amazon EC2 Systems Manager，则必须在实例上安装 SSM Agent 3.0.854.0 版或更高版本。有关 SSM Agent 的更多信息，请参阅《*Amazon Systems Manager 用户指南*》中的[使用 SSM Agent](https://docs.amazonaws.cn/systems-manager/latest/userguide/ssm-agent.html)。

## 配置您选择的故障排除工具


要使用串行控制台对 Windows 实例进行故障排除，在 Linux 实例上可以使用 GRUB 或 SysRq，在 Windows 实例上可使用特殊管理控制台（SAC）。您必须先在要使用这些工具的每个实例上执行配置步骤，然后才可以使用这些工具。

请使用适用于实例操作系统的说明，配置您选择的故障排除工具。

### （Linux 实例）配置 GRUB


要配置 GRUB，请根据用于启动实例的 AMI 选择以下程序之一。

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

**在 Amazon Linux 2 实例上配置 GRUB**

1. [使用 SSH 连接到 Linux 实例](connect-to-linux-instance.md)

1. 在 `/etc/default/grub` 中添加或更改以下选项：
   + 设置 `GRUB_TIMEOUT=1`。
   + 添加 `GRUB_TERMINAL="console serial"`。
   + 添加 `GRUB_SERIAL_COMMAND="serial --speed=115200"`。

   以下是 `/etc/default/grub` 的示例。您可能需要根据系统设置更改配置。

   ```
   GRUB_CMDLINE_LINUX_DEFAULT="console=tty0 console=ttyS0,115200n8 net.ifnames=0 biosdevname=0 nvme_core.io_timeout=4294967295 rd.emergency=poweroff rd.shell=0"
   GRUB_TIMEOUT=1
   GRUB_DISABLE_RECOVERY="true"
   GRUB_TERMINAL="console serial"
   GRUB_SERIAL_COMMAND="serial --speed=115200"
   ```

1. 运行以下命令以应用更新后的配置。

   ```
   [ec2-user ~]$ sudo grub2-mkconfig -o /boot/grub2/grub.cfg
   ```

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

**在 Ubuntu 实例上配置 GRUB**

1. [连接到您的实例](connect-to-linux-instance.md)。

1. 在 `/etc/default/grub.d/50-cloudimg-settings.cfg` 中添加或更改以下选项：
   + 设置 `GRUB_TIMEOUT=1`。
   + 添加 `GRUB_TIMEOUT_STYLE=menu`。
   + 添加 `GRUB_TERMINAL="console serial"`。
   + 删除 `GRUB_HIDDEN_TIMEOUT`。
   + 添加 `GRUB_SERIAL_COMMAND="serial --speed=115200"`。

   以下是 `/etc/default/grub.d/50-cloudimg-settings.cfg` 的示例。您可能需要根据系统设置更改配置。

   ```
   # Cloud Image specific Grub settings for Generic Cloud Images
   # CLOUD_IMG: This file was created/modified by the Cloud Image build process
   
   # Set the recordfail timeout
   GRUB_RECORDFAIL_TIMEOUT=0
   
   # Do not wait on grub prompt
   GRUB_TIMEOUT=1
   GRUB_TIMEOUT_STYLE=menu
   
   # Set the default commandline
   GRUB_CMDLINE_LINUX_DEFAULT="console=tty1 console=ttyS0 nvme_core.io_timeout=4294967295"
   
   # Set the grub console type
   GRUB_TERMINAL="console serial"
   GRUB_SERIAL_COMMAND="serial --speed 115200"
   ```

1. 运行以下命令以应用更新后的配置。

   ```
   [ec2-user ~]$ sudo update-grub
   ```

------
#### [ RHEL ]

**在 RHEL 实例上配置 GRUB**

1. [连接到您的实例](connect-to-linux-instance.md)。

1. 在 `/etc/default/grub` 中添加或更改以下选项：
   + 删除 `GRUB_TERMINAL_OUTPUT`。
   + 添加 `GRUB_TERMINAL="console serial"`。
   + 添加 `GRUB_SERIAL_COMMAND="serial --speed=115200"`。

   以下是 `/etc/default/grub` 的示例。您可能需要根据系统设置更改配置。

   ```
   GRUB_TIMEOUT=1
   GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
   GRUB_DEFAULT=saved
   GRUB_DISABLE_SUBMENU=true
   GRUB_CMDLINE_LINUX="console=tty0 console=ttyS0,115200n8 net.ifnames=0 rd.blacklist=nouveau nvme_core.io_timeout=4294967295 crashkernel=auto"
   GRUB_DISABLE_RECOVERY="true"
   GRUB_ENABLE_BLSCFG=true
   GRUB_TERMINAL="console serial"
   GRUB_SERIAL_COMMAND="serial --speed=115200"
   ```

1. 运行以下命令以应用更新后的配置。

   ```
   [ec2-user ~]$ sudo grub2-mkconfig -o /boot/grub2/grub.cfg --update-bls-cmdline
   ```

   对于 RHEL 9.2 及更早版本，请使用以下命令。

   ```
   [ec2-user ~]$ sudo grub2-mkconfig -o /boot/grub2/grub.cfg
   ```

------
#### [ CentOS ]

对于使用 CentOS AMI 启动的实例，默认情况下为串行控制台配置了 GRUB。

以下是 `/etc/default/grub` 的示例。根据您的系统设置，您的配置可能会有所不同。

```
GRUB_TIMEOUT=1
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL="serial console"
GRUB_SERIAL_COMMAND="serial --speed=115200"
GRUB_CMDLINE_LINUX="console=tty0 crashkernel=auto console=ttyS0,115200"
GRUB_DISABLE_RECOVERY="true"
```

------

### （Linux 实例）配置 SysRq


要配置 SysRq，请在当前引导周期中启用 SysRq 命令。要使配置永久化，您还可以为后续引导启用 SysRq 命令。

**为当前引导周期启用所有 SysRq 命令**

1. [连接到您的实例](connect-to-linux-instance.md)。

1. 运行以下命令。

   ```
   [ec2-user ~]$ sudo sysctl -w kernel.sysrq=1
   ```

   下次重新启动时将会清除此设置。

**为后续引导启用所有 SysRq 命令**

1. 创建文件 `/etc/sysctl.d/99-sysrq.conf` 并在您收藏的编辑器中打开。

   ```
   [ec2-user ~]$ sudo vi /etc/sysctl.d/99-sysrq.conf
   ```

1. 添加以下行。

   ```
   kernel.sysrq=1
   ```

1. 重启实例以应用更改。

   ```
   [ec2-user ~]$ sudo reboot
   ```

1. 在 `login` 提示符下，输入您[之前设置](configure-access-to-serial-console.md#set-user-password)的、基于密码的用户的用户名，然后按 **Enter** 键。

1. 在 `Password` 提示符下，输入密码，然后按 **Enter** 键。

### （Windows 实例）启用 SAC 和启动菜单


**注意**  
如果您在实例上启用 SAC，则依赖密码检索的 EC2 服务将无法通过 Amazon EC2 控制台运行。Amazon EC2 启动代理（EC2Config、EC2Launch v1 和 EC2Launch v2）上的 Windows 依靠串行控制台来执行各种任务。当您在实例上启用 SAC 时，这些任务不会成功执行。有关 Amazon EC2 启动代理上的 Windows 的更多信息，请参阅 [配置您的 Amazon EC2 Windows 实例](ec2-windows-instances.md)。如果您启用 SAC，则可在之后将其禁用。有关更多信息，请参阅 [禁用 SAC 和启动菜单](troubleshoot-using-serial-console.md#disable-sac-bootmenu)。

使用以下方法之一在实例上启用 SAC 和启动菜单。

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

**在 Windows 实例上启用 SAC 和启动菜单**

1. [连接到](connecting_to_windows_instance.md)您的实例并从提升的 PowerShell 命令行执行以下步骤。

1. 启用 SAC。

   ```
   bcdedit /ems '{current}' on
   bcdedit /emssettings EMSPORT:1 EMSBAUDRATE:115200
   ```

1. 启用启动菜单。

   ```
   bcdedit /set '{bootmgr}' displaybootmenu yes
   bcdedit /set '{bootmgr}' timeout 15
   bcdedit /set '{bootmgr}' bootems yes
   ```

1. 重新启动实例以应用更新后的配置。

   ```
   shutdown -r -t 0
   ```

------
#### [ Command prompt ]

**在 Windows 实例上启用 SAC 和启动菜单**

1. [连接到](connecting_to_windows_instance.md)您的实例并从命令提示符执行以下步骤。

1. 启用 SAC。

   ```
   bcdedit /ems {current} on
   bcdedit /emssettings EMSPORT:1 EMSBAUDRATE:115200
   ```

1. 启用启动菜单。

   ```
   bcdedit /set {bootmgr} displaybootmenu yes
   bcdedit /set {bootmgr} timeout 15
   bcdedit /set {bootmgr} bootems yes
   ```

1. 重新启动实例以应用更新后的配置。

   ```
   shutdown -r -t 0
   ```

------

# 配置对 EC2 Serial Console 的访问


要配置对串行控制台的访问权限，您必须在账户级别授予串行控制台访问权限，然后配置 IAM policy 以向用户授予访问权限。对于 Linux 实例，您还必须在每个实例上配置基于密码的用户，以使您的用户能够使用串行控制台进行问题排查。

EC2 Serial Console 使用虚拟串行端口连接与实例进行交互。此连接独立于实例 VPC，因此即使出现引导故障或网络配置问题，您仍可以使用实例操作系统和运行故障排除工具。由于此连接在 VPC 网络之外，因此 EC2 Serial Console 不使用实例安全组或子网网络 ACL 来授权实例的流量。

**开始前的准备工作**  
验证是否满足[先决条件](ec2-serial-console-prerequisites.md)。

**Topics**
+ [

## EC2 Serial Console 的访问级别
](#serial-console-access-levels)
+ [

## 管理账户对 EC2 Serial Console 的访问权限
](#serial-console-account-access)
+ [

## 为 EC2 Serial Console 访问配置 IAM policy
](#serial-console-iam)
+ [

## 在 Linux 实例上设置操作系统用户密码
](#set-user-password)

## EC2 Serial Console 的访问级别
访问级别

默认情况下，在账户级别无法访问串行控制台。您需要在账户级别明确授予对串行控制台的访问权限。有关更多信息，请参阅[管理账户对 EC2 Serial Console 的访问权限](#serial-console-account-access)。

您可以使用服务控制策略 (SCP) 来允许在组织内访问串行控制台。然后，您可以使用 IAM policy 控制访问，从而在用户级别实现精确的访问控制。通过使用 SCP 和 IAM policy 的组合，您可以对串行控制台进行不同级别的访问控制。

**组织级别**  
您可以使用服务控制策略 (SCP) 来允许组织内的成员账户访问串行控制台。有关 SCP 的更多信息，请参阅 *Amazon Organizations 用户指南*中的[服务控制策略](https://docs.amazonaws.cn/organizations/latest/userguide/orgs_manage_policies_scps.html)。

**实例级别**  
您可以通过使用 IAM PrincipalTag 和 ResourceTag 构造以及通过其 ID 指定实例，来配置串行控制台访问策略。有关更多信息，请参阅 [为 EC2 Serial Console 访问配置 IAM policy](#serial-console-iam)。

**用户级别**  
您可以通过配置 IAM policy 以允许或拒绝指定用户将 SSH 公钥推送到特定实例的串行控制台服务的权限，来配置用户级别的访问权限。有关更多信息，请参阅 [为 EC2 Serial Console 访问配置 IAM policy](#serial-console-iam)。

**操作系统级别**（仅限 Linux 实例）  
您可以在访客操作系统级别设置用户密码。这为某些使用案例提供了对串行控制台的访问权限。但是，要监控日志，您不需要基于密码的用户。有关更多信息，请参阅[在 Linux 实例上设置操作系统用户密码](#set-user-password)。

## 管理账户对 EC2 Serial Console 的访问权限
管理账户访问权限

默认情况下，在账户级别无法访问串行控制台。您需要在账户级别明确授予对串行控制台的访问权限。

此设置是在账户级别配置，可以直接在账户中配置，也可以使用声明式策略进行配置。必须在要授予串行控制台访问权限的每个 Amazon Web Services 区域中配置该设置。使用声明式策略可同时将设置应用于多个区域，也可以同时应用于多个账户。当使用声明式策略时，您无法直接在账户中修改设置。本主题介绍如何直接在账户中配置设置。有关使用声明式策略的信息，请参阅《Amazon Organizations User Guide》**中的 [Declarative policies](https://docs.amazonaws.cn/organizations/latest/userguide/orgs_manage_policies_declarative.html)。

**Contents**
+ [

### 授予用户账户访问管理权限
](#sc-account-access-permissions)
+ [

### 查看账户对串行控制台的访问权限状态
](#sc-view-account-access)
+ [

### 授予账户访问串行控制台的权限。
](#sc-grant-account-access)
+ [

### 拒绝账户访问串行控制台
](#sc-deny-account-access)

### 授予用户账户访问管理权限


要允许用户管理对 EC2 Serial Console 的账户访问权限，您需要授予其所需的 IAM 权限。

以下策略授予查看账户状态以及允许和阻止账户访问 EC2 Serial Console 的权限。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ec2:GetSerialConsoleAccessStatus",
                "ec2:EnableSerialConsoleAccess",
                "ec2:DisableSerialConsoleAccess"
            ],
            "Resource": "*"
        }
    ]
}
```

------

有关更多信息，请参阅 *IAM 用户指南* 中的[创建 IAM 策略](https://docs.amazonaws.cn/IAM/latest/UserGuide/access_policies_create.html)。

### 查看账户对串行控制台的访问权限状态


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

**查看账户对串行控制台的访问权限**

1. 通过以下网址打开 Amazon EC2 控制台：[https://console.aws.amazon.com/ec2/](https://console.amazonaws.cn/ec2/)。

1. 在导航窗格中，选择**控制面板**。

1. 在**账户属性**卡的**设置**下，选择 **EC2 Serial Console**。

1. 在 **EC2 Serial Console** 选项卡上，**EC2 Serial Console 访问权限**的值为**已允许**或**已阻止**。

------
#### [ Amazon CLI ]

**查看账户对串行控制台的访问权限**  
使用 [get-serial-console-access-status](https://docs.amazonaws.cn/cli/latest/reference/ec2/get-serial-console-access-status.html) 命令。

```
aws ec2 get-serial-console-access-status
```

下面是示例输出。值为 `true` 表示允许该账户访问串行控制台。

```
{
    "SerialConsoleAccessEnabled": true,
    "ManagedBy": "account"
}
```

`ManagedBy` 字段表示配置了该设置的实体。可能的值是 `account`（直接配置）或 `declarative-policy`。有关更多信息，请参阅《Amazon Organizations User Guide》**中的 [Declarative policies](https://docs.amazonaws.cn/organizations/latest/userguide/orgs_manage_policies_declarative.html)。

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

**查看账户对串行控制台的访问权限**  
使用 [Get-EC2SerialConsoleAccessStatus](https://docs.amazonaws.cn/powershell/latest/reference/items/Get-EC2SerialConsoleAccessStatus.html) cmdlet。

```
Get-EC2SerialConsoleAccessStatus -Select *
```

下面是示例输出。值为 `True` 表示允许该账户访问串行控制台。

```
ManagedBy SerialConsoleAccessEnabled
--------- --------------------------
account   True
```

`ManagedBy` 字段表示配置了该设置的实体。可能的值是 `account`（直接配置）或 `declarative-policy`。有关更多信息，请参阅《Amazon Organizations User Guide》**中的 [Declarative policies](https://docs.amazonaws.cn/organizations/latest/userguide/orgs_manage_policies_declarative.html)。

------

### 授予账户访问串行控制台的权限。


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

**授予账户对串行控制台的访问权限**

1. 通过以下网址打开 Amazon EC2 控制台：[https://console.aws.amazon.com/ec2/](https://console.amazonaws.cn/ec2/)。

1. 在导航窗格中，选择**控制面板**。

1. 在**账户属性**卡的**设置**下，选择 **EC2 Serial Console**。

1. 选择**管理**。

1. 要允许访问账户中所有实例的 EC2 Serial Console，请选中**允许**复选框。

1. 选择**更新**。

------
#### [ Amazon CLI ]

**授予账户对串行控制台的访问权限**  
使用 [enable-serial-console-access](https://docs.amazonaws.cn/cli/latest/reference/ec2/enable-serial-console-access.html) 命令。

```
aws ec2 enable-serial-console-access
```

下面是示例输出。

```
{
    "SerialConsoleAccessEnabled": true
}
```

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

**授予账户对串行控制台的访问权限**  
使用 [Enable-EC2SerialConsoleAccess](https://docs.amazonaws.cn/powershell/latest/reference/items/Enable-EC2SerialConsoleAccess.html) cmdlet。

```
Enable-EC2SerialConsoleAccess
```

下面是示例输出。

```
True
```

------

### 拒绝账户访问串行控制台


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

**拒绝账户访问串行控制台**

1. 通过以下网址打开 Amazon EC2 控制台：[https://console.aws.amazon.com/ec2/](https://console.amazonaws.cn/ec2/)。

1. 在导航窗格中，选择**控制面板**。

1. 在**账户属性**卡的**设置**下，选择 **EC2 Serial Console**。

1. 选择**管理**。

1. 要阻止访问账户中所有实例的 EC2 Serial Console，请清除**允许**复选框。

1. 选择**更新**。

------
#### [ Amazon CLI ]

**拒绝账户访问串行控制台**  
使用 [disable-serial-console-access](https://docs.amazonaws.cn/cli/latest/reference/ec2/disable-serial-console-access.html) 命令。

```
aws ec2 disable-serial-console-access
```

下面是示例输出。

```
{
    "SerialConsoleAccessEnabled": false
}
```

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

**拒绝账户访问串行控制台**  
使用 [Disable-EC2SerialConsoleAccess](https://docs.amazonaws.cn/powershell/latest/reference/items/Disable-EC2SerialConsoleAccess.html) cmdlet。

```
Disable-EC2SerialConsoleAccess
```

下面是示例输出。

```
False
```

------

## 为 EC2 Serial Console 访问配置 IAM policy
配置 IAM 策略。

默认情况下，用户无权访问串行控制台。您的组织必须配置 IAM policy 以授予用户所需的访问权限。有关更多信息，请参阅 *IAM 用户指南* 中的[创建 IAM 策略](https://docs.amazonaws.cn/IAM/latest/UserGuide/access_policies_create.html)。

对于串行控制台访问，请创建包含 `ec2-instance-connect:SendSerialConsoleSSHPublicKey` 操作的 JSON 策略文档。此操作会授予用户将公钥推送到串行控制台服务的权限，该服务将启动串行控制台会话。我们建议限制对特定 EC2 实例的访问。否则，具有此权限的所有用户都可以连接到所有 EC2 实例的串行控制台。

**Topics**
+ [

### 明确允许访问串行控制台
](#iam-explicitly-allow-access)
+ [

### 明确拒绝访问串行控制台
](#serial-console-IAM-policy)
+ [

### 使用资源标签控制对串行控制台的访问
](#iam-resource-tags)

### 明确允许访问串行控制台


默认情况下，没有人可以访问串行控制台。要授予对串行控制台的访问权限，您需要将策略配置为明确允许访问。我们建议配置一个策略以限制对特定实例的访问。

以下策略允许访问由实例 ID 标识的特定实例的串行控制台。

请注意，`DescribeInstances`、`DescribeInstanceTypes` 和 `GetSerialConsoleAccessStatus` 操作不支持资源级权限，因此必须为这些操作指定以 `*`（星号）表示的所有资源。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AllowDescribeInstances",
            "Effect": "Allow",
            "Action": [
                "ec2:DescribeInstances",
                "ec2:DescribeInstanceTypes",
                "ec2:GetSerialConsoleAccessStatus"
            ],
             "Resource": "*"
        },
        {
            "Sid": "AllowinstanceBasedSerialConsoleAccess",
            "Effect": "Allow",
            "Action": [
                "ec2-instance-connect:SendSerialConsoleSSHPublicKey"
            ],
            "Resource": "arn:aws:ec2:us-east-1:111122223333:instance/i-0598c7d356eba48d7"
        }
    ]
}
```

------

### 明确拒绝访问串行控制台


以下 IAM policy 允许访问标有 `*`（星号）的所有实例的串行控制台，并明确拒绝访问由 ID 标识的特定实例的串行控制台。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AllowSerialConsoleAccess",
            "Effect": "Allow",
            "Action": [
                "ec2-instance-connect:SendSerialConsoleSSHPublicKey",
                "ec2:DescribeInstances",
                "ec2:DescribeInstanceTypes",
                "ec2:GetSerialConsoleAccessStatus"
            ],
            "Resource": "*"
        },
        {
            "Sid": "DenySerialConsoleAccess",
            "Effect": "Deny",
            "Action": [
                "ec2-instance-connect:SendSerialConsoleSSHPublicKey"
            ],
            "Resource": "arn:aws:ec2:us-east-1:111122223333:instance/i-0598c7d356eba48d7"
        }
    ]
}
```

------

### 使用资源标签控制对串行控制台的访问


您可以使用资源标签来控制对实例的串行控制台的访问。

基于属性的访问控制是一种授权策略，它根据可附加到用户和 Amazon 资源的标签来定义权限。例如，只有当实例的资源标签和委托人标签具有相同的标签键 `SerialConsole` 值时，以下策略才会允许用户启动该实例的串行控制台连接。

有关使用标签控制对Amazon资源的访问的更多信息，请参阅 *IAM 用户指南*中的[控制对Amazon资源的访问](https://docs.amazonaws.cn/IAM/latest/UserGuide/access_tags.html#access_tags_control-resources)。

请注意，`DescribeInstances`、`DescribeInstanceTypes` 和 `GetSerialConsoleAccessStatus` 操作不支持资源级权限，因此必须为这些操作指定以 `*`（星号）表示的所有资源。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AllowDescribeInstances",
            "Effect": "Allow",
            "Action": [
                "ec2:DescribeInstances",
                "ec2:DescribeInstanceTypes",
                "ec2:GetSerialConsoleAccessStatus"
            ],
            "Resource": "*"
        },
        {
            "Sid": "AllowTagBasedSerialConsoleAccess",
            "Effect": "Allow",
            "Action": [
                "ec2-instance-connect:SendSerialConsoleSSHPublicKey"
            ],
            "Resource": "arn:aws:ec2:us-east-1:111122223333:instance/*",
            "Condition": {
                "StringEquals": {
                    "aws:ResourceTag/SerialConsole": "${aws:PrincipalTag/SerialConsole}"
                }
            }
        }
    ]
}
```

------

## 在 Linux 实例上设置操作系统用户密码


您可以在没有密码的情况下连接到串行控制台。但是，要*使用*串行控制台对 Linux 实例进行故障排查，实例必须拥有基于密码的操作系统用户。

您可以为任何 OS 用户（包括根用户）设置密码。请注意，根用户可以修改所有文件，而每个 OS 用户可能只有有限权限。

您必须为要使用串行控制台的每个实例设置用户密码。这是每个实例的一次性要求。

**注意**  
默认情况下，Amazon 提供的 AMI 未配置基于密码的用户。如果您使用已配置了根用户密码的 AMI 启动实例，则可以跳过这些说明。

**在 Linux 实例上设置操作系统用户密码**

1. [连接到您的 实例](connect-to-linux-instance.md)。除 EC2 Serial Console 连接方法外，您还可以使用任何方法连接到自己的实例。

1. 要为用户设置密码，请使用 **passwd** 命令。在以下示例中，用户是 `root`。

   ```
   [ec2-user ~]$ sudo passwd root
   ```

   下面是示例输出。

   ```
   Changing password for user root.
   New password:
   ```

1. 出现提 `New password` 示时，输入新密码。

1. 出现提示时，重新输入密码。

# 连接到 EC2 Serial Console


您可以使用 Amazon EC2 控制台或通过 SSH 连接到 EC2 实例的串行控制台。连接到串行控制台后，您可以使用它来排除引导、网络配置和其他方面的问题。有关排查故障的更多信息，请参阅 [使用 EC2 Serial Console 对 Amazon EC2 实例进行故障排查](troubleshoot-using-serial-console.md)。

**注意事项**
+ 每个实例仅支持一个活动串行控制台连接。
+ 串行控制台连接通常会持续一小时，除非您[断开连接](disconnect-serial-console-session.md)。但是，在系统维护期间，Amazon EC2 将断开串行控制台会话。

  连接的持续时间并不是由 IAM 凭证的持续时间决定的。如果您的 IAM 凭证过期，连接将继续保持，直到达到串行控制台连接的最长持续时间。使用 EC2 Serial Console 控制台体验时，如果 IAM 凭证过期，请关闭浏览器页面终止连接。
+ 在断开与串行控制台的连接后，需要 30 秒钟来停用会话，然后才能允许新会话。
+ 支持的串行控制台端口：`ttyS0`（Linux 实例）和 `COM1`（Windows 实例）
+ 连接到串行控制台时，您可能会观察到实例的吞吐量略有下降。

**Topics**
+ [

## 使用基于浏览器的客户端进行连接
](#sc-connect-browser-based-client)
+ [

## 使用您自己的密钥和 SSH 客户端进行连接
](#sc-connect-SSH)
+ [

## EC2 Serial Console 端点和指纹
](#sc-endpoints-and-fingerprints)

## 使用基于浏览器的客户端进行连接


您可以使用基于浏览器的客户端连接到 EC2 实例的串行控制台。您可以通过在 Amazon EC2 控制台中选择实例并选择连接到串行控制台来完成此操作。基于浏览器的客户端处理权限并可提供成功连接。

EC2 Serial Console 适用于大多数浏览器，并支持键盘和鼠标输入。

在连接之前，请确保您已完成[先决条件](ec2-serial-console-prerequisites.md)。

**使用基于浏览器的客户端（Amazon EC2 控制台）连接到实例的串行端口**

1. 通过以下网址打开 Amazon EC2 控制台：[https://console.aws.amazon.com/ec2/](https://console.amazonaws.cn/ec2/)。

1. 在导航窗格中，选择 **Instances (实例)**。

1. 您可以选择相应实例，然后选择 **Actions**（操作）、**Monitor and troubleshoot**（监控和问题排查）、**EC2 Serial Console**、**Connect**（连接）。

   您也可以选择相应实例，然后选择 **Connect**（连接）、**EC2 Serial Console**、**Connect**（连接）。

   浏览器内终端窗口随即打开。

1. 按 **Enter**。如果返回登录提示，则表示您已连接到串行控制台。

   如果保持黑屏，则可以使用以下信息来帮助解决连接到串行控制台的问题：
   + **检查您是否已配置了串行控制台的访问权限。**有关更多信息，请参阅 [配置对 EC2 Serial Console 的访问](configure-access-to-serial-console.md)。
   + （仅限 Linux 实例）**使用 SysRq 连接到串行控制台。**SysRq 不要求您使用基于浏览器的客户端进行连接。有关更多信息，请参阅 [（Linux 实例）使用 SysRq 对您的实例进行故障排除SysRq (Linux)](troubleshoot-using-serial-console.md#SysRq)。
   + （仅限 Linux 实例）**重新启动 getty。**如果您对实例拥有 SSH 访问权限，则使用 SSH 连接到实例，然后使用以下命令重新启动 getty。

     ```
     [ec2-user ~]$ sudo systemctl restart serial-getty@ttyS0
     ```
   + **重启实例。**您可以使用 SysRq（Linux 实例）、EC2 控制台或 Amazon CLI 重启实例 。有关更多信息，请参阅 [（Linux 实例）使用 SysRq 对您的实例进行故障排除SysRq (Linux)](troubleshoot-using-serial-console.md#SysRq)（Linux 实例）或 [重启 Amazon EC2 实例](ec2-instance-reboot.md)。

1. （仅限 Linux 实例）在 `login` 提示符下，输入您[之前设置](configure-access-to-serial-console.md#set-user-password)的、基于密码的用户的用户名，然后按 **Enter** 键。

1. （仅限 Linux 实例）在 `Password` 提示符下，输入密码，然后按 **Enter** 键。

## 使用您自己的密钥和 SSH 客户端进行连接


您可以使用自己的 SSH 密钥，并在使用 串行控制台 API 时从您选择的 SSH 客户端连接到您的实例。这使您能够从将公有密钥推送到实例的串行控制台功能中受益。

将 SSH 密钥推送到实例后，SSH 连接不受您配置用于授予用户 EC2 Serial Console 访问权限的 IAM 策略约束。

**开始前的准备工作**  
验证是否满足[先决条件](ec2-serial-console-prerequisites.md)。

**使用 SSH 连接到实例的串行控制台**

1. **将 SSH 公钥推送到实例以启动串行控制台会话**

   使用 [send-serial-console-ssh-public-key](https://docs.amazonaws.cn/cli/latest/reference/ec2-instance-connect/send-serial-console-ssh-public-key.html) 命令可将 SSH 公有密钥推送到实例。这将启动串行控制台会话。

   如果已为此实例启动串行控制台会话，则该命令将失败，因为您每次只能打开一个会话。在断开与串行控制台的连接后，需要 30 秒钟来停用会话，然后才能允许新会话。

   ```
   aws ec2-instance-connect send-serial-console-ssh-public-key \
       --instance-id i-001234a4bf70dec41EXAMPLE \
       --serial-port 0 \
       --ssh-public-key file://my_key.pub \
       --region us-east-1
   ```

1. 

**使用私钥连接到串行控制台**

   在从串行控制台服务删除公钥之前，使用 **ssh** 命令连接到串行控制台。在移除之前，您有 60 秒钟的时间。

   使用与公钥对应的私钥。

   用户名格式为 `instance-id.port0`，其中包括实例 ID 和端口 0。在以下示例中，用户名为 `i-001234a4bf70dec41EXAMPLE.port0`。

   串行控制台服务的端点因区域而异。有关每个区域的端点，请参阅 [EC2 Serial Console 端点和指纹](#sc-endpoints-and-fingerprints) 表。在以下示例中，串行控制台服务位于 us-east-1 区域。

   ```
   ssh -i my_key i-001234a4bf70dec41EXAMPLE.port0@serial-console.ec2-instance-connect.us-east-1.aws
   ```

   以下示例使用 `timeout 3600` 将 SSH 会话设置为 1 小时后终止。会话终止后，会话期间启动的进程可能会继续在您的实例上运行。

   ```
   timeout 3600 ssh -i my_key i-001234a4bf70dec41EXAMPLE.port0@serial-console.ec2-instance-connect.us-east-1.aws
   ```

1. 

**（可选）验证指纹**

   首次连接到串行控制台时，系统会提示您验证指纹。您可以比较串行控制台指纹与为了进行验证而显示的指纹。如果这些指纹不匹配，则表示有人可能在试图实施“中间人”攻击。如果它们匹配，您可以放心地连接到串行控制台。

   以下指纹用于 us-east-1 区域中的串行控制台服务。有关每个区域的指纹，请参阅 [EC2 Serial Console 端点和指纹](#sc-endpoints-and-fingerprints)。

   ```
   SHA256:dXwn5ma/xadVMeBZGEru5l2gx+yI5LDiJaLUcz0FMmw
   ```

   该指纹仅在您第一次连接到串行控制台时出现。

1. 按 **Enter**。如果返回提示，则表示您已连接到串行控制台。

   如果保持黑屏，则可以使用以下信息来帮助解决连接到串行控制台的问题：
   + **检查您是否已配置了串行控制台的访问权限。**有关更多信息，请参阅 [配置对 EC2 Serial Console 的访问](configure-access-to-serial-console.md)。
   + （仅限 Linux 实例）**使用 SysRq 连接到串行控制台。**SysRq 不要求您使用 SSH 连接。有关更多信息，请参阅 [（Linux 实例）使用 SysRq 对您的实例进行故障排除SysRq (Linux)](troubleshoot-using-serial-console.md#SysRq)。
   + （仅限 Linux 实例）**重新启动 getty。**如果您对实例拥有 SSH 访问权限，则使用 SSH 连接到实例，然后使用以下命令重新启动 getty。

     ```
     [ec2-user ~]$ sudo systemctl restart serial-getty@ttyS0
     ```
   + **重启实例。**您可以使用 SysRq（仅限 Linux 实例）、EC2 控制台或 Amazon CLI 重启实例 。有关更多信息，请参阅 [（Linux 实例）使用 SysRq 对您的实例进行故障排除SysRq (Linux)](troubleshoot-using-serial-console.md#SysRq)（仅限 Linux 实例）或 [重启 Amazon EC2 实例](ec2-instance-reboot.md)。

1. （仅限 Linux 实例）在 `login` 提示符下，输入您[之前设置](configure-access-to-serial-console.md#set-user-password)的、基于密码的用户的用户名，然后按 **Enter** 键。

1. （仅限 Linux 实例）在 `Password` 提示符下，输入密码，然后按 **Enter** 键。

## EC2 Serial Console 端点和指纹


以下是 EC2 Serial Console 的服务端点和指纹。要以编程方式连接到实例的串行控制台，请使用 EC2 Serial Console 端点。EC2 Serial Console 端点和指纹对每个 Amazon 区域都是唯一的。


| 区域名称 | 区域 | 端点 | 指纹 | 
| --- | --- | --- | --- | 
| 美国东部（俄亥俄州） | us-east-2 | serial-console.ec2-instance-connect.us-east-2.aws | SHA256:EhwPkTzRtTY7TRSzz26XbB0/HvV9jRM7mCZN0xw/d/0 | 
| 美国东部（弗吉尼亚州北部） | us-east-1 | serial-console.ec2-instance-connect.us-east-1.aws | SHA256:dXwn5ma/xadVMeBZGEru5l2gx\$1yI5LDiJaLUcz0FMmw | 
| 美国西部（北加利福尼亚） | us-west-1 | serial-console.ec2-instance-connect.us-west-1.aws | SHA256:OHldlcMET8u7QLSX3jmRTRAPFHVtqbyoLZBMUCqiH3Y | 
| 美国西部（俄勒冈州） | us-west-2 | serial-console.ec2-instance-connect.us-west-2.aws | SHA256:EMCIe23TqKaBI6yGHainqZcMwqNkDhhAVHa1O2JxVUc | 
| 非洲（开普敦） | af-south-1 | ec2-serial-console.af-south-1.api.aws | SHA256:RMWWZ2fVePeJUqzjO5jL2KIgXsczoHlz21Ed00biiWI | 
| 亚太地区（香港） | ap-east-1 | ec2-serial-console.ap-east-1.api.aws | SHA256:T0Q1lpiXxChoZHplnAkjbP7tkm2xXViC9bJFsjYnifk | 
| 亚太地区（海得拉巴） | ap-south-2 | ec2-serial-console.ap-south-2.api.aws | SHA256:WJgPBSwV4/shN\$1OPITValoewAuYj15DVW845JEhDKRs | 
| 亚太地区（雅加达） | ap-southeast-3 | ec2-serial-console.ap-southeast-3.api.aws | SHA256:5ZwgrCh\$1lfns32XITqL/4O0zIfbx4bZgsYFqy3o8mIk | 
| 亚太地区（马来西亚） | ap-southeast-5 | ec2-serial-console.ap-southeast-5.api.aws | SHA256:cQXTHQMRcqRdIjmAGoAMBSExeoRobYyRwT67yTjnEiA | 
| 亚太地区（墨尔本） | ap-southeast-4 | ec2-serial-console.ap-southeast-4.api.aws | SHA256:Avaq27hFgLvjn5gTSShZ0oV7h90p0GG46wfOeT6ZJvM | 
| 亚太地区（孟买） | ap-south-1 | serial-console.ec2-instance-connect.ap-south-1.aws | SHA256:oBLXcYmklqHHEbliARxEgH8IsO51rezTPiSM35BsU40 | 
| 亚太地区（大阪） | ap-northeast-3 | ec2-serial-console.ap-northeast-3.api.aws | SHA256:Am0/jiBKBnBuFnHr9aXsgEV3G8Tu/vVHFXE/3UcyjsQ | 
| 亚太地区（首尔） | ap-northeast-2 | serial-console.ec2-instance-connect.ap-northeast-2.aws | SHA256:FoqWXNX\$1DZ\$1\$1GuNTztg9PK49WYMqBX\$1FrcZM2dSrqrI | 
| 亚太地区（新加坡） | ap-southeast-1 | serial-console.ec2-instance-connect.ap-southeast-1.aws | SHA256:PLFNn7WnCQDHx3qmwLu1Gy/O8TUX7LQgZuaC6L45CoY | 
| 亚太地区（悉尼） | ap-southeast-2 | serial-console.ec2-instance-connect.ap-southeast-2.aws | SHA256:yFvMwUK9lEUQjQTRoXXzuN\$1cW9/VSe9W984Cf5Tgzo4 | 
| 亚太地区（泰国） | ap-southeast-7 | ec2-serial-console.ap-southeast-7.api.aws | SHA256:KCAZiRYrR1Q2lqsg7vTwixWmvc2wmjVT31XRgSdEfDY | 
| 亚太地区（东京） | ap-northeast-1 | serial-console.ec2-instance-connect.ap-northeast-1.aws | SHA256:RQfsDCZTOfQawewTRDV1t9Em/HMrFQe\$1CRlIOT5um4k | 
| 加拿大（中部） | ca-central-1 | serial-console.ec2-instance-connect.ca-central-1.aws | SHA256:P2O2jOZwmpMwkpO6YW738FIOTHdUTyEv2gczYMMO7s4 | 
| 加拿大西部（卡尔加里） | ca-west-1 | ec2-serial-console.ca-west-1.api.aws | SHA256:s3rc8lI2xhbhr3iedjJNxGAFLPGOLjx7IxxXrGckk6Q | 
| 中国（北京） | cn-north-1 | ec2-serial-console.cn-north-1.api.amazonwebservices.com.cn | SHA256:2gHVFy4H7uU3\$1WaFUxD28v/ggMeqjvSlgngpgLgGT\$1Y | 
| 中国（宁夏） | cn-northwest-1 | ec2-serial-console.cn-northwest-1.api.amazonwebservices.com.cn | SHA256:TdgrNZkiQOdVfYEBUhO4SzUA09VWI5rYOZGTogpwmiM | 
| 欧洲地区（法兰克福） | eu-central-1 | serial-console.ec2-instance-connect.eu-central-1.aws | SHA256:aCMFS/yIcOdOlkXvOl8AmZ1Toe\$1bBnrJJ3Fy0k0De2c | 
| 欧洲地区（爱尔兰） | eu-west-1 | serial-console.ec2-instance-connect.eu-west-1.aws | SHA256:h2AaGAWO4Hathhtm6ezs3Bj7udgUxi2qTrHjZAwCW6E | 
| 欧洲（伦敦） | eu-west-2 | serial-console.ec2-instance-connect.eu-west-2.aws | SHA256:a69rd5CE/AEG4Amm53I6lkD1ZPvS/BCV3tTPW2RnJg8 | 
| 欧洲地区（米兰） | eu-south-1 | ec2-serial-console.eu-south-1.api.aws | SHA256:lC0kOVJnpgFyBVrxn0A7n99ecLbXSX95cuuS7X7QK30 | 
| 欧洲地区（巴黎） | eu-west-3 | serial-console.ec2-instance-connect.eu-west-3.aws | SHA256:q8ldnAf9pymeNe8BnFVngY3RPAr/kxswJUzfrlxeEWs | 
| 欧洲（西班牙） | eu-south-2 | ec2-serial-console.eu-south-2.api.aws | SHA256:GoCW2DFRlu669QNxqFxEcsR6fZUz/4F4n7T45ZcwoEc | 
| 欧洲地区（斯德哥尔摩） | eu-north-1 | serial-console.ec2-instance-connect.eu-north-1.aws | SHA256:tkGFFUVUDvocDiGSS3Cu8Gdl6w2uI32EPNpKFKLwX84 | 
| 欧洲（苏黎世） | eu-central-2 | ec2-serial-console.eu-central-2.api.aws | SHA256:8Ppx2mBMf6WdCw0NUlzKfwM4/IfRz4OaXFutQXWp6mk | 
| 以色列（特拉维夫） | il-central-1 | ec2-serial-console.il-central-1.api.aws | SHA256:JR6q8v6kNNPi8\$1QSFQ4dj5dimNmZPTgwgsM1SNvtYyU | 
| 墨西哥（中部） | mx-central-1 | ec2-serial-console.mx-central-1.api.aws | SHA256:BCuVl13iQNk\$1CcVnt18Ef4p2ZHUrBBAOxlFetB32GS0 | 
| 中东（巴林） | me-south-1 | ec2-serial-console.me-south-1.api.aws | SHA256:nPjLLKHu2QnLdUq2kVArsoK5xvPJOMRJKCBzCDqC3k8 | 
| 中东（阿联酋） | me-central-1 | ec2-serial-console.me-central-1.api.aws | SHA256:zpb5duKiBZ\$1l0dFwPeyykB4MPBYhI/XzXNeFSDKBvLE | 
| 南美洲（圣保罗） | sa-east-1 | serial-console.ec2-instance-connect.sa-east-1.aws | SHA256:rd2\$1/32Ognjew1yVIemENaQzC\$1Botbih62OqAPDq1dI | 
| Amazon GovCloud（美国东部） | us-gov-east-1 | serial-console.ec2-instance-connect.us-gov-east-1.amazonaws.com | SHA256:tIwe19GWsoyLClrtvu38YEEh\$1DHIkqnDcZnmtebvF28 | 
| Amazon GovCloud（美国西部） | us-gov-west-1 | serial-console.ec2-instance-connect.us-gov-west-1.amazonaws.com | SHA256:kfOFRWLaOZfB\$1utbd3bRf8OlPf8nGO2YZLqXZiIw5DQ | 

# 断开与 EC2 Serial Console 的连接


如果您不再需要连接到实例的 EC2 Serial Console，则可以断开连接。当您断开与串行控制台的连接时，在该实例上运行的所有 shell 会话都将继续运行。如果要结束 shell 会话，则需要先结束会话，然后再断开与串行控制台的连接。

**注意事项**
+ 串行控制台连接通常会持续一小时，除非您断开连接。但是，在系统维护期间，Amazon EC2 将断开串行控制台会话。
+ 在断开与串行控制台的连接后，需要 30 秒钟来停用会话，然后才能允许新会话。

从串行控制台断开连接的方法取决于客户端。

**基于浏览器的客户端**  
要断开串行控制台，请关闭串行控制台浏览器内终端窗口。

**标准 OpenSSH 客户端**  
要断开串行控制台，请使用以下命令关闭 SSH 连接。此命令必须在换行之后立即运行。

```
~.
```

您用于关闭 SSH 连接的命令可能会有所不同，取决于您正在使用的 SSH 客户端。

# 使用 EC2 Serial Console 对 Amazon EC2 实例进行故障排查
使用 EC2 Serial Console 对实例进行故障排查

通过使用 EC2 Serial Console，您可以通过连接到实例的串行端口来排查启动、网络配置和其他方面的问题。

请使用适用于实例操作系统和在实例上配置的工具的说明。

**Topics**
+ [GRUB (Linux)](#grub)
+ [SysRq (Linux)](#SysRq)
+ [SAC (Windows)](#troubleshooting-sac)

**先决条件**  
开始之前，请确保您已完成[先决条件](ec2-serial-console-prerequisites.md)，包括配置您选择的故障排除工具。

## （Linux 实例）使用 GRUB 对您的实例进行故障排除
GRUB (Linux)

GNU GRUB（GNU GRand Unified Bootloader [统一引导加载程序] 的缩写，通常称为 GRUB）是大多数 Linux 操作系统的默认引导加载程序。从 GRUB 菜单中，您可以选择要引导到哪个内核，或修改菜单项以更改内核的启动方式。这在对失败的实例进行故障排查时非常有用。

在引导流程中将显示 GRUB 菜单。该菜单无法通过普通 SSH 访问，但您可以通过 EC2 Serial Console 访问。

启动到单用户模式或紧急模式。单用户模式将在较低的运行级别启动内核。例如，它可能会挂载文件系统，但不会激活网络，从而使您有机会执行修复实例所需的维护。紧急模式与单用户模式类似，只是内核在可达到的最低运行级别运行。

**启动到单用户模式**

1. [连接到](connect-to-serial-console.md)实例的串行控制台。

1. 使用以下命令重新引导实例。

   ```
   [ec2-user ~]$ sudo reboot
   ```

1. 在重新启动期间，当 GRUB 菜单出现时，按任意键停止引导流程。

1. 在 GRUB 菜单中，使用箭头键选择要引导的内核，然后按键盘上的 `e`。

1. 使用箭头键将光标定位在包含内核的行上。该行以 `linux` 或 `linux16` 开头，取决于启动实例所使用的 AMI。对于 Ubuntu，有两行开头为 `linux`，必须在下一步中修改。

1. 在行末添加 `single` 一词。

   以下是 Amazon Linux 2 的示例。

   ```
   linux /boot/vmlinuz-4.14.193-149.317.amzn2.aarch64 root=UUID=d33f9c9a-\
   dadd-4499-938d-ebbf42c3e499 ro  console=tty0 console=ttyS0,115200n8 net.ifname\
   s=0 biosdevname=0 nvme_core.io_timeout=4294967295 rd.emergency=poweroff rd.she\
   ll=0 single
   ```

1. 按 **Ctrl\$1X** 可启动到单用户模式。

1. 在 `login` 提示符下，输入您[之前设置](configure-access-to-serial-console.md#set-user-password)的、基于密码的用户的用户名，然后按 **Enter** 键。

1. 在 `Password` 提示符下，输入密码，然后按 **Enter** 键。

 

**启动到紧急模式**  
请按照与单用户模式相同的步骤操作，但在第 6 步中添加单词 `emergency` 而不是 `single`。

## （Linux 实例）使用 SysRq 对您的实例进行故障排除
SysRq (Linux)

系统请求 (SysRq) 键（有时称为“magic SysRq”）可用于在 Shell 外直接向内核发送命令，无论内核正在执行什么操作，内核都会响应。例如，如果实例已停止响应，则可以使用 SysRq 密钥告诉内核崩溃或重新启动。有关更多信息，请参阅 Wikipedia 中的 [Magic SysRq 键](https://en.wikipedia.org/wiki/Magic_SysRq_key)。

您可以在基于 EC2 Serial Console 浏览器的客户端中或 SSH 客户端中使用 SysRq 命令。每个客户端发送中断请求的命令都不同。

要使用 SysRq，请根据您正在使用的客户端选择以下程序之一。

------
#### [ Browser-based client ]

**在串行控制台基于浏览器的客户端中使用 SysRq**

1. [连接到](connect-to-serial-console.md)实例的串行控制台。

1. 要发送中断请求，请按 `CTRL+0`（零）。如果您的键盘支持，还可以使用暂停或中断键发送中断请求。

   ```
   [ec2-user ~]$ CTRL+0
   ```

1. 要发出 SysRq 命令，请按键盘上与所需命令对应的键。例如，要显示 SysRq 命令列表，请按 `h`。

   ```
   [ec2-user ~]$ h
   ```

   `h` 命令的输出类似于以下内容。

   ```
   [ 1169.389495] sysrq: HELP : loglevel(0-9) reboot(b) crash(c) terminate-all-tasks(e) memory-full-oom-kill(f) kill-all-tasks(i) thaw-filesystems
   (j) sak(k) show-backtrace-all-active-cpus(l) show-memory-usage(m) nice-all-RT-tasks(n) poweroff(o) show-registers(p) show-all-timers(q) unraw(r
   ) sync(s) show-task-states(t) unmount(u) show-blocked-tasks(w) dump-ftrace-buffer(z)
   ```

------
#### [ SSH client ]

**在 SSH 客户端中使用 SysRq**

1. [连接到](connect-to-serial-console.md)实例的串行控制台。

1. 要发送中断请求，请按 `~B`（波浪号后跟大写 `B`）。

   ```
   [ec2-user ~]$ ~B
   ```

1. 要发出 SysRq 命令，请按键盘上与所需命令对应的键。例如，要显示 SysRq 命令列表，请按 `h`。

   ```
   [ec2-user ~]$ h
   ```

   `h` 命令的输出类似于以下内容。

   ```
   [ 1169.389495] sysrq: HELP : loglevel(0-9) reboot(b) crash(c) terminate-all-tasks(e) memory-full-oom-kill(f) kill-all-tasks(i) thaw-filesystems
   (j) sak(k) show-backtrace-all-active-cpus(l) show-memory-usage(m) nice-all-RT-tasks(n) poweroff(o) show-registers(p) show-all-timers(q) unraw(r
   ) sync(s) show-task-states(t) unmount(u) show-blocked-tasks(w) dump-ftrace-buffer(z)
   ```
**注意**  
您用于发送中断请求的命令可能会有所不同，取决于您正在使用的 SSH 客户端。

------

## （Windows 实例）使用 SAC 对您的实例进行故障排除
SAC (Windows)

Windows 的特殊管理控制台 (SAC) 功能可用于对 Windows 实例进行故障排查。通过连接到实例的串行控制台并使用 SAC，您可以中断引导流程并在安全模式下启动 Windows。

**注意**  
如果您在实例上启用 SAC，则依赖密码检索的 EC2 服务将无法通过 Amazon EC2 控制台运行。Amazon EC2 启动代理（EC2Config、EC2Launch v1 和 EC2Launch v2）上的 Windows 依靠串行控制台来执行各种任务。当您在实例上启用 SAC 时，这些任务不会成功执行。有关 Amazon EC2 启动代理上的 Windows 的更多信息，请参阅 [配置您的 Amazon EC2 Windows 实例](ec2-windows-instances.md)。如果您启用 SAC，则可在之后将其禁用。有关更多信息，请参阅 [禁用 SAC 和启动菜单](#disable-sac-bootmenu)。

**Topics**
+ [

### 使用 SAC
](#use-sac)
+ [

### 使用启动菜单
](#use-boot-menu)
+ [

### 禁用 SAC 和启动菜单
](#disable-sac-bootmenu)

### 使用 SAC


**使用 SAC**

1. [连接到串行控制台。](connect-to-serial-console.md)

   如果在实例上启用了 SAC，串行控制台将显示 `SAC>` 提示。  
![\[串行控制台中显示的 SAC 提示符。\]](http://docs.amazonaws.cn/AWSEC2/latest/UserGuide/images/win-boot-3.png)

1. 要显示 SAC 命令，请输入 ?，然后按 **Enter**。

   预期输出  
![\[输入问号以显示 SAC 命令。\]](http://docs.amazonaws.cn/AWSEC2/latest/UserGuide/images/win-boot-4.png)

1. 要创建命令提示符通道（例如 `cmd0001` 或 `cmd0002`），请输入 cmd，然后按 **Enter**。

1. 要查看命令提示符通道，请按 **ESC**，然后按 **TAB**。

   预期输出  
![\[命令提示符通道。\]](http://docs.amazonaws.cn/AWSEC2/latest/UserGuide/images/win-boot-5.png)

1. 要切换通道，请同时按 **ESC\$1TAB\$1通道编号**。例如，要切换至 `cmd0002` 通道（如果已创建），请按 **ESC\$1TAB\$12**。

1. 输入命令提示符通道所需的凭证。  
![\[需要凭证的命令提示符。\]](http://docs.amazonaws.cn/AWSEC2/latest/UserGuide/images/win-boot-6.png)

   命令提示符与您在桌面上获得的功能全面的命令 Shell 相同，例外之处是它不允许读取已输出的字符。  
![\[功能全面的命令 shell。\]](http://docs.amazonaws.cn/AWSEC2/latest/UserGuide/images/win-boot-7.png)

**还可以从命令提示符使用 PowerShell。**

请注意，您可能需要将进度首选项设置为静默模式。

![\[命令提示符中的 PowerShell。\]](http://docs.amazonaws.cn/AWSEC2/latest/UserGuide/images/win-boot-8.png)


### 使用启动菜单


如果实例已启用了启动菜单并在通过 SSH 连接后重新启动，则您应看到启动菜单，如下所示。

![\[命令提示符的启动菜单。\]](http://docs.amazonaws.cn/AWSEC2/latest/UserGuide/images/win-boot-1.png)


**启动菜单命令**

ENTER  
启动操作系统的选定条目。

TAB  
切换到 Tools（工具）菜单。

ESC  
取消并重新启动实例。

按 ESC 后再按 8  
相当于按下 **F8**。显示所选项目的高级选项。

ESC 键 \$1 向左箭头  
返回到初始启动菜单。  
单靠 ESC 密钥不会让您返回主菜单，因为 Windows 正在等待查看转义序列是否正在进行中。

![\[高级启动选项。\]](http://docs.amazonaws.cn/AWSEC2/latest/UserGuide/images/win-boot-2.png)


### 禁用 SAC 和启动菜单


如果您启用 SAC 和启动菜单，则可在之后将这些功能禁用。

使用以下方法之一在实例上禁用 SAC 和启动菜单。

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

**在 Windows 实例上禁用 SAC 和启动菜单**

1. [连接到](connecting_to_windows_instance.md)您的实例并从提升的 PowerShell 命令行执行以下步骤。

1. 首先，将值更改为 `no` 以禁用启动菜单。

   ```
   bcdedit /set '{bootmgr}' displaybootmenu no
   ```

1. 然后，将值更改为 `off` 以禁用 SAC。

   ```
   bcdedit /ems '{current}' off
   ```

1. 重新启动实例以应用更新后的配置。

   ```
   shutdown -r -t 0
   ```

------
#### [ Command prompt ]

**在 Windows 实例上禁用 SAC 和启动菜单**

1. [连接到](connecting_to_windows_instance.md)您的实例并从命令提示符执行以下步骤。

1. 首先，将值更改为 `no` 以禁用启动菜单。

   ```
   bcdedit /set {bootmgr} displaybootmenu no
   ```

1. 然后，将值更改为 `off` 以禁用 SAC。

   ```
   bcdedit /ems {current} off
   ```

1. 重新启动实例以应用更新后的配置。

   ```
   shutdown -r -t 0
   ```

------

# 发送诊断中断来调试无法访问的 Amazon EC2 实例
发送诊断中断

**警告**  
诊断中断供高级用户使用。使用不当会对您的实例产生负面影响。向实例发送诊断中断可能会触发实例崩溃和重新启动，从而导致数据丢失。

您可以向无法访问或无响应的实例发送诊断中断，以手动触发 Linux 实例的*内核错误*或 Windows 实例的*停止错误*（通常称为*蓝屏错误*）。

**Linux 实例**  
在出现内核错误时，Linux 操作系统通常会发生崩溃并重启。操作系统的具体行为取决于其配置。内核错误也可用于使实例的操作系统内核执行任务，例如生成崩溃转储文件。然后，您可以使用崩溃转储文件中的信息进行根本原因分析并调试实例。崩溃转储数据由操作系统在实例本身上本地生成。

**Windows 实例**  
通常，Windows 操作系统在发生停止错误时发生崩溃并重启，但具体行为取决于其配置。停止错误还可能导致操作系统将调试信息（例如内核内存转储）写入文件。然后，您可以使用此信息进行根本原因分析以调试实例。内存转储数据由操作系统在实例本身上本地生成。

在向您的实例发送诊断中断之前，我们建议您查阅适合您操作系统的文档，然后进行必要的配置更改。

**Topics**
+ [

## 支持的实例类型
](#diagnostic-interrupt-instances)
+ [

## 先决条件
](#diagnostic-interrupt-prereqs)
+ [

## 发送诊断中断
](#diagnostic-interrupt-use)

## 支持的实例类型


除 Amazon Graviton 处理器支持的实例类型外的所有基于 Nitro 的实例类型均支持诊断中断。有关更多信息，请参阅[基于 Amazon Nitro System 构建的实例](https://docs.amazonaws.cn/ec2/latest/instancetypes/ec2-nitro-instances.html)和 [Amazon Graviton](https://www.amazonaws.cn/ec2/graviton/)。

## 先决条件


在使用诊断中断之前，必须配置实例的操作系统。这可确保在发生内核错误（Linux 实例）或停止错误（Windows 实例）时执行所需的操作。

### Linux 实例


**将 Amazon Linux 2 或 Amazon Linux 2023 配置为在发生内核错误时生成崩溃转储**

1. 连接到您的 实例。

1. 安装 **kexec** 和 **kdump**。

   ```
   [ec2-user ~]$ sudo yum install kexec-tools -y
   ```

1. 配置内核以便为辅助内核预留适当的内存量。要预留的内存量取决于实例的总可用内存。使用首选文本编辑器打开 `/etc/default/grub` 文件，找到以 `GRUB_CMDLINE_LINUX_DEFAULT` 开始的行，然后按以下格式添加 `crashkernel` 参数：`crashkernel=memory_to_reserve`。例如，要预留 `256MB`，请修改 `grub` 文件，如下所示：

   ```
   GRUB_CMDLINE_LINUX_DEFAULT="crashkernel=256M console=tty0 console=ttyS0,115200n8 net.ifnames=0 biosdevname=0 nvme_core.io_timeout=4294967295 rd.emergency=poweroff rd.shell=0"
   GRUB_TIMEOUT=0
   GRUB_DISABLE_RECOVERY="true"
   ```

1. 保存更改并关闭 `grub` 文件。

1. 重新构建 GRUB2 配置文件。

   ```
   [ec2-user ~]$ sudo grub2-mkconfig -o /boot/grub2/grub.cfg
   ```

1. 在基于 Intel 和 AMD 处理器的实例上，`send-diagnostic-interrupt` 命令将*未知的非屏蔽中断* (NMI) 发送到实例。您必须将内核配置为在收到未知 NMI 时发生崩溃。使用首选文本编辑器打开 `/etc/sysctl.conf` 文件，并添加以下内容。

   ```
   kernel.unknown_nmi_panic=1
   ```

1. 重启实例并重新连接到它。

1. 使用正确的 `crashkernel` 参数验证是否已启动内核。

   ```
   $ grep crashkernel /proc/cmdline
   ```

   以下示例输出指示成功的配置。

   ```
   BOOT_IMAGE=/boot/vmlinuz-4.14.128-112.105.amzn2.x86_64 root=UUID=a1e1011e-e38f-408e-878b-fed395b47ad6 ro crashkernel=256M console=tty0 console=ttyS0,115200n8 net.ifnames=0 biosdevname=0 nvme_core.io_timeout=4294967295 rd.emergency=poweroff rd.shell=0
   ```

1. 确认 **kdump** 服务正在运行。

   ```
   [ec2-user ~]$ systemctl status kdump.service
   ```

   以下示例输出显示在 **kdump** 服务正在运行的情况下的结果。

   ```
   kdump.service - Crash recovery kernel arming
      Loaded: loaded (/usr/lib/systemd/system/kdump.service; enabled; vendor preset: enabled)
      Active: active (exited) since Fri 2019-05-24 23:29:13 UTC; 22s ago
     Process: 2503 ExecStart=/usr/bin/kdumpctl start (code=exited, status=0/SUCCESS)
    Main PID: 2503 (code=exited, status=0/SUCCESS)
   ```

**注意**  
默认情况下，崩溃转储文件将保存到 `/var/crash/`。要更改位置，请使用首选文本编辑器修改 `/etc/kdump.conf` 文件。

**配置 SUSE Linux Enterprise、Ubuntu 或 Red Hat Enterprise Linux**  
在基于 Intel 和 AMD 处理器的实例上，`send-diagnostic-interrupt` 命令将*未知的非屏蔽中断* (NMI) 发送到实例。必须通过调整操作系统的配置文件，将内核配置为在收到未知 NMI 时发生崩溃。有关如何将内核配置为发生崩溃的信息，请参阅适用于操作系统的文档：
+ [SUSE Linux Enterprise](https://www.suse.com/support/kb/doc/?id=3374462)
+ [Ubuntu](https://ubuntu.com/server/docs/kernel-crash-dump)
+ [Red Hat Enterprise Linux (RHEL)](https://access.redhat.com/solutions/6038)

### Windows 实例


**配置 Windows 以在发生停止错误时生成内存转储**

1. 连接到您的 实例。

1. 打开**控制面板**，然后选择**系统**、**高级系统设置**。

1. 在**系统属性**对话框中，选择**高级**选项卡。

1. 在**启动和恢复**部分中，选择**设置...**。

1. 在**系统故障**部分中，根据需要配置设置，然后选择**确定**。

有关配置 Windows 停止错误的更多信息，请参阅 [Windows 的内存转储文件概述](https://support.microsoft.com/en-us/help/254649/overview-of-memory-dump-file-options-for-windows)。

## 发送诊断中断


在完成必要的配置更改后，您可以使用 Amazon CLI 或 Amazon EC2 API 将诊断中断发送到实例。

------
#### [ Amazon CLI ]

**将诊断中断发送到实例**  
使用 [send-diagnostic-interrupt](https://docs.amazonaws.cn/cli/latest/reference/ec2/send-diagnostic-interrupt.html) 命令。

```
aws ec2 send-diagnostic-interrupt --instance-id i-1234567890abcdef0
```

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

**将诊断中断发送到实例**  
使用 [Send-EC2DiagnosticInterrupt](https://docs.amazonaws.cn/powershell/latest/reference/items/Send-EC2DiagnosticInterrupt.html) cmdlet。

```
Send-EC2DiagnosticInterrupt -InstanceId i-1234567890abcdef0
```

------