Alex028502 Asked: 2022-01-15 10:59:00 +0800 CST2022-01-15 10:59:00 +0800 CST 2022-01-15 10:59:00 +0800 CST 有没有办法 ssh 隧道,并访问 /dev 目录中的设备,并像本地一样使用它?[复制] 772 有没有一种方法可以让一台计算机/dev/与另一台计算机共享目录中的设备,而另一台计算机可以与其交互,如果它是本地的?类似于 SSH 隧道的东西? 例如相机,或与 arduino 的串行连接,甚至是计算机的/dev/random? ssh serial-port 2 个回答 Voted FelixJN 2022-01-15T11:12:28+08:002022-01-15T11:12:28+08:00 挂载块设备 不,这是不可能的ssh- 您需要将设备安装在服务器上,然后可以使用sshfs 将远程位置安装到本地位置。 互动 是的,使用ssh远程命令可以发送和接收数据: ssh user@server 'cat /dev/random' 将为您提供服务器random设备的输出。发送数据的方式相同: ssh user@server 'cat - >/dev/null' <<<"Hello" 这是“像本地人一样”吗?不。但根据您的计划,这可能就足够了。 Best Answer Marcus Müller 2022-01-15T11:24:33+08:002022-01-15T11:24:33+08:00 简而言之,没有。您与设备节点交互的方式比您对实际文件的交互方式“更丰富”,并且如果远程机器上的内核无法访问您的本地进程内存(它不能通过网络访问),这是不可能的。 更不用说你想要处理的很多东西只是有不合理的高带宽要求(例如,原始模式下的高质量相机),低延迟要求(任何期望在计算机端发生某些事情的 USB 大容量设备)在指定的时间内)或其他功能方面,使在原始设备级别上的网络操作变得不可能。 出于这个原因,对于某些设备类别,可以将必须在设备附近完成的工作和可以远程完成的工作分开,还有其他方法:例如,可以使用 CUPS 通过网络很好地共享打印机,声音使用 pipewire、jackd 或其他守护进程的设备、使用 VLC 的视频设备、使用 NFS、CIFS 的文件系统……或作为块设备(例如在 Ceph 中)的存储设备。 您的串行端口将很容易抽象 - 您在它所在的机器上进行设置(主要是:打开,设置波特率),然后只需使用读取和写入它的最小网络守护程序。 事实上,在工业自动化中,这是一种很常见的模式,UART 端口可以通过网络以某种方式寻址。在linux下,socat程序可以做这样的事情。
不,这是不可能的
ssh
- 您需要将设备安装在服务器上,然后可以使用sshfs
将远程位置安装到本地位置。是的,使用
ssh
远程命令可以发送和接收数据:将为您提供服务器
random
设备的输出。发送数据的方式相同:这是“像本地人一样”吗?不。但根据您的计划,这可能就足够了。
简而言之,没有。您与设备节点交互的方式比您对实际文件的交互方式“更丰富”,并且如果远程机器上的内核无法访问您的本地进程内存(它不能通过网络访问),这是不可能的。
更不用说你想要处理的很多东西只是有不合理的高带宽要求(例如,原始模式下的高质量相机),低延迟要求(任何期望在计算机端发生某些事情的 USB 大容量设备)在指定的时间内)或其他功能方面,使在原始设备级别上的网络操作变得不可能。
出于这个原因,对于某些设备类别,可以将必须在设备附近完成的工作和可以远程完成的工作分开,还有其他方法:例如,可以使用 CUPS 通过网络很好地共享打印机,声音使用 pipewire、jackd 或其他守护进程的设备、使用 VLC 的视频设备、使用 NFS、CIFS 的文件系统……或作为块设备(例如在 Ceph 中)的存储设备。
您的串行端口将很容易抽象 - 您在它所在的机器上进行设置(主要是:打开,设置波特率),然后只需使用读取和写入它的最小网络守护程序。
事实上,在工业自动化中,这是一种很常见的模式,UART 端口可以通过网络以某种方式寻址。在linux下,
socat
程序可以做这样的事情。