通过 ssh 建立 socat 连接以连接到远程虚拟 COM 端口上的设备

Establish a socat connection over ssh to connect to a device on a remote virtual COM port

我正在寻找一个 socat 命令组合来通过 ssh 建立到远程虚拟 COM 端口的连接,以便本地虚拟 usb 端口的行为与设备连接到本地 USB 端口时的行为完全相同。我已经尝试过以下组合:

socat -v PTY,link=$HOME/ttyVirt,raw,echo=0,b9600 EXEC:'ssh pi@192.168.5.30 socat - /dev/ttyACM0,pty,raw,echo=0'
socat -v PTY,link=$HOME/ttyVirt,raw,echo=0,icanon=1,b9600,crlf EXEC:'ssh pi@192.168.5.30 socat - /dev/ttyACM0,pty,raw,icanon=1,echo=0,crlf'

与设备的初始连接似乎部分有效 - 我收到了一些内容有意义的反馈。但它卡住了。我的猜测是,socat 向通过 socat 中继的数据添加了一些额外的控制命令。

有谁知道如何使用 socat 通过 ssh 建立这样的 'clean' 虚拟 COM 端口连接?

据我所知socat没有向流中添加任何控制命令。我敢打赌存在一些时序问题(网络 link 增加了很多串行协议无法很好处理的延迟)。

最好使用一些效果很好的 RFC 2217 based redirector (which supports more serial API calls -- e.g. change of speed etc.). I tested only ser2net

如果您坚持使用 socat 尽量避免使用标准 input/output:

  • 使用stty预配置端口(例如stty -F /dev/ttyACM0 9600 raw),然后在socat

    中使用GOPEN:/dev/ttyACM0
  • 考虑通过 ssh 远程使用 SSH Port Forwarding 而不是 运行 socat。然后在socat

    中使用标准TCP4-LISTENTCP4

我有一个针对这种情况的工作设置,但我的命令不见了(我记得有 PTY 用于 socat 分配虚拟串行端口)。

编辑>

Socat manual page 提供这个(根据您的情况改编):

socat PTY,link=$HOME/ttyVirt,rawer,wait-slave EXEC:"ssh pi@192.168.5.30 socat - /dev/ttyACM0,nonblock,rawer"

祝你好运!