Linux

為什麼密碼輸入在管道 sudo 命令中起作用?

  • October 28, 2015

如果我做:

sudo cat /etc/resolv.conf | less

它會提示我輸入密碼,即使較少(大概)需要標準輸入。在什麼 fd 上顯示密碼提示以及它如何取回輸入?

實際上,一個典型的呼叫sudo根本不會讀取密碼stdin。相反,sudo將直接訪問控制終端(attypty,通過/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

引用自:https://serverfault.com/questions/731886