SSH経由でデータを中継するための仮想シリアルポートを作成するには?

SSH経由でデータを中継するための仮想シリアルポートを作成するには?

SSH経由でアクセスできるリモートLinuxシステムにシリアルポートがあります。

書くときはsshを介してリモートシリアルポートに書き、読んでいるときはその逆に書き込むファイル(実際のファイルではなくデバイスファイルやUnixドメインソケット?)を作成したいと思います。

ファイルを生成するコマンドを持ち、ファイルから読み込んでコマンドのSTDINにアクセスできるようにし、ファイルに書き込むとデータがコマンドのSTDOUTストリームに出力されるだけで十分だろうと思います。これにより、次のように使用できます。

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

そのようなコマンドはありますか?それとも間違った方法で実行していますか?

答え1

たぶんこの例のようなことを行い、socatそれを使って疑似ttyとそれへのシンボリックリンクを作成することができます~/myserialline。これを開くと、socatはstdin / stdoutを物理シリアルデバイスに接続するためにsocatを実行するssh(この場合はlocalhost)を実行します。

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

このようなシリアルデバイスがあると仮定すると、(bash)シェルでそれをテストできます。たとえば、次のようになります。

exec 3<>~/myserialline # open pty for read and write
cat -u <&3 &  # read from pty
echo hello >&3 # write to pty

答え2

例として提供されたパイプの最初の部分については完全にはわかりませんが、偽のシリアルポートを使用するようにシリアルポートに書き込むプログラムを何らかの方法で設定できる場合は、次のように書くことができます。

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

socatがあなたのためのデバイスを作成します。

答え3

私は、シリアルポートの反対側にあるデバイスへのSSH接続を介して通信する必要があり、モデムや同様のデバイス(ネットワークスタックが利用可能な場所)ではないため、これをしたいとします。

作成中のコマンドがコマンドを実行し、stdinとstdoutを使用してそれらのコマンドと通信できる場合は、SSH自体を使用できます。 SSHは、コマンドがローカルで実行されているかのように、暗号化されたチャネルを介してstdinとstdoutを渡すためです。この時点で実際に必要なのは、stdin / stdoutを使用してシリアルポートに書き込むことができるコマンドだけです。このcuコマンドはこれを行います。たとえばssh host cu -s 9600 -lttyS0

これがあなたの要件を満たしていない場合は、実際にはより多くの情報を提供する必要があります。

関連情報