한 컴퓨터가 디렉토리에 있는 장치를 다른 컴퓨터와 공유하고 /dev/
다른 컴퓨터가 (로컬인 경우) 그 장치와 상호 작용할 수 있는 방법이 있습니까? SSH 터널 같은 거요?
예를 들어 카메라, Arduino에 대한 직렬 연결, 심지어 컴퓨터의 /dev/random
?
답변1
요컨대, 아니오. 장치 노드와 상호 작용하는 방식은 실제 파일로 수행할 수 있는 것보다 "더 풍부"하며, 원격 시스템의 커널이 로컬 프로세스 메모리에 액세스할 수 없으면 불가능합니다. 네트워크).
사용하고 싶은 많은 것들이 특정 시점에서 불합리하게 높은 대역폭 요구 사항(예: 원시 모드의 고품질 카메라), 낮은 대기 시간 요구 사항(컴퓨터 측에서 어떤 일이 발생할 것으로 예상하는 USB 대량 장치)을 가지고 있다는 것은 말할 것도 없습니다. 시간 내부) 또는 원시 장치 수준에서 네트워크 작업을 불가능하게 만드는 기타 기능적 측면입니다.
이러한 이유로 특정 장치 클래스의 경우 장치 근처에서 수행해야 하는 작업과 원격으로 수행할 수 있는 작업을 구분하는 것이 가능하며, 다른 방법도 있습니다. 예를 들어 프린터는 CUPS를 사용하여 네트워크를 통해 공유할 수 있고 사운드는 파이프라인, jackd 또는 기타 데몬용 장치, VLC를 사용하는 비디오 장치, 파일 시스템을 사용하는 저장 장치 또는 NFS, CIFS 등을 사용하는 블록 장치(예: Ceph)
직렬 포트는 추상화하기 쉽습니다. 해당 포트가 있는 컴퓨터에 설정한 다음(주로 열기, 전송 속도 설정) 최소한의 네트워크 데몬을 사용하여 읽고 씁니다.
실제로 산업 자동화에서는 네트워크를 통해 어떻게든 주소를 지정할 수 있는 UART 포트를 갖는 것이 매우 일반적인 패턴입니다. 리눅스에서는,socat
프로그램도 비슷한 일을 할 수 있습니다.
답변2
- 블록 장치 설치
아니요, 불가능합니다 ssh
. 서버에 장치를 설치한 다음 sshfs
원격 위치를 로컬 위치에 마운트하는 데 사용할 수 있습니다.
- 인터렉티브
ssh
예, 원격 명령을 사용하여 데이터를 보내고 받을 수 있습니다 .
ssh user@server 'cat /dev/random'
서버 장치의 출력을 제공합니다 random
. 데이터를 보내는 것과 같은 방법:
ssh user@server 'cat - >/dev/null' <<<"Hello"
이게 "현지인 같나요?" 그러나 계획에 따라 이것으로 충분할 수도 있습니다.