SSH 端口转发配置,用于从在同一主机硬件上运行的另一个虚拟机访问虚拟机上的 TCP 端口

SSH 端口转发配置,用于从在同一主机硬件上运行的另一个虚拟机访问虚拟机上的 TCP 端口

设想

我的工业 PC 有两个操作系统(虚拟机):

  1. 可与 PLC 控制器对话的实时操作系统
  2. 通用 Linux (Ubuntu 20.04) 发行版

这两个操作系统之间唯一可用的连接是通过虚拟网络。

虚拟网络

  • Linux主机已192.168.3.1设置为IP地址
  • RTOS 主机已192.168.3.2设置为 IP 地址

数据

8580PLC 控制器生成的数据由Linux 主机可访问的端口进行控制和配置,即192.168.3.2:8580(在端口上可用的 RTOS 上运行 OPC-UA 服务器8580

场景描述图

要求

8580我希望在 Linux 计算机上创建一个 SSH 隧道,以便最终用户可以从 RTOS访问端口,通过 DHCP 提供的 Linux 计算机的 IP 地址从 OPC UA 服务器读取数据。

最终用户可以从中读取数据<IP-address-PC>:8580(这里IP-address-PC与虚拟网络不同,而是从DHCP服务器获取)

然而,我希望创建一个安全、定时的会话在这条隧道上。

安全、定时的会话

  • 隧道的创建时间应有限
  • 隧道一旦创建,应该只允许一次且仅有一次会议
  • 一旦会话结束,隧道就会关闭

初步调查

我经历了wikibooks for OpenSSH Tunneling Chapter它提到使用通过单个中间主机进行隧道传输这似乎可以达到目的

分解

ssh -f -g -L 8580:192.168.3.2:8580 admin@localhost sleep 60

-f:在后台运行该进程

-g:允许远程用户访问本地端口(linux上为8580)

-L:本地端口转发,无论 RTOS 上发生什么情况,192.168.3.2:8580都将其转发到此处

admin@localhost:事实证明 RTOS 上没有 SSH,因此维护此隧道的唯一方法是维护与 的连接localhost。最初执行命令时我仍然需要输入密码

sleep 60:等待用户尝试连接服务器60秒,如果无法连接则关闭隧道

我想我已经解决了定时隧道问题sleep 60

sshd_config和会话

我希望设置隧道,以便只有一个会话可用。这可以控制吗?

我如何能够将上述步骤编入配置中,sshd_config也许可以使用一度用户是谁admin

编辑

基于一些特定的需求,用户ssh在希望从RTOS获取数据时,实际上是手动触发上述命令的。我正在寻找可能会在某些情况下关闭 SSH 隧道的机制不活动经过一定时间后。

在很多情况下,用户可能只想窥视进入来自 OPC-UA 服务器的数据,满意后出于安全原因希望关闭隧道。

相关内容