打开隧道并启动与远程设备的 SSH 会话 - Amazon IoT Core
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

打开隧道并启动与远程设备的 SSH 会话

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

Prerequisites

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

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

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

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

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

打开隧道

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

在控制台中打开隧道

  1. Amazon IoT 控制台,导航到 Manage(管理),然后是 Tunnels(隧道)。

  2. 选择 Open New(打开新隧道)。

  3. Open a new secure(打开新的安全隧道)屏幕上,输入以下内容:

    1. 描述:对您隧道的描述。

    2. 事物名称:要为其打开隧道的事物。

    3. 服务:要在事物上使用的服务(例如 ssh,ftp 等)。

    4. 隧道超时配置:指定隧道的超时持续时间。

    5. 资源标签:对您的资源应用标签以帮助整理和识别资源。由区分大小写的键值对组成。

  4. 下载源和目标的客户端访问令牌。

  5. 选择 Done (完成)

启动本地代理

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

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

注意

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

-r

指定创建隧道的 Amazon Web Services 区域 。

-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. 打开 Amazon IoT 控制台

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