本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
为远程设备打开隧道并使用基于浏览器的 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 控制台中的隧道创建方法。
从控制台为远程设备创建隧道
选择事物
RemoteDevice1
以查看其详细信息,然后选择 Create secure tunnel(创建安全隧道)。选择创建新隧道还是打开现有隧道。要创建新隧道,请选择 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-jsonfile://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
转到您创建的事物
RemoteDevice1
的详细信息页面,然后 Create secure tunnel(创建安全隧道)。选择 Use existing tunnel(使用现有隧道)打开您为远程设备创建的最新开放隧道。由于无法编辑隧道配置,因此您无法为隧道使用手动设置方法。要使用快速设置方法,请选择 Quick setup(快速设置)。
-
继续查看并确认隧道配置详细信息并创建隧道。无法编辑隧道配置。
创建隧道时,安全隧道将使用 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
-