如何在远程设备上使用 SSH 服务器并克服路由问题

物联网 联网 协议 linux
2021-06-05 08:43:13

我正在设计一个嵌入式 Linux 设备,用作传感器数据的网关。在某些情况下,该设备将使用我无法控制的回程(例如客户提供的单元或电缆调制解调器)。我假设该设备将位于某种 NAT 之后,并且在大多数安装中将通过 DHCP 分配网络参数。

对于典型的通信,设备将使用 REST Web 服务打开套接字。

我想添加一些安全的诊断、命令和控制功能。想要的是每个网关都运行类似 SSH 服务器的东西。这样我就可以拥有一个非常灵活的界面,人们可以按需使用它与行为不端的网关进行通信并排除故障或修复出现的问题。这提出了一些明显的安全问题,但我更感兴趣的是谈论我此时需要克服的网络障碍:

  1. 我的客户需要在他们的路由器上打开一个端口并转发我的设备的端口,或者我的设备需要直接连接到互联网而不是在 NAT 之后。
  2. 如果我的设备在 NAT 后面,它可能需要一个静态 IP
  3. 客户需要为其网络提供静态 IP,或者我们需要通过我们的 REST 接口捕获动态 IP。

我怎样才能打孔 SSH?

  1. 我可以让每个网关都像 SSH 客户端一样运行,并与我们的一台服务器打开一个会话,有什么方法可以传输或接管 SSH 会话吗?
  2. 我可以使用 IP-in-IP 连接或类似方式传输数据吗?
2个回答

不要尝试通过 NAT 以错误的方式连接到设备来解决此问题。

反过来,让设备连接到已知点(例如云主机),然后可以使用该点连接回设备。例如,当您想要进行调试时,设备上有一个按钮/配置选项,可以启动到已知点的 VPN 连接,用户可以在不再需要时将其关闭。

这也意味着任何攻击者都需要破坏 VPN 端点并让客户在他们进入之前启用“调试”模式。

设备仍然可以运行 SSH 服务器,但只能通过 VPN 连接使其可用,并且可以通过仅允许使用 SSH 密钥访问来保护访问(只有公共部分在设备上,因此它是否受到威胁并不重要) .

与其描述如何满足您的所有愿望,我会表现得好像有一个精确的问题。(我最近在这里找到的文章中可能涵盖了您的所有愿望

我要回答的确切问题是:我有一个收集传感器数据的 linux 网关。
我可以通过 shell 访问以“gatewayuser”身份登录的网关
我希望能够通过 ssh 从“互联网上的某个地方”访问该网关
我该怎么做?

好的,现在我们根据一些固定的标准工作。没错,SSH 和隧道就是答案。您可能无法或不想将传感器网关作为 Internet 上的固定位置公开。(至少,您的路由器可能会使其变得困难。)

所以,你要使用SSH反向转发
ssh -R

如果您希望您的传感器网关能够不断尝试建立此连接,您将希望另一端是静态 IP 地址或至少保持不变的主机名。

假设您使用一些便宜的 VPS 或开发人员层(免费)Amazon AWS(或其他)实例。假设这个公共主机被分配了 IP 地址 111.222.33.44 并且你创建了一个帐户“clouduser” 假设这个主机有可用的端口 2222。

从您的 linux 网关,您将输入命令

sudo ssh -R 2222:localhost:22 clouduser@111.222.33.44

从技术上讲,您将登录 111.222.33.44,如果您打算在 crontab 中运行它,那不一定是您想要的。

现在,从那个云服务器 111.222.33.44,假设你已经以 clouduser 的身份进入它,你可以运行

ssh -p 2222 localhost -l gatewayuser

有一些方法可以更好地保护它(想到绑定地址)并使其不必先登录网关(想到 crontab)。我发现那篇博客文章做得非常好,所以我将结束我简单的“做这件事”的回复,并将您推荐给这​​些资源。