

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 故障排除 AWS CloudShell
<a name="troubleshooting"></a>

使用时 AWS CloudShell，您可能会遇到问题，例如使用 shell 命令行界面启动 CloudShell 或执行关键任务时。本章介绍的信息涵盖如何解决您可能遇到的一些常见问题。

有关各种问题的答案 CloudShell，请参阅[AWS CloudShell FAQs](https://aws.amazon.com/cloudshell/faqs/)。您还可以在[AWS CloudShell 论坛](https://repost.aws/tags/TA5ZaPf1NkT4uNitnWVitlyQ/aws-cloud-shell)上搜索答案和发布问题。当您进入此论坛时，可能会要求您登录 AWS。您也可以直接[联系我们](https://aws.amazon.com/contact-us/)。

## 错误故障排除
<a name="troubleshooting-errors"></a>

当您遇到以下任何索引错误时，可以使用以下解决方案来解决这些错误。

**Topics**
+ [拒绝访问](#unable-to-launch-cloudshell)
+ [权限不足](#no-access-cloudshell)
+ [无法访问 AWS CloudShell 命令行](#locked-out-cloudshell)
+ [无法 ping 外部 IP 地址](#ping-cloudshell)
+ [准备您的终端时遇到了一些问题](#old-browser-issue-cloudshell)
+ [箭头键在中无法正常工作 PowerShell](#pwsh-arrow-keys)
+ [不支持的 Web 套接字会导致无法启动 CloudShell 会话](#web-sockets-cloudshell)
+ [无法导入 `AWSPowerShell.NetCore` 模块](#import-PowerShell-module)
+ [使用 Docker 时未运行 AWS CloudShell](#docker-not-running)
+ [Docker 的磁盘空间已耗尽](#docker-space-full)
+ [`docker push` 超时并且一直在重试](#docker-push-timeout)
+ [无法从我的 VPC 环境中访问 V AWS CloudShell PC 内的资源](#unable-access-VPC-resources)
+ [AWS CloudShell 用于我的 VPC 环境的 ENI 未被清除](#unable-cleanup-VPC-ENI)
+ [仅具有 VPC 环境`CreateEnvironment`权限的用户也可以访问公共 AWS CloudShell 环境](#user-has-access-to-publicCloudShellenv)

### 拒绝访问
<a name="unable-to-launch-cloudshell"></a>

**问题：**当您尝试 CloudShell从启动时 AWS 管理控制台，会收到消息 “无法启动环境。要重试，请刷新浏览器或通过选择‘操作’、‘重新启动 AWS CloudShell’来重新启动”。即使您获得了 IAM 管理员的所需权限，并且您已刷新或重新 CloudShell启动浏览器，您仍会被拒绝访问。

**解决方案：**联系 [AWS 支持部门](https://aws.amazon.com/contact-us/)。

（[回到顶部](#troubleshooting)）

### 权限不足
<a name="no-access-cloudshell"></a>

**问题：**当您尝试 CloudShell从启动时 AWS 管理控制台，会收到消息 “无法启动环境。您没有所需的权限。要求您的 IAM 管理员授予对 AWS CloudShell“的访问权限。系统会拒绝您访问并通知您没有所需的权限。

**原因：**您用于访问的 IAM 身份 AWS CloudShell 缺少必要的 IAM 权限。

**解决方案：**请求您的 IAM 管理员为您提供必要的权限。他们可以通过添加附加的 AWS 托管策略 (AWSCloudShellFullAccess) 或嵌入式内联策略来实现此目的。有关更多信息，请参阅 [使用 IAM 策略管理 AWS CloudShell 访问和使用情况](sec-auth-with-identities.md#sec-auth-with-identities.title)。

（[回到顶部](#troubleshooting)）

### 无法访问 AWS CloudShell 命令行
<a name="locked-out-cloudshell"></a>

 **问题：**修改计算环境使用的文件后，您无法在中访问命令行 AWS CloudShell。

 **解决方案：**如果修改错误`.bashrc`或任何其他文件后失去访问权限，则可以通过[删除主目录 AWS CloudShell](getting-started.md#delete-shell-session)来恢复其默认设置。

（[回到顶部](#troubleshooting)）

### 无法 ping 外部 IP 地址
<a name="ping-cloudshell"></a>

**问题：**从命令行（例如，`ping amazon.com`）运行 ping 命令时，您会收到以下消息。

```
ping: socket: Operation not permitted
```

**原因**：ping 实用程序使用 Internet 控制消息协议 (ICMP) 向目标主机发送回显请求数据包。它会等待目标的回显回复。由于中未启用 ICMP 协议 AWS CloudShell，因此 ping 实用程序无法在外壳的计算环境中运行。

**解决方案**：由于中不支持 ICMP AWS CloudShell，您可以运行以下命令来安装 Netcat。Netcat 是一款计算机网络实用程序，用于使用 TCP 或 UDP 读取和写入网络连接。

```
sudo yum install nc
nc -zv www.amazon.com 443
```

（[回到顶部](#troubleshooting)）

### 准备您的终端时遇到了一些问题
<a name="old-browser-issue-cloudshell"></a>

**问题：**尝试 AWS CloudShell 使用 Microsoft Edge 浏览器进行访问时，你无法启动 shell 会话，并且浏览器会显示一条错误消息。

**原因**：与早期版本 AWS CloudShell 的 Microsoft Edge 不兼容。您可以使用支持的浏览器的最新四个主要版本进行访问 AWS CloudShell 。

**解决方案：**从 [Microsoft 网站](https://www.microsoft.com/en-us/edge)安装更新版本的 Edge 浏览器。

（[回到顶部](#troubleshooting)）

### 箭头键在中无法正常工作 PowerShell
<a name="pwsh-arrow-keys"></a>

**问题：**在正常操作中，您可以使用箭头键浏览命令行界面，并来回扫描命令历史记录。但是，在某些版本的 PowerShell on 中按箭头键时 AWS CloudShell，可能会错误地输出字母。

**原因**：在 Linux 上运行的 PowerShell 7.2.x 版本中，箭头键错误输出字母的情况是一个已知问题。

**解决方案：**要删除修改箭头键行为的转义序列，请编辑 PowerShell 配置文件并将`$PSStyle`变量设置为`PlainText`。

1. 在 AWS CloudShell 命令行中，输入以下命令以打开配置文件。

   ```
   vim ~/.config/powershell/Microsoft.PowerShell_profile.ps1 
   ```
**注意**  
如果您已经在编辑器中 PowerShell，也可以使用以下命令在编辑器中打开配置文件。  

   ```
   vim $PROFILE
   ```

1. 在编辑器中，转到文件现有文本的末尾，按 **i** 进入**插入**模式，然后添加以下语句。

   ```
   $PSStyle.OutputRendering = 'PlainText'
   ```

1. 编辑完成后，按下 **Esc** 进入命令模式。接下来，请输入以下命令保存文件，然后退出编辑器。

   ```
   :wq
   ```

**注意**  
您的更改将在下次开始时生效 PowerShell。

（[回到顶部](#troubleshooting)）

### 不支持的 Web 套接字会导致无法启动 CloudShell 会话
<a name="web-sockets-cloudshell"></a>

**问题：**当你尝试启动时 AWS CloudShell，你会反复收到以下消息：`Failed to open sessions : Timed out while opening the session`。

**原因**: CloudShell 取决于*WebSocket 协议*, 它允许在您的Web浏览器和之间进行双向交互式通信 AWS CloudShell. 如果您在专用网络中使用浏览器，则代理服务器和防火墙可能有助于安全访问互联网。 WebSocket 通信通常可以毫无问题地通过代理服务器。但是，在某些情况下，代理服务器 WebSockets 无法正常工作。如果出现此问题，则 CloudShell 无法启动 shell 会话，连接尝试最终会超时。

**解决方案：**连接超时可能是由不支持 WebSockets以外的其他问题引起的。如果是这种情况，请先刷新 CloudShell 命令行界面所在的浏览器窗口。

如果刷新后仍然出现超时错误，请参阅代理服务器的文档。并且，请确保您的代理服务器已配置为允许 WebSocket。或者，请与您网络的系统管理员联系。

**注意**  
假设您想通过特定许可名单来定义精细权限。 URLs您可以添加 AWS Systems Manager 会话用来打开 WebSocket连接以发送输入和接收输出的部分 URL。您的 AWS CloudShell 命令将发送到该 Systems Manager 会话。  
 Systems Manager 使用的格式是` wss://ssmmessages.region.amazonaws.com/v1/data-channel/session-id?stream=(input|output)`。 StreamUrl   
该**区域**表示支持的区域标 AWS 区域 识符 AWS Systems Manager。例如，`us-east-2` 是美国东部（俄亥俄州）区域的区域标识符。  
由于**会话 ID** 是在特定 Systems Manager 会话成功启动*后*创建的，因此您只能在更新 URL 允许列表时指定 `wss://ssmmessages.region.amazonaws.com`。有关更多信息，请参阅 *AWS Systems Manager API 参考*中的[StartSession](https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_StartSession.html)操作。

（[回到顶部](#troubleshooting)）

### 无法导入 `AWSPowerShell.NetCore` 模块
<a name="import-PowerShell-module"></a>

**问题：**导入 AWSPower命令行管理程序时。 NetCore在 b PowerShell y 的模块中`Import-Module -Name AWSPowerShell.NetCore`，您会收到以下错误消息：

导入模块：指定的模块 “Shell” AWSPower。 NetCore' 未加载，因为在任何模块目录中都找不到有效的模块文件。

**原因：**该`AWSPowerShell.NetCore`模块已被中每个服务的 AWS.Tools 模块所取代。 AWS CloudShell

**解决方案：**可能不再需要任何显式导入语句，或者需要将其更改为相关的每项服务 AWS.Tools 模块。

**Example**  

**Example**  
+ 在大多数情况下，只要不使用 .Net 类型，就不需要任何显式导入语句。以下是导入语句的示例。
  + `Get-S3Bucket`
  + `(Get-EC2Instance).Instances`
+ 如果使用 .Net 类型，请导入服务级别模块 (`AWS.Tools.<Service>`)。以下是语法示例。

  ```
  Import-Module -Name AWS.Tools.EC2
  $InstanceTag = [Amazon.EC2.Model.Tag]::new("Environment","Dev")
  ```

  ```
  Import-Module -Name AWS.Tools.S3 
  $LifecycleRule = [Amazon.S3.Model.LifecycleRule]::new()
  ```

有关更多信息，请参阅 AWS Tools for PowerShell的[版本 4 公告](https://aws.amazon.com/blogs/developer/aws-tools-for-powershell-is-now-generally-available-with-version-4-0/)。

（[回到顶部](#troubleshooting)）

### 使用 Docker 时未运行 AWS CloudShell
<a name="docker-not-running"></a>

**问题：**使用 AWS CloudShell时 Docker 无法正常运行。您会收到以下错误：`docker: Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?`。

**解决方案：**尝试重启您的环境。当您在某个 GovCloud区域中 AWS CloudShell 运行 Docker 时，可能会出现此错误消息。请确保您在支持的 AWS 区域中运行 Docker。有关可用 Docker 的区域列表，请参阅[支持的 AWS 区域。 AWS CloudShell](supported-aws-regions.md)

### Docker 的磁盘空间已耗尽
<a name="docker-space-full"></a>

**问题：**您收到以下错误消息：`ERROR: failed to solve: failed to register layer: write [...]: no space left on device`。

**原因：**Dockerfile 超出了中的可用磁盘空间。 AWS CloudShell这可能是由于单个映像过大或预先存在的 Docker 映像过多造成的。

**解决方案：**运行 `df -h` 以查找磁盘使用情况。运行 `sudo du -sh /folder/folder1` 来评估某些您认为可能很大的文件夹的大小，并考虑删除其他文件以释放空间。一种选择是考虑通过运行 `docker rmi` 来删除未使用的 Docker 映像。您应该知道 Docker 在环境中的空间有限，有关 Docker 的更多信息，请参阅 [Docker 文档指南](https://docs.docker.com/guides/docker-overview/)。

### `docker push` 超时并且一直在重试
<a name="docker-push-timeout"></a>

**问题：**当您运行 `docker push` 时，它会超时，并且会继续重试，但没有成功。

**原因：**这可能是由于缺少权限、推送到错误的存储库或缺乏身份验证所致。

**解决方案：**要尝试解决此问题，请确保推送到正确的存储库。运行 `docker login` 以正确进行身份验证。确保您拥有推送到 Amazon ECR 存储库的所有必需权限。

### 无法从我的 VPC 环境中访问 V AWS CloudShell PC 内的资源
<a name="unable-access-VPC-resources"></a>

**问题：**使用我的 VPC 环境时无法访问 V AWS CloudShell PC 内的资源。

**原因：**您的 AWS CloudShell VPC 环境继承了 VPC 的网络设置。

**解决方案：**要解决此问题，请确保正确设置您的 VPC 以访问您的资源。有关更多信息，请参阅 VPC 文档[将您的 VPC 连接到其他网络](https://docs.aws.amazon.com//vpc/latest/userguide/extend-intro.html)，以及网络访问分析器文档[网络访问分析器](https://docs.aws.amazon.com//vpc/latest/network-access-analyzer/what-is-network-access-analyzer.html)。您可以通过在环境中的命令**`ip -a`**行提示符下或在 AWS CloudShell VPC 控制台页面上运行命令来找到 VPC 环境正在使用 IPv4 的地址。

### AWS CloudShell 用于我的 VPC 环境的 ENI 未被清除
<a name="unable-cleanup-VPC-ENI"></a>

**问题：**无法清理 AWS CloudShell 用于我的 VPC 环境的 ENI。

**原因：**您的角色未启用 `ec2:DeleteNetworkInterface` 权限。

**解决方案：**要解决此问题，请确保您的角色已启用 `ec2:DeleteNetworkInterface` 权限，如以下脚本示例所示：

```
{
  "Effect": "Allow",
  "Action": [
    "ec2:DeleteNetworkInterface"
  ],
  "Condition": {
    "StringEquals": {
      "aws:ResourceTag/ManagedByCloudShell": ""
    }
  },
  "Resource": "arn:aws:ec2:*:*:network-interface/*"
}
```

### 仅具有 VPC 环境`CreateEnvironment`权限的用户也可以访问公共 AWS CloudShell 环境
<a name="user-has-access-to-publicCloudShellenv"></a>

**问题：**仅获得 VPC 环境`CreateEnvironment`权限限制的用户也可以访问公共 AWS CloudShell 环境。

**原因：**如果您仅限制创建 VPC 环境的`CreateEnvironment`权限，并且您已经创建了公共环境，则在使用 Web 用户界面删除该 CloudShell环境之前，您将保留对现有公共环境的访问权限。但是，如果您 CloudShell 以前从未使用过，则将无法访问公共环境。

**解决方案：**要限制对公共 AWS CloudShell 环境的访问，IAM 管理员必须先使用限制更新 IAM 策略，然后用户必须使用 AWS CloudShell Web 用户界面手动删除现有的公共环境。（**操作** → **删除 CloudShell 环境**）。