

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

# 故障診斷 AWS CloudShell
<a name="troubleshooting"></a>

使用 時 AWS CloudShell，您可能會遇到問題，例如當您啟動 CloudShell 或使用 shell 命令列界面執行關鍵任務時。本章涵蓋的資訊涵蓋了如何對您可能遇到的一些常見問題進行故障診斷。

如需 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 Sockets 會導致無法啟動 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 環境存取 AWS CloudShell VPC 內的資源](#unable-access-VPC-resources)
+ [用於我的 VPC 環境 AWS CloudShell 的 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 Support](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`或任何其他檔案後失去存取權，您可以透過[刪除主目錄](getting-started.md#delete-shell-session) AWS CloudShell 來返回其預設設定。

([回到頁首](#troubleshooting))

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

**問題：**當您從命令列執行 ping 命令 （例如 `ping amazon.com`) 時，您會收到下列訊息。

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

**原因**：ping 公用程式使用網際網路控制訊息通訊協定 (ICMP) 將回應請求封包傳送至目標主機。它會等待回音從目標回覆。由於未在 中啟用 ICMP 通訊協定 AWS CloudShell，Ping 公用程式不會在 shell 的運算環境中操作。

**解決方案**：由於 不支援 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 工作階段，瀏覽器會顯示錯誤訊息。

**Cause**：與舊版 Microsoft Edge AWS CloudShell 不相容。您可以使用支援瀏覽器 AWS CloudShell 的最新四個主要版本來存取 。

**解決方案：**從 [ Microsoft 網站](https://www.microsoft.com/en-us/edge)安裝更新版本的 Edge 瀏覽器。

([回到頁首](#troubleshooting))

### PowerShell 中的方向鍵無法正常運作
<a name="pwsh-arrow-keys"></a>

**問題：**在正常操作中，您可以使用方向鍵導覽命令列界面，並透過命令歷史記錄向後和向前掃描。但是，當您在 上按下特定 PowerShell 版本中的方向鍵時 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 Sockets 會導致無法啟動 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 命令列界面所在的瀏覽器視窗。

如果您在重新整理後仍然收到逾時錯誤，請參閱代理伺服器的文件。此外，請確定您的代理伺服器已設定為允許 Web Sockets。或者，請聯絡網路的系統管理員。

**注意**  
假設您想要透過允許列出特定 URLs 來定義精細許可。您可以新增 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 區域 支援之 的區域識別符 AWS Systems Manager。例如， `us-east-2`是美國東部 （俄亥俄） 區域的區域識別符。  
由於 **session-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>

**問題：**當您透過 在 PowerShell 中匯入 AWSPowerShell.NetCore 模組時`Import-Module -Name AWSPowerShell.NetCore`，您會收到下列錯誤訊息：

Import-Module：指定的模組「AWSPowerShell.NetCore'未載入，因為在任何模組目錄中找不到有效的模組檔案。

**原因：**`AWSPowerShell.NetCore`模組會由 中的 per-service. AWS Tools 模組取代 AWS CloudShell。

**解決方案：**可能不再需要任何明確的匯入陳述式，或需要變更為相關的每個服務 AWS。工具模組。

**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()
  ```

如需詳細資訊，請參閱 的第 [4 版公告](https://aws.amazon.com/blogs/developer/aws-tools-for-powershell-is-now-generally-available-with-version-4-0/) AWS Tools for PowerShell。

([回到頁首](#troubleshooting))

### 使用 時，Docker 未執行 AWS CloudShell
<a name="docker-not-running"></a>

**問題：**使用 時，Docker 未正確執行 AWS CloudShell。您會收到下列錯誤訊息：`docker: Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?`。

**解決方案：**嘗試重新啟動您的環境。當您 AWS CloudShell 在 GovCloud 區域中的 中執行 Docker 時，可能會發生此錯誤訊息。請確定您在支援的區域中執行 Docker AWS 。如需可使用 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 映像`docker rmi`。您應該知道 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 環境存取 AWS CloudShell VPC 內的資源
<a name="unable-access-VPC-resources"></a>

**問題：**使用我的 VPC 環境時，無法存取 AWS CloudShell VPC 內的資源。

**原因：**您的 AWS CloudShell VPC 環境會繼承 VPC 的網路設定。

**解決方案：**若要解決此問題，請確定您的 VPC 已正確設定以存取您的 資源。如需詳細資訊，請參閱 VPC 文件 [將您的 VPC 連接到其他網路](https://docs.aws.amazon.com//vpc/latest/userguide/extend-intro.html)，以及 和 Network Access Analyzer 文件 [Network Access Analyzer](https://docs.aws.amazon.com//vpc/latest/network-access-analyzer/what-is-network-access-analyzer.html)。您可以在命令列提示字元或 AWS CloudShell VPC 主控台頁面中，在您的環境**`ip -a`**內執行 命令，找到 VPC 環境正在使用的 IPv4 地址。

### 用於我的 VPC 環境 AWS CloudShell 的 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`許可，且如果您已建立公有環境，您將保留對現有公有 CloudShell 環境的存取權，直到使用 Web 使用者介面刪除此環境為止。但是，如果您從未使用過 CloudShell，您將無法存取公有環境。

**解決方案：**若要限制對公 AWS CloudShell 有環境的存取，IAM 管理員必須先使用 限制更新 IAM 政策，然後使用者必須使用 AWS CloudShell Web 使用者介面手動刪除現有的公有環境。(**動作** → **刪除 CloudShell 環境**)。