故障排除 AWS CloudShell - AWS CloudShell

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

故障排除 AWS CloudShell

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

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

纠正错误

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

无法启动环境。要重试,请刷新浏览器或通过选择 “操作”、“重新启动” 来重新启动 AWS CloudShell

问题:当您尝试 AWS CloudShell 从启动时 AWS Management Console,即使您获得了 IAM 管理员的所需权限,并且您已刷新浏览器或重新 CloudShell启动,您仍会被拒绝访问。

解决方案:联系 AWS Support

回到顶部

无法启动环境。您没有所需的权限。要求您的 IAM 管理员授予 AWS CloudShell的访问权限

问题:当您尝试 AWS CloudShell 从启动时 AWS Management Console,系统会拒绝您访问并通知您没有所需的权限。

原因:您用于访问的 IAM 身份 AWS CloudShell 缺少必要的 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) 向目标主机发送回显请求数据包。它会等待目标的回显回复。由于中未启用 ICMP 协议 AWS CloudShell,因此 ping 实用程序无法在外壳的计算环境中运行。

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

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

回到顶部

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

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

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

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

回到顶部

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

问题:在正常操作中,您可以使用箭头键浏览命令行界面,并来回扫描命令历史记录。但是,在某些版本的 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
  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 通信通常可以毫无问题地通过代理服务器。但是,在某些情况下,代理服务器 WebSockets 无法正常工作。如果出现此问题,则 CloudShell 无法启动 shell 会话,连接尝试最终会超时。

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

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

注意

假设您要通过允许列出特定 URL 来定义精细权限。您可以添加 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操作。

回到顶部

无法导入 AWSPowerShell.NetCore 模块

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

导入模块:指定的模块 '。AWSPowerShell NetCore'未加载,因为在任何模块目录中都找不到有效的模块文件。

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

解决方案:可能不再需要任何显式导入语句,或者需要将其更改为相关的每项服务 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 公告

回到顶部

使用 Docker 时未运行 AWS CloudShell

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

解决方案:尝试重启您的环境。当您在不支持 Docker 的区域 AWS CloudShell 中运行 Docker 时,可能会出现此错误消息。确保您在支持的区域中运行 Docker,有关哪些区域支持使用 Docker 容器的信息 AWS CloudShell,请参阅 Docker 区域。

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 的更多信息,请参阅 Dock er 文档指南。

docker push正在超时并且一直在重试

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

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

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

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

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

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

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

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

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