Linux
為什麼密碼輸入在管道 sudo 命令中起作用?
如果我做:
sudo cat /etc/resolv.conf | less
它會提示我輸入密碼,即使較少(大概)需要標準輸入。在什麼 fd 上顯示密碼提示以及它如何取回輸入?
實際上,一個典型的呼叫
sudo
根本不會讀取密碼stdin
。相反,sudo
將直接訪問控制終端(atty
或pty
,通過/dev/tty
特殊文件)並直接輸出提示和讀取字元。這可以在源tgetpass.c
文件中看到。sudo
還有其他幾種情況:
如果
askpass
指定了程序,例如在-A
參數中,將呼叫該程序。否則,如果您特別請求
sudo
從 讀取stdin
,例如使用-S
標誌 - 它也會將提示寫入stderr
. 這就是MadHatter 的回答適用的情況。否則,如果沒有
tty
可用
- 如果禁用密碼回顯(預設情況下,由 中的
visiblepw
標誌控制sudoers
),sudo
將報錯:no tty present and no askpass program specified
- 否則,即使沒有特別要求,
sudo
也會退回使用。MadHatter 的回答也適用於此。stdin``stderr