Como posso criar uma porta serial virtual que retransmite dados por ssh?

1

Eu tenho uma porta serial em uma caixa Linux remota que eu posso acessar através do ssh.

Eu gostaria de criar um arquivo (não um arquivo real, talvez um arquivo de dispositivo ou um soquete de domínio unix?) que, quando escrito para gravar em uma porta serial remota sobre ssh, e o contrário para leituras.

Eu acho que seria suficiente ter um comando que cria um arquivo, então torna o STDIN acessível ao ler o arquivo, e gravar no arquivo resultaria na saída de dados no fluxo STDOUT do comando. Então eu poderia usá-lo como tal:

ssh user@host "cat /dev/ttyREAL" | <some_command> /dev/ttyFAKE | ssh user@host "tee /dev/ttyREAL"

Existe tal comando, ou estou indo pelo caminho errado?

    
por Cameron Martin 20.06.2016 / 20:56

3 respostas

1

Talvez você possa fazer algo parecido com este exemplo usando socat , que cria um pseudo-tty e um link simbólico para ele em ~/myserialline . Quando você o abre, o socat executa o ssh (neste exemplo, para localhost), onde é executado o comando para unir o stdin / stdout a um dispositivo serial real.

 socat PTY,link=$HOME/myserialline,raw,echo=0  EXEC:'ssh localhost socat - /dev/ttyS0'

Você pode testar isso a partir do shell (bash), supondo que você tenha um dispositivo serial como esse, por exemplo:

exec 3<>~/myserialline # open pty for read and write
cat -u <&3 &  # read from pty
echo hello >&3 # write to pty
    
por 20.06.2016 / 22:18
0

Eu não tenho certeza sobre a primeira parte do pipe que você deu como exemplo, mas se você puder de alguma forma configurar o programa que grava em uma porta serial para usar sua porta serial falsa, você pode simplesmente escrever:

socat pty,link=$HOME/ttyFAKE,raw,echo=0 - | ssh user@host "tee /dev/ttyREAL"

A socat criará o dispositivo para você.

    
por 20.06.2016 / 22:20
0
Estou supondo que você quer isso porque você precisa falar com um dispositivo no outro lado da porta serial da conexão ssh, e que não é um modem ou algo assim (onde você poderia usar a pilha de rede).

Se o comando do qual você deseja escrever puder executar um comando e se comunicar com stdin e stdout, você poderá usar o próprio SSH, já que o SSH encaminha stdin e stdout pelo canal criptografado, como se o comando estivesse sendo executado localmente . Nesse ponto, tudo o que você realmente precisa é de um comando que permita gravar em uma porta serial usando stdin / stdout. O comando cu faz isso; Por exemplo, você pode executar ssh host cu -s 9600 -lttyS0 .

Se isso não fizer o que você quer, você realmente precisará fornecer mais informações ...

    
por 20.06.2016 / 22:28