Как мне спросить пароль по приглашению GUI при использовании sudo в скрипте?

Я использую 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 иначе он не сможет выполнить задание.

Поэтому, как мне спросить пароль по приглашению GUI?

Вы можете запросить пароль с помощью приглашения GUI с помощью -A, --askpass .

С manpage:

 -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 которая запрашивает у пользователя 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

Вы также можете использовать эту программу для других пользователей. Пример I:

 $ 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 + frontend для su и sudo) вместо sudo в скрипте, который запрашивает приглашение GUI:

    Экран-shot3

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

    Скриншот