`sudo` 如何找到 TTY?

`sudo` 如何找到 TTY?

在 Bash 4 中运行以下命令,sudo会提示输入密码:

$ echo '' | sudo true
[sudo] password for mike:

(我对将密码传输到 不感兴趣sudo;这是我在故障排除时发现的行为的演示。)

据我了解,TTY 检测是通过检查标准输入的文件描述符来进行的。该tty程序支持这一点:

$ tty
/dev/pts/26
$ echo '' | tty
not a tty

...但sudo似乎正在使用其他一些机制。setsid具有预期的效果,所以我的猜测是这在某种程度上与会话有关。

$ setsid sudo true
sudo: no tty present and no askpass program specified

那么到底在忙什么呢sudo

答案1

它打开/dev/tty(正如 Jeff Schaller 使用宏所提到的_PATH_TTY),提供对控制终端的访问,无论是哪个终端(如果有的话)。看我当前的控制终端和`/dev/tty`之间有什么关系?了解详情。

相关内容