SSH를 통한 다중 fifo

SSH를 통한 다중 fifo

쉘 스크립트는 여러 파일 설명자를 허용합니다(POSIX 준수의 경우 최대 9개, POSIX 준수의 경우 더 많음 bash).

$ install -m 755 /dev/stdin /tmp/test <<\EOF
#!/bin/sh

echo hi1 >&1
echo hi2 >&2
echo hi3 >&3
echo hi4 >&4
EOF
$ /tmp/test 1> /tmp/1 2> /tmp/2 3> /tmp/3 4> /tmp/4
$ cat /tmp/1
hi1
$ cat /tmp/2
hi2
$ cat /tmp/3
hi3
$ cat /tmp/4
hi4

SSH를 통해 동일한 동작을 달성하고 싶지만 결과는 다음과 같습니다.

$ ssh user@remote_machine /tmp/test 1> /tmp/1 2> /tmp/2 3> /tmp/3 4> /tmp/4
$ cat /tmp/1
hi1
$ cat /tmp/2
hi2
/tmp/test: 5: /tmp/test: 3: Bad file descriptor
/tmp/test: 6: /tmp/test: 4: Bad file descriptor
$ cat /tmp/3
$ cat /tmp/4

stdoutSSH 외에도 여러 개의 출력 파이프를 가질 수 있습니까 stderr?

네트워크 문제가 발생할 수 있으므로 포트 전달을 찾고 있지 않다는 점에 유의하는 것이 중요합니다.

답변1

아니요, 그건 불가능합니다. 클라이언트는 ssh2보다 큰 모든 열린 파일 설명자를 명시적으로 닫습니다.

/*
 * Discard other fds that are hanging around. These can cause problem
 * with backgrounded ssh processes started by ControlPersist.
 */
closefrom(STDERR_FILENO + 1);

이는 클라이언트가 시작될 때 가장 먼저 발생하는 일입니다( main()OpenSSH 8.0의 소스 코드 참조).여기에서 찾을 수 있습니다).

관련 정보