有没有什么方法可以让我通过 SSH 连接到远程机器时访问插入本地机器 USB 端口的设备?
我想要做的是在云中建立一个开发环境,并将程序刷入通过 SSH 连接的微控制器。
答案1
假设您在两边都运行 Linux。如果您运行的是 Windows,则有可能(如putty
和CygWin
),但这样做有点困难。
是的,你也许可以。但这很可能不是你想要做的:
如果你正在闪烁,网络连接中断会发生什么情况?
您真的想允许云“感染”您的本地 USB 吗?
串行端口
如果您的本地 USB 设备有类似串行端口的东西用于刷新,您也许可以使用一些本地端口转发并socat
连接到串行线。前提是您的开发环境允许flash
使用 TCP 端口。如下所示:
在本地机器上:ssh -R1234:localhost:1234 [email protected]
这将打开端口127.0.0.1:1234
,remote.example.com
然后连接到127.0.0.1:1234
您的本地机器。
现在您可以使用socat
连接到您的串行线USB
:
在本地机器上:socat -d -d -d tcp-listen:1234,reuseaddr,fork,bind=127.0.0.1 /dev/ttyUSB0
TCP -> 管道
另一方面,如果软件不能使用 TCP 但想要与管道或 tty 通信,则可以socat
再次使用来提供:
在遥控器上:socat -d -d -d unix-listen:.mypipe tcp-connect:127.0.0.1:1234
现在让您的远程软件连接到.mypipe
并且它透明地连接到/dev/ttyUSB0
您的本地计算机。
但您的里程可能会有所不同。这在很大程度上取决于您的云软件需要什么。
特殊 USB 驱动程序
例如,你可能需要创建一些特殊的存根,用于与 对话USB
。幸运的是,这也可以通过 socat 分叉:
在本地方面:socat -d -d -d tcp-listen:1234,reuseaddr,fork,bind=127.0.0.1 exec:/path/to/program
远程端更难,因为如果它希望与 对话USB
,你可能需要为 Linux 内核创建一些虚拟 USB 驱动程序并将其加载到那里。管理起来并不容易,抱歉。
把它们加起来
SSH
结合起来socat
能够提供您本地机器和您可能想到的“云”之间的几乎所有互连。
但是连接到本地USB
可能需要或不需要双方进行一些特殊处理。问题的部分不是SSH
或socat
,而是如何允许远程软件通过这样的隧道与本地 USB 进行通信。
也许其他人知道一些plug and play USB emulator
Linux 的东西,但我从未遇到过这么难的东西。我使用 Linux 已经近 20 年了……
作为起点,也许看看这个答案