设想
我的工业 PC 有两个操作系统(虚拟机):
- 可与 PLC 控制器对话的实时操作系统
- 通用 Linux (Ubuntu 20.04) 发行版
这两个操作系统之间唯一可用的连接是通过虚拟网络。
虚拟网络
- Linux主机已
192.168.3.1
设置为IP地址 - RTOS 主机已
192.168.3.2
设置为 IP 地址
数据
8580
PLC 控制器生成的数据由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 服务器的数据,满意后出于安全原因希望关闭隧道。