为远程设备打开隧道并使用基于浏览器的 SSH - Amazon IoT Core
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

为远程设备打开隧道并使用基于浏览器的 SSH

在 Amazon IoT 控制台中,您可以从隧道中心创建隧道,也可以从您创建的 IoT 事物的详细信息页面创建隧道。从隧道中心创建隧道时,可以指定是使用快速设置还是手动设置来创建隧道。有关示例教程,请参阅打开隧道并启动与远程设备的 SSH 会话

从 Amazon IoT 控制台的事物详细信息页面创建隧道时,您还可以指定是为该事物创建新隧道还是打开现有隧道,如本教程所示。如果选择现有隧道,可以访问为该设备创建的最新的已打开隧道。然后,可以使用终端中的命令行界面通过 SSH 连接到设备。

先决条件

  • 位于远程设备前面的防火墙必须允许端口 443 上的出站流量。您创建的隧道将使用此端口连接到远程设备。

  • 您已在 Amazon IoT 注册表中创建了一个物联网事物(例如RemoteDevice1)。此事物对应于云中您的远程设备表示。有关更多信息,请参阅在 Amazon IoT 注册表中注册设备

  • 您在远程设备上运行 IoT 设备代理(参见IoT 代理代码段),该设备连接到 Amazon IoT 设备网关,并配置了 MQTT 主题订阅。有关更多信息,请参阅将设备连接到 Amazon IoT 设备网关

  • 您必须在远程设备上运行 SSH 守护进程。

为远程设备打开新隧道

假设您要打开一条通往远程设备 RemoteDevice1 的隧道。首先,在 Amazon IoT 注册表中创建一个名为 RemoteDevice1 的 IoT 事物。然后,您可以使用 Amazon Web Services Management Console、 Amazon IoT API 参考 API 或创建隧道 Amazon CLI。

通过在创建隧道时配置目标,安全隧道服务可通过 MQTT 和保留的 MQTT 主题 ($aws/things/RemoteDeviceA/tunnels/notify) 将目标客户端访问令牌传递给远程设备。有关更多信息,请参阅 Amazon IoT 控制台中的隧道创建方法

从控制台为远程设备创建隧道
  1. 选择事物 RemoteDevice1 以查看其详细信息,然后选择 Create secure tunnel(创建安全隧道)。

    显示名为 “RemoteDevice1” 的设备的详细信息及其亚马逊资源名称 (ARN)。
  2. 选择创建新隧道还是打开现有隧道。要创建新隧道,请选择 Create new tunnel(创建新隧道)。然后,您可以选择是使用手动设置方法还是快速设置方法来创建隧道。有关更多信息,请参阅 使用手动设置打开隧道并连接到远程设备打开隧道并使用基于浏览器的 SSH 访问远程设备

使用 API 为远程设备创建隧道

要打开新隧道,可以使用 OpenTunnelAPI 操作。以下代码显示了运行此命令的示例。

aws iotsecuretunneling open-tunnel \ --region us-east-1 \ --endpoint https://api.us-east-1.tunneling.iot.amazonaws.com --cli-input-json file://input.json

以下显示了 input.json 文件的内容。您可以使用 destinationConfig 参数指定目标设备的名称(例如 RemoteDevice1)和要用来访问目标设备的服务(例如 SSH)。您还可以选择指定其他参数,例如隧道描述和标签。

input.json 的内容

{ "description": "Tunnel to remote device1", "destinationConfig": { "services": [ "SSH" ], "thingName": "RemoteDevice1" } }

运行此命令将创建新隧道,并为您提供源和目标访问令牌。

{ "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

假设您使用手动设置方法或使用 Amazon IoT API 参考 API 为远程设备创建了隧道。RemoteDevice1然后,您可以打开设备的现有隧道,并选择 Quick setup(快速设置)以使用基于浏览器的 SSH 特征。由于无法编辑现有隧道的配置,因此您无法使用手动设置方法。

要使用基于浏览器的 SSH 特征,您无需下载源访问令牌,也无需配置本地代理。系统将自动为您配置基于 Web 的本地代理,以便您可以开始与远程设备交互。

使用快速设置方法和基于浏览器的 SSH
  1. 转到您创建的事物 RemoteDevice1 的详细信息页面,然后 Create secure tunnel(创建安全隧道)。

  2. 选择 Use existing tunnel(使用现有隧道)打开您为远程设备创建的最新开放隧道。由于无法编辑隧道配置,因此您无法为隧道使用手动设置方法。要使用快速设置方法,请选择 Quick setup(快速设置)。

  3. 继续查看并确认隧道配置详细信息并创建隧道。无法编辑隧道配置。

    创建隧道时,安全隧道将使用 RotateTunnelAccessTokenAPI 操作撤消原始访问令牌并生成新的访问令牌。如果您的远程设备使用 MQTT,这些令牌将通过其订阅的 MQTT 主题自动传送到远程设备。也可以选择将这些令牌手动下载到源设备。

创建隧道后,您可以使用基于浏览器的 SSH 和上下文命令行界面直接从控制台与远程设备进行交互。要使用此命令行界面,请为创建的事物选择隧道,然后在详细信息页面中展开 Command-line interface(命令行界面)部分。由于已经为您配置了本地代理,因此,您可以开始输入命令以快速开始访问远程设备 RemoteDevice1 并与之交互。

有关快速设置方法和使用基于浏览器的 SSH 的更多信息,请参阅打开隧道并使用基于浏览器的 SSH 访问远程设备

清理

  • 关闭隧道

    我们建议您在使用完隧道后将其关闭。如果隧道的打开时间超过指定的隧道持续时间,隧道也可能会关闭。隧道一旦关闭就无法重新打开。您仍然可以通过打开关闭的隧道,然后选择 Duplicate tunnel(复制隧道)来复制隧道。指定要使用的隧道持续时间,然后创建新隧道。

    • 要从 Amazon IoT 控制台关闭单条隧道或多条隧道,请转到 Tunnels hub(隧道中心),选择要关闭的隧道,然后选择 Close tunnel(关闭隧道)。

    • 要使用 Amazon IoT API 参考 API 关闭单个或多个隧道,请使用 CloseTunnelAPI 操作。

      aws iotsecuretunneling close-tunnel \ --tunnel-id "01234567-89ab-0123-4c56-789a01234bcd"
  • 删除隧道

    您可以从中永久删除隧道 Amazon Web Services 账户。

    警告

    删除是永久性操作,无法撤消。

    • 要从 Amazon IoT 控制台删除单条隧道或多条隧道,请转到 Tunnels hub(隧道中心),选择要删除的隧道,然后选择 Delete tunnel(删除隧道)。

    • 要使用 Amazon IoT API 参考 API 删除单个或多个隧道,请使用 CloseTunnelAPI 操作。使用 API 时,将 delete 标志设置为 true

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