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


14

Я використовую Trisquel GNU / Linux із середовищем робочого столу GNOME Flashback. Мені потрібна підказка пароля 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?

Відповіді:


19

Ви можете задати пароль за допомогою підказки GUI за допомогою -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:

знімок екрана1

Ви також можете користуватися іншою подібною програмою 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

Що працює:

знімок екрана2


Примітка:

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

    знімок екрана3

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

    знімок екрана


Наприклад pkexec leafpad, при використанні pkexec, він дає Cannot open display:після введення пароля. Чи потрібна додаткова конфігурація?
GTRONICK

СпробуйтеDISPLAY=:0 pkexec leafpad
Пандія

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