

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

# 開啟通道並使用瀏覽器型 SSH 來存取遠端裝置
<a name="tunneling-tutorial-quick-setup"></a>

您可以使用快速設定或手動設定方法來建立通道。本教學課程說明如何使用快速設定方法開啟通道，並使用瀏覽器型 SSH 連線至遠端裝置。如需查看如何使用手動設定方法來開啟通道的範例，請參閱 [使用手動設定開啟通道並連線至遠端裝置](tunneling-tutorial-manual-setup.md)。

您可以透過快速設定方法，使用可編輯的預設組態建立新的通道。已為您設定 Web 型本機代理，並使用 MQTT 將存取權杖自動傳遞到您的遠端目的地裝置。建立通道後，您可以使用主控台內的命令列介面開始與遠端裝置互動。

若採用快速設定方法，您必須使用 SSH 作為目的地服務才能存取遠端裝置。如需不同設定方法的詳細資訊，請參閱 [通道設定方法](secure-tunneling-tutorial-open-tunnel.md#tunneling-tutorial-setup-methods)。

## 快速設定方法的先決條件
<a name="tunneling-tutorial-quick-prerequisites"></a>
+ 遠端裝置所在的防火牆必須允許連接埠 443 上的傳出流量。您建立的通道將使用此通訊埠連線至遠端裝置。
+ 您有 IoT 裝置代理程式 （請參閱 [IoT Agent Snippet](configure-remote-device.md#agent-snippet)) 在連線至 AWS IoT 裝置閘道的遠端裝置上執行，並使用 MQTT 主題訂閱設定。如需詳細資訊，請參閱[將裝置連線至 AWS IoT 裝置閘道](https://docs.aws.amazon.com/iot/latest/developerguide/sdk-tutorials.html)。
+ 您必須具有一個在遠端裝置上執行的 SSH 常駐程式。

## 開啟通道
<a name="open-tunnel-quick"></a>

您可以使用 AWS 管理主控台、 AWS IoT API 參考或 來開啟安全通道 AWS CLI。您可以選擇設定目的地名稱，但這並非本教學課程的必要步驟。如果您設定目的地，安全通道會使用 MQTT 自動將存取權杖傳遞至遠端裝置。如需詳細資訊，請參閱[AWS IoT 主控台中的通道建立方法](secure-tunneling-tutorial-open-tunnel.md#tunneling-tutorial-flows)。

**若要使用主控台中開啟通道**

1. 前往 [AWS IoT 主控台的 Tunnels hub (通道中樞)](https://console.aws.amazon.com/iot/home#/tunnels)，然後選擇 **Create job** (建立通道)。  
![\[AWS IoT 主控台顯示空的通道清單，其中包含建立、關閉或刪除通道的選項。\]](http://docs.aws.amazon.com/zh_tw/iot/latest/developerguide/images/tunnels-page.png)

1. 在本教學課程中，請選擇 **Quick setup** (快速設定) 作為通道建立方法，然後選擇 **Next** (下一步)。
**注意**  
如果您從建立物件的詳細資訊頁面建立安全通道，您可以選擇要建立新通道或使用現有通道。如需詳細資訊，請參閱[開啟遠端裝置的通道並使用瀏覽器型 SSH](tunneling-tutorial-existing-tunnel.md)。  
![\[設定方法區段包含使用 SSH 或手動設定快速設定的選項，解釋快速設定會自動設定代理和存取字符。\]](http://docs.aws.amazon.com/zh_tw/iot/latest/developerguide/images/tunnels-choose-quick.PNG)

1. 檢閱並確認通道組態詳細資訊。若要建立通道，請選擇 **Confirm and create** (確認並建立)。如果您要編輯這些詳細資訊，請選擇 **Previous** (上一步) 返回上一頁，然後確認並建立通道。
**注意**  
使用快速設定時，將無法編輯服務名稱。您必須使用 **SSH** 作為**服務**。

1. 若要建立通道，請選擇 **Done** (完成)。

   在本教學課程中，您無需下載來源或目的地存取權杖。這些權杖只能用於連接通道一次。如果您的通道中斷連線，您可以產生新權杖並將其傳送到遠端裝置，以重新連線至通道。如需詳細資訊，請參閱[重新傳送通道存取權杖](tunneling-tutorial-manual-setup.md#resend-access-tokens)。  
![\[此對話方塊顯示用於建立安全通道連線的來源和目的地存取權杖，並視需要提供輪換和重新傳送權杖的指示。\]](http://docs.aws.amazon.com/zh_tw/iot/latest/developerguide/images/tunnel-success.png)

**若要使用主控台中開啟通道**  
若要開放新的通道，您可以使用 [OpenTunnel](https://docs.aws.amazon.com/iot/latest/apireference/API_iot-secure-tunneling_OpenTunnel.html) API 操作。

**注意**  
您只能從 AWS IoT 主控台使用快速設定方法建立通道。當您使用 AWS IoT API 參考 API 或 時 AWS CLI，將使用手動設定方法。您可以開啟您所建立的現有通道，然後變更通道的設定方法，即可使用快速設定。如需詳細資訊，請參閱[開啟現有的通道並使用瀏覽器型 SSH](tunneling-tutorial-existing-tunnel.md#tunneling-tutorial-existing-convert-tunnel)。

關於如何執行此 API 操作的範例如下所示。如果您要指定物件名稱和目的地服務，也可以選擇使用 `DestinationConfig` 參數。如需示範如何使用這個參數的範例，請參閱 [為遠端裝置開啟新通道](tunneling-tutorial-existing-tunnel.md#tunneling-tutorial-existing-open-tunnel)。

```
aws iotsecuretunneling open-tunnel
```

執行此命令會建立新的通道，並提供您來源和目的地存取權杖。

```
{
    "tunnelId": "01234567-89ab-0123-4c56-789a01234bcd",
    "tunnelArn": "arn:aws:iot:us-east-1:123456789012:tunnel/01234567-89ab-0123-4c56-789a01234bcd",
    "sourceAccessToken": "<SOURCE_ACCESS_TOKEN>",
    "destinationAccessToken": "<DESTINATION_ACCESS_TOKEN>"
}
```

## 使用瀏覽器型 SSH
<a name="tunneling-tutorial-quick-browser"></a>

在使用快速設定方法建立通道並且目的地裝置已連線至通道後，您就可以使用瀏覽器型 SSH 存取遠端裝置。透過瀏覽器型 SSH，您可以在主控台內的上下文命令列介面中輸入命令，即可直接與遠端裝置進行通訊。此功能可讓您更輕鬆地與遠端裝置互動，因為您不必在主控台外開啟終端或設定本機代理。

**若要使用瀏覽器型 SSH**

1. 前往 [AWS IoT 主控台的 Tunnels hub (通道中樞)](https://console.aws.amazon.com/iot/home#/tunnels)，然後選擇您建立的通道以檢視其詳細資訊。

1. 展開 **Secure Shell (SSH)** 區段，然後選擇 **Connect** (連線)。

1. 選擇是否要提供您的使用者名稱和密碼來驗證 SSH 連線，或者如需更安全的驗證，則可以使用裝置的私有金鑰。如果您使用私有金鑰進行身分驗證，請注意，只有 PEM 格式 (256 和 512) RSA 金鑰可與 AWS IoT Secure Tunneling SSH 主控台搭配使用。
   + 若要使用使用者名稱和密碼進行連線，請選擇 **Use password** (使用密碼)。然後，您可以輸入使用者名稱和密碼，並開始使用瀏覽器內的 CLI。
   + 若要使用目的地裝置的私有金鑰進行連線，請選擇 **Use private key** (使用私有金鑰)。指定您的使用者名稱並上傳裝置的私有金鑰檔案，然後選擇 **Connect** (連線) 以開始使用瀏覽器內 CLI。  
![\[使用私有金鑰透過瀏覽器 CLI 連線的表單對話方塊，顯示使用者名稱欄位，以及選擇或使用預先選取私有金鑰檔案的選項。\]](http://docs.aws.amazon.com/zh_tw/iot/latest/developerguide/images/tunnel-browser-private-key.png)

在通過 SSH 連接驗證後，您即可迅速開始使用瀏覽器 CLI 輸入命令並與裝置進行互動，因為系統已為您設定本機代理。

![\[程式碼片段顯示 React hook，用於管理 JavaScript 應用程式中的狀態和偏好設定。\]](http://docs.aws.amazon.com/zh_tw/iot/latest/developerguide/images/tunnel-browser-cli.PNG)


如果瀏覽器 CLI 在通道持續時間之後保持開啟狀態，則可能會發生逾時，導致命令列介面中斷連線。您可以複製通道並啟動另一工作階段，以便在主控台本身內部與遠端裝置互動。

## 解決使用瀏覽器型 SSH 時發生的問題
<a name="tunneling-tutorial-browser-troubleshoot"></a>

以下介紹如何解決使用瀏覽器型 SSH 時可能發生的一些問題。
+ 

**系統顯示錯誤，而不是命令列介面**  
您可能會看到錯誤，原因是目的地裝置中斷連線。您可以選擇 **Generate new access tokens** (產生新的存取權杖) 來產生新的存取權杖，並使用 MQTT 將權杖傳送到遠端裝置。新的權杖可以用來重新連線至通道。重新連線至通道會清除歷程記錄並重新整理命令列工作階段。
+ 

**使用私有金鑰進行驗證時，您會看到通道中斷連線的錯誤**  
您可能會看到錯誤訊息，原因可能是目的地裝置尚未接受您的私有金鑰。若要解決此錯誤，請檢查您上傳用於進行驗證的私有金鑰檔案。如果仍然看到錯誤，請檢查您的裝置日誌。您也可以向遠端裝置發送新的存取權杖，藉此嘗試重新連線至通道。
+ 

**您的通道已在使用工作階段時關閉**  
如果您的通道因保持開啟超過指定持續時間而關閉，則您的命令列工作階段可能會中斷連線。通道一旦關閉就不能重新開放。若要重新連線，您必須開啟另一個連往裝置的通道。

  您可以複製通道，以建立與已關閉通道相同組態的新通道。您可以從 AWS IoT 主控台複製已關閉的通道。若要複製通道，請選擇已關閉的通道以檢視其詳細資訊，然後選擇 **Duplicate tunnel** (複製通道)。指定您要使用的通道持續時間，然後建立新通道。

## 清除
<a name="tunnel-cleanup-quick"></a>
+ 

**關閉通道**  
我們建議您在使用完通道後關閉通道。如果開放時間超過指定的通道持續時間，通道也可能會關閉。通道一旦關閉就不能重新開放。您仍然可以選擇已關閉的通道，然後選擇 **Duplicate tunnel** (複製通道) 來複製通道。指定您要使用的通道持續時間，然後建立新通道。
  + 若要從 AWS IoT 主控台關閉個別通道或多個通道，請移至 [Tunnels hub](https://console.aws.amazon.com/iot/home#/tunnels) (通道中樞)，選擇您要關閉的通道，然後選擇**Close tunnel** (關閉通道)。
  + 若要使用 AWS IoT API 參考 API 關閉個別通道或多個通道，請使用 [CloseTunnel](https://docs.aws.amazon.com/iot/latest/apireference/API_iot-secure-tunneling_CloseTunnel.html) API。

    ```
    aws iotsecuretunneling close-tunnel \ 
        --tunnel-id "01234567-89ab-0123-4c56-789a01234bcd"
    ```
+ 

**刪除通道**  
您可以從 永久刪除通道 AWS 帳戶。
**警告**  
刪除動作為永久性動作，且無法還原。
  + 若要從 AWS IoT 主控台刪除個別通道或多個通道，請移至 [Tunnels hub](https://console.aws.amazon.com/iot/home#/tunnels) (通道中樞)，選擇您要刪除的通道，然後選擇**Delete tunnel** (刪除通道)。
  + 若要使用 AWS IoT API 參考 API 刪除個別通道或多個通道，請使用 [CloseTunnel](https://docs.aws.amazon.com/iot/latest/apireference/API_iot-secure-tunneling_CloseTunnel.html) API。使用 API 時，請將 `delete` 旗標設定為 `true`。

    ```
    aws iotsecuretunneling close-tunnel \ 
        --tunnel-id "01234567-89ab-0123-4c56-789a01234bcd"
        --delete true
    ```