Как запросить пароль в командной строке при использовании sudo в скрипте?

13

Я использую Trisquel GNU / Linux с GNOME Flashback Desktop Environment. Мне нужно приглашение пароля GUI для пользователя для выполнения команды с sudoв сценарии. Пример рассмотрим следующий скрипт:

zenity --question --text="Do you want to install this package?"
if [[ $? -eq 0 ]]; then sudo apt-get install package
else zenity --warning
fi

Который должен быть выполнен следующим образом (Run), т.е. не внутри терминала:

снимок экрана

Таким образом, необходимо запросить пароль для запуска команды, в sudoпротивном случае он не сможет выполнить работу.

Поэтому, как я могу спросить пароль в командной строке?

Pandya
источник

Ответы:

18

Вы можете задать пароль с помощью графического интерфейса с помощью -A, --askpass.

Из справочной страницы:

-A, --askpass
                 Normally, if sudo requires a password, it will read it from the user's 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, if sudo.conf(5) contains a line
                 specifying the askpass program, that value will be used.  For example:

                     # Path to askpass helper program
                     Path askpass /usr/X11R6/bin/ssh-askpass

                 If no askpass program is available, sudo will exit with an error.

Таким образом, вы можете использовать графическую вспомогательную программу, например, ssh-askpassкоторая запрашивает у пользователя пароль с помощью GNOME:

$ which ssh-askpass
/usr/bin/ssh-askpass

Итак, добавьте следующую строку в /etc/sudo.conf:

# Path to askpass helper program
Path askpass /usr/bin/ssh-askpass

И вы найдете подсказку пароля GUI:

Экран-Shot1

Вы также можете использовать другую программу, как zenityдля этого. Пример я использую следующее:

$ cat /etc/sudo.conf
# Path to askpass helper program
Path askpass /usr/local/bin/zenity_passphrase

Где zenity_passphraseэто пользовательский сценарий набор для использования непосредственно в качестве команды:

$ cat $(which zenity_passphrase)
#!/bin/bash
zenity --password --title="sudo password prompt" --timeout=10

Который работает как:

Экран-Shot2


Примечание:

  • Вы также можете использовать gksudo(GTK + внешний интерфейс для su и sudo) вместо sudoсценария, который запрашивает в командной строке GUI:

    Экран-shot3

  • Вы также можете использовать pkexec( приложение polkit ) с некоторыми (для других необходимо настроить) приложениями / командами:

    снимок экрана

Pandya
источник
При использовании pkexec, например pkexec leafpad, он выдает Cannot open display:после ввода пароля. Нужна ли дополнительная конфигурация?
GTRONICK
ПопробуйтеDISPLAY=:0 pkexec leafpad
Pandya
Все еще не работает, Cannot open display:появляется то же сообщение
GTRONICK