AWS IoT 安全隧道教程 - AWS IoT
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

AWS IoT 安全隧道教程

在本教程中,您将打开一个隧道并使用它启动远程设备的 SSH 会话。远程设备位于防火墙后面,由于防火墙会阻止所有入站流量,所以 SSH 会话无法直接进入设备。在开始之前,请确保您了解如何在 AWS IoT 注册表中注册设备将设备连接到 AWS IoT 设备网关

先决条件

  • 远程设备前面的防火墙必须允许端口 443 上的出站流量。

  • 您已在 AWS IoT 注册表中创建一个名为 RemoteDeviceA 的 IoT 事物。

  • 您有一个 IoT 设备代理在远程设备上运行,该代理连接到 AWS IoT 设备网关,并配置了 MQTT 主题订阅。本教程包含一个片段,向您展示如何实现代理。有关更多信息,请参阅IoT 代理代码段

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

  • 您已经从 GitHub 下载了本地代理源代码,并为您选择的平台构建了它。在本教程中,我们将构建的本地代理可执行文件称为 localproxy

打开隧道

  • 远程设备前面的防火墙必须允许端口 443 上的出站流量。

  • 您已在 AWS IoT 注册表中创建一个名为 RemoteDeviceA 的 IoT 事物。

  • 您有一个 IoT 设备代理在远程设备上运行,该代理连接到 AWS IoT 设备网关,并配置了 MQTT 主题订阅。本教程包含一个片段,向您展示如何实现代理。有关更多信息,请参阅IoT 代理代码段

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

  • 您已经从 GitHub 下载了本地代理源代码,并为您选择的平台构建了它。在本教程中,我们将构建的本地代理可执行文件称为 localproxy

如果您在调用 OpenTunnel 时配置目标,则安全隧道服务会通过 MQTT 和保留的 MQTT 主题 ($aws/things/RemoteDeviceA/tunnels/notify) 将目标客户端访问令牌传送到远程设备。有关更多信息,请参阅保留的主题。收到 MQTT 消息后,远程设备上的 IoT 代理会以目标模式启动本地代理。如果要通过另一种方法将目标客户端访问令牌传送到远程设备,则可以省略目标配置。有关更多信息,请参阅配置远程设备

启动本地代理

在笔记本电脑上打开终端,复制源客户端访问令牌,然后使用它在源模式下启动本地代理。在以下命令中,本地代理配置为侦听端口 5555 上的新连接。

./localproxy -r us-east-1 -s 5555 -t <source-client-access-token>

注意

此命令中的 AWS 区域必须与创建隧道的 AWS 区域相同。

-r

指定创建隧道的 AWS 区域。

-s

指定代理应连接到的端口。

-t

指定客户端令牌文本。

注意

如果收到以下错误,请设置 CA 路径。有关信息,请参阅 GitHub

Could not perform SSL handshake with proxy server: certificate verify failed

启动 SSH 会话

打开另一个终端并使用以下命令通过连接到端口 5555 上的本地代理来启动新的 SSH 会话。

ssh <username>@localhost -p 5555

系统可能会提示您输入 SSH 会话的密码。完成 SSH 会话后,键入 exit 以关闭会话。

关闭隧道

  1. 打开 AWS IoT 控制台

  2. 选择隧道,然后从 Actions (操作) 中选择 Close (关闭)。关闭隧道会导致两个本地代理实例关闭。