为什么OpenSSH RequestTTY导致stderr重定向到stdout?

时间:2013-05-30 14:17:47

标签: unix openssh pty

当使用-T和-t运行相同的ssh命令时,任何stderr输出分别到达stderr和stdout。

没有pty分配: ssh -T user@host "echo >&2 foo" 1>/tmp/out 2>/tmp/err

输出写入/tmp/err

使用pty分配:ssh -t user@host "echo >&2 foo" 1>/tmp/out 2>/tmp/err

输出现在写入/tmp/out

我有点理解,使用pty模拟完整的伪屏幕并且输出处于原始模式。然后,发送到屏幕的输出通过stdout发送回ssh,ssh的tty也设置为原始模式。有人可以进一步解释一下吗?

1 个答案:

答案 0 :(得分:7)

tty没有单独的输出和错误通道。只有一个输出通道;无论你写什么,只需转到CRT,串口,终端窗口,调制解调器,打印机或连接到tty的任何东西。

在为运行命令分配tty时,ssh理论上可以将命令的stdin和stdout附加到tty,而相反,将命令的stderr附加到完全独立的单独的stderr通道(管道)来自tty。但是,这并不符合以下惯例:在tty上运行的命令应该将其所有3个stdio通道连接到同一个tty,并且某些命令可能会混淆或表现不同。所以ssh选择遵循惯例。

使用tty时,ssh可以自由地将命令的stdin,stdout和stderr附加到3个单独的单向管道。