排查 AWS CloudShell 问题 - AWS CloudShell

排查 AWS CloudShell 问题

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

有关 CloudShell 的各种问题的解答,请参阅常见问题解答AWS CloudShell。您还可以在AWS CloudShell论坛上搜索答案和发布问题。当您进入此论坛时,可能会要求您登录 AWS。您也可以直接联系我们

错误故障排除

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

拒绝访问

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

解决方案:联系 AWS 支持部门

回到顶部

权限不足

问题:当您尝试从 AWS 管理控制台启动 CloudShell 时,您会收到一条消息,指出“无法启动环境。您没有所需的权限。请让您的 IAM 管理员授予 AWS CloudShell 的访问权限”。系统会拒绝您访问并通知您没有所需的权限。

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

解决方案:请求您的 IAM 管理员为您提供必要的权限。他们可以通过添加附加的 AWS 托管策略 (AWSCloudShellFullAccess) 或嵌入内联策略来完成。有关更多信息,请参阅 使用 IAM 策略管理 AWS CloudShell 访问和使用情况

回到顶部

无法访问 AWS CloudShell 命令行

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

解决方案:如果您在错误修改 .bashrc 或任何其他文件后失去访问权限,则可以通过删除主目录将 AWS CloudShell 恢复到其默认设置。

回到顶部

无法 ping 外部 IP 地址

问题:从命令行(例如,ping amazon.com)运行 ping 命令时,您会收到以下消息。

ping: socket: Operation not permitted

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

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

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

回到顶部

准备您的终端时遇到了一些问题

问题:尝试使用 Microsoft Edge 浏览器访问 AWS CloudShell 时,您无法启动 Shell 会话,并且浏览器会显示一条错误消息。

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

解决方案:Microsoft 网站安装更新版本的 Edge 浏览器。

回到顶部

箭头键在 PowerShell 中无法正常工作

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

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

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

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

    vim ~/.config/powershell/Microsoft.PowerShell_profile.ps1
    注意

    如果您已经在 PowerShell 中,也可以使用以下命令在编辑器中打开配置文件。

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

    $PSStyle.OutputRendering = 'PlainText'
  3. 编辑完成后,按下 Esc 进入命令模式。接下来,请输入以下命令保存文件,然后退出编辑器。

    :wq
注意

您的更改将在下次启动 PowerShell 时生效。

回到顶部

不支持的 Web 套接字会导致无法启动 CloudShell 会话

问题:尝试启动 AWS CloudShell 时,您会反复收到以下消息:Failed to open sessions : Timed out while opening the session

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

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

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

注意

假设您要通过允许列出特定 URL 来定义精细权限。您可以添加 AWS Systems Manager 会话用来打开 WebSocket 连接以发送输入和接收输出的 URL 的一部分。您的 AWS CloudShell 命令将发送到该 Systems Manager 会话。

Systems Manager 使用的这个 StreamURL 的格式为 wss://ssmmessages.region.amazonaws.com/v1/data-channel/session-id?stream=(input|output)

区域表示 AWS Systems Manager 支持的 AWS 区域 的区域标识符。例如,us-east-2 是美国东部(俄亥俄州)区域的区域标识符。

由于会话 ID 是在特定 Systems Manager 会话成功启动创建的,因此您只能在更新 URL 允许列表时指定 wss://ssmmessages.region.amazonaws.com。有关更多信息,请参阅 AWS Systems Manager API 参考中的开始会话操作。

回到顶部

无法导入 AWSPowerShell.NetCore 模块

问题:当您通过 Import-Module -Name AWSPowerShell.NetCore 在 PowerShell 中导入 AWSPowerShell.NetCore 模块时,会收到以下错误消息:

导入模块:由于在任何模块目录中都找不到有效的模块文件,因此未加载指定的模块“AWSPowerShell.NetCore”

原因:AWSPowerShell.NetCore 模块已被 AWS CloudShell 中每个服务 AWS.Tools 模块所取代。

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

  • 在大多数情况下,只要不使用 .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 公告

回到顶部

使用 AWS CloudShell 时 Docker 未运行

问题:使用 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 CloudShell 支持的 AWS 区域

Docker 的磁盘空间已耗尽

问题:您收到以下错误消息: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 文档指南

docker push 超时并且一直在重试

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

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

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

无法从我的 AWS CloudShell VPC 环境访问 VPC 内的资源

问题:使用我的 AWS CloudShell VPC 环境时,无法访问 VPC 内的资源。

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

解决方案:要解决此问题,请确保正确设置您的 VPC 以访问您的资源。有关更多信息,请参阅 VPC 文档将您的 VPC 连接到其他网络,以及网络访问分析器文档网络访问分析器。可以通过在 VPC 环境中的命令行提示符下或在 VPC 控制台页面上运行命令 `ip -a`,来查找 AWS CloudShell VPC 环境正在使用的 IPv4 地址。

AWS CloudShell 用于我的 VPC 环境的 ENI 未被清理

问题:无法清理 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 环境

问题:具有仅创建 VPC 环境的 CreateEnvironment 权限的受限用户还可以访问公共 AWS CloudShell 环境。

原因:当您限制 CreateEnvironment 权限而只能创建 VPC 环境时并且如果您已经创建了公共环境,那么您将保留对现有公共 CloudShell 环境的访问权限,直到使用 Web 用户界面删除该环境。但是,如果您以前从未使用过 CloudShell,将无法访问公共环境。

解决方案:要限制对公共 AWS CloudShell 环境的访问,IAM 管理员必须先使用相关限制更新 IAM 策略,然后用户必须使用 AWS CloudShell Web 用户界面手动删除现有的公共环境。(操作删除 CloudShell 环境)。