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のソースコードを参照)。ここで見つけることができます)。

関連情報