因此,我发出了一个命令,该命令本质上是“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,