Shell-Script

SSH 上的多個 fifo

  • May 4, 2019

Shell 腳本允許多個文件描述符(最多 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

stdout除了and之外,是否可以通過 SSH 擁有多個輸出管道stderr

重要的是要注意我不是在尋找埠轉發,因為我會遇到網路問題。

不,這是不可行的。客戶端顯式關閉每個大於 2的ssh打開文件描述符:

/*
* 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 的原始碼)。

引用自:https://unix.stackexchange.com/questions/489997