有没有办法通过 ssh 隧道访问 /dev 目录中的设备,并像本地一样使用它?

有没有办法通过 ssh 隧道访问 /dev 目录中的设备,并像本地一样使用它?

有没有一种方法可以让一台计算机与另一台计算机共享目录中的设备/dev/,并且另一台计算机可以与其交互(如果它是本地的)?类似于 SSH 隧道的东西?

例如,相机,或与 arduino 的串行连接,甚至是计算机的/dev/random

答案1

简而言之,不。您与设备节点交互的方式比您可以对实际文件执行的方式“更丰富”,并且如果远程计算机上的内核无法访问本地进程内存(通过网络则无法访问),这是不可能的。

更不用说您想要使用的许多东西只是具有不合理的高带宽要求(例如原始模式下的高质量相机),低延迟要求(任何期望在计算机端发生某些事情的USB批量设备)在指定时间内)或其他功能方面使得在原始设备级别上的网络操作变得不可能。

出于这个原因,对于某些设备类别,可以划分必须在设备附近完成的操作和可以远程完成的操作,还有其他方法:例如,可以使用 CUPS、声音通过网络很好地共享打印机使用 pipeline、jackd 或其他守护进程的设备、使用 VLC 的视频设备、使用 NFS、CIFS 等的文件系统或块设备(例如在 Ceph 中)的存储设备。

你的串行端口很容易抽象——你在它所在的机器上进行设置(主要是:打开、设置波特率),然后只使用一个最小的网络守护进程来读取和写入它。

事实上,在工业自动化中,这是一种相当常见的模式,具有可通过网络以某种方式寻址的 UART 端口。在Linux下,socat程序可以做类似的事情。

答案2

  1. 安装块设备

不,这是不可能的ssh- 您需要将设备安装在服务器上,然后可以使用sshfs 将远程位置安装到本地位置。

  1. 互动

是的,可以通过使用ssh远程命令来发送和接收数据:

ssh user@server 'cat /dev/random'

将为您提供服务器设备的输出random。与发送数据的方式相同:

ssh user@server 'cat - >/dev/null' <<<"Hello"

这是“像本地人一样”吗?但根据您的计划,这可能就足够了。

相关内容