Який варіант я повинен дати команді sudo, щоб пароль запитувався через графічний інтерфейс?


11

Ця проблема вже давно клопоче мене.

Раз у раз мені потрібно писати файл сценарію, який повинен виконувати sudoкоманди. Я не обов'язково знаю заздалегідь, що я запускатимусь, sudoтому я впевнений, що є спосіб відкрити приємний графічний інтерфейс (наприклад, той, що вискакує при встановленні програмного забезпечення), але як?

man sudoкаже:

-A          Normally, if sudo requires a password, it will read it from the current terminal.  If the -A (askpass) option is specified, a (possibly
            graphical) helper program is executed to read the user's password and output the password to the standard output.  If the SUDO_ASKPASS
            environment variable is set, it specifies the path to the helper program.  Otherwise, the value specified by the askpass option in
            sudoers(5) is used

Тож я майже впевнений, що рішення знаходиться в цьому -Aі SUDO_ASKPASSпереповнюється, проте мені вдалося знайти, що в них вкласти.


1
В Linux вони будуть оброблятися передніми сторонами, як gtksudoабо kdesudo. Я не знаю, що там є у речах OS-X, але я припускаю, що ти шукаєш щось у цьому напрямку.
Калеб

Відповіді:


17

У OS X немає зовсім чистого способу зробити це, але є кілька способів підробити це. По-перше, у AppleScript є хороший спосіб робити судо-ish речі, засновані на графічній аутентифікації, і ви можете використовувати це:

osascript -e "do shell script \"stufftorunasroot\" with administrator privileges"

Ви також можете скористатися цим механізмом для встановлення часової позначки sudo, а потім скористатися звичайним судо (у 5-хвилинному вікні очікування), щоб зробити такі дії:

osascript -e "do shell script \"mkdir -p /var/db/sudo/$USER; touch /var/db/sudo/$USER\" with administrator privileges" && \
    sudo stufftorunasroot

Нарешті, ви можете використовувати AppleScript для запиту пароля, а потім передайте його в sudo:

pw="$(osascript -e 'Tell application "System Events" to display dialog "Password:" default answer "" with hidden answer' -e 'text returned of result' 2>/dev/null)" && /
    echo "$pw" | sudo -S stufftorunasroot

чекали так довго, щоб подякувати за цю чудову пораду
apouche

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.