Use USB local quando conectado via SSH

3

Existe alguma maneira de acessar um dispositivo conectado à porta USB da minha máquina local enquanto estiver conectado a uma máquina remota via SSH?

O que estou tentando fazer é configurar um ambiente de desenvolvimento na nuvem e programas flash para um microcontrolador conectado via SSH.

    
por Troy Cosentino 17.02.2014 / 09:18

1 resposta

7

Isso pressupõe que você esteja executando o Linux em ambos os lados. Se você estiver executando o Windows, existem possibilidades (como putty e CygWin ), mas é um pouco mais difícil de fazer.

Sim, você provavelmente pode. Mas é bem provável que isso não queira fazer:

  • Se você estiver piscando, o que acontece se a conexão de rede for interrompida?

  • Você realmente deseja permitir que uma nuvem "infecte" seu USB local?

Porta serial

Se o seu dispositivo USB local tiver algo como uma porta serial para piscar, talvez você possa usar algum encaminhamento de porta local e socat para se conectar à linha serial. Desde que o seu ambiente de desenvolvimento permita flash usando uma porta TCP. Como segue:

Na sua máquina local: ssh -R1234:localhost:1234 [email protected]

Isso abre a porta 127.0.0.1:1234 on remote.example.com , que então se conecta a 127.0.0.1:1234 em sua máquina local.

Agora você usa socat para se conectar à linha serial do seu USB :

Na sua máquina local: socat -d -d -d tcp-listen:1234,reuseaddr,fork,bind=127.0.0.1 /dev/ttyUSB0

TCP - > Tubo

Por outro lado, se o software não puder usar o TCP, mas quiser falar com um pipe ou tty, você poderá usar socat novamente para fornecer isso:

No controle remoto: socat -d -d -d unix-listen:.mypipe tcp-connect:127.0.0.1:1234

Agora, deixe seu software remoto se conectar a .mypipe e ele estará conectado de forma transparente a /dev/ttyUSB0 em seu computador local.

Mas sua milhagem pode variar. Depende muito do que seu software na nuvem precisa.

Drivers USB especiais

Por exemplo, pode ser que você precise criar um stub especial, que fala com USB . Felizmente isso também pode ser feito pelo socat:

No lado local: socat -d -d -d tcp-listen:1234,reuseaddr,fork,bind=127.0.0.1 exec:/path/to/program

O lado remoto é mais difícil, porque se ele espera falar com USB , você provavelmente precisará criar um driver USB fictício para o kernel do Linux e carregá-lo lá. Não é fácil de gerenciar, desculpe.

Para resumir

SSH em combinação com socat é capaz de fornecer quase toda a interconexão entre sua máquina local e a "nuvem" que você possa imaginar.

No entanto, conectar-se a um local USB pode ou não precisar de algum tratamento especial, em ambos os lados. A parte problemática não é SSH ou socat , é como permitir que o software remoto converse sobre esse túnel para o seu USB local.

Talvez alguém saiba um pouco de plug and play USB emulator para o Linux, mas nunca encontrei uma fera assim. E eu faço Linux há quase 20 anos ..

Como ponto de partida, talvez veja essa resposta

    
por 17.02.2014 / 10:28

Tags