SSH를 통해 데이터를 릴레이하기 위해 가상 직렬 포트를 만드는 방법은 무엇입니까?

SSH를 통해 데이터를 릴레이하기 위해 가상 직렬 포트를 만드는 방법은 무엇입니까?

SSH를 통해 액세스할 수 있는 원격 Linux 시스템에 직렬 포트가 있습니다.

쓸 때는 ssh를 통해 원격 직렬 포트에 쓰고, 읽을 때는 그 반대로 쓰는 파일(실제 파일이 아니라 장치 파일이나 유닉스 도메인 소켓?)을 만들고 싶습니다.

파일을 생성하는 명령을 갖고 파일에서 읽어서 명령의 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.

이것이 귀하의 요구 사항을 충족시키지 못한다면 실제로 더 많은 정보를 제공해야 합니다...

관련 정보