通过 SSH 连接时使用本地 USB

Tro*_*ino 7 usb ssh

当我通过 SSH 连接到远程机器时,有什么方法可以访问插入本地机器 USB 端口的设备吗?

我想要做的是在云中建立一个开发环境,并将程序闪存到通过 SSH 连接的微控制器。

Tin*_*ino 10

这假设您在两侧都运行 Linux。如果您运行的是 Windows,则有一些可能性(如puttyCygWin),但这样做会有点困难。

是的,你可能可以。但这很可能是不想做的:

  • 如果您正在闪烁,如果网络连接中断会发生什么?

  • 您真的要让云“感染”您的本地 USB 吗?

串行端口

如果您的本地 USB 设备具有用于闪烁的串行端口之类的东西,您也许可以使用一些本地端口转发并socat连接到串行线。前提是您的开发环境允许flash使用 TCP 端口。像下面这样:

在您的本地机器上: ssh -R1234:localhost:1234 user@remote.example.com

这将打开的端口127.0.0.1:1234remote.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结合 withsocat能够提供您可能想到的本地机器和“云”之间的几乎所有互连。

然而,连接到本地USB可能需要也可能不需要一些特殊处理,双方。有问题的部分不是SSHsocat,而是如何允许远程软件通过这样的隧道与您的本地 USB 对话。

也许其他人plug and play USB emulator对 Linux有所了解,但我从未遇到过这样的野兽。我做 Linux 已经将近 20 年了..

作为起点,也许看看那个答案