为什么我可以通过重定向输出看到密码提示?

为什么我可以通过重定向输出看到密码提示?

因此,我发出了一个命令,该命令本质上是“ssh”到各个主机:

 command 2&>1 | grep "desired output" 

偶尔,在命令执行过程中,它会遇到一个我没有设置密钥的主机。当这种情况发生时,我会得到以下输出:

 Password: 

由于我将 STDERR 重定向到 STDOUT,然后过滤 STDOUT 仅给我“所需输出”(不包括“密码:”),密码提示是如何呈现给我的?

答案1

ssh 打开 /dev/tty 进行读写并提示输入密码。

我猜这是一个安全功能,输入必须来自 tty 而不是 stdin。

如果您运行strace ssh <host>strace,将显示该命令正在进行的系统调用。

我得到:

open("/dev/tty", O_RDWR|O_LARGEFILE)    = 4
...
write(4, "dave@host"..., 16dave's password: ) = 16
read(4,

相关内容