Como pedir senha pelo prompt da GUI enquanto uso o sudo no script?

13

Eu uso o Trisquel GNU / Linux com o GNOME Flashback Desktop Environment. Eu preciso de um prompt de senha da GUI para o usuário executar o comando sudono script. Exemplo considere o seguinte script:

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

Que deve ser executado da seguinte maneira (Run), ou seja, não dentro do terminal:

captura de tela

Portanto, é necessário solicitar uma senha para executar o comando, sudocaso contrário, ele não realiza um trabalho.

Portanto, como solicito a senha pelo prompt da GUI?

Pandya
fonte

Respostas:

18

Você pode pedir a senha por meio do prompt da GUI com a ajuda de -A, --askpass.

Na página de manual:

-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.

Portanto, você pode programar um programa auxiliar gráfico, como o ssh-askpassque solicita ao usuário uma frase secreta usando o GNOME:

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

Portanto, adicione a seguinte linha a /etc/sudo.conf:

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

E você encontrará um prompt de senha da GUI:

screen-shot1

Você também pode usar outro programa como zenityesse. Exemplo que eu uso o seguinte:

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

Onde zenity_passphraseestá um conjunto de scripts customizados para ser usado diretamente como comando:

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

O que funciona como:

screen-shot2


Nota:

  • Você também pode usar gksudo(GTK + frontend para su e sudo) em vez de sudono script que pergunta com o prompt da GUI:

    screen-shot3

  • Você também pode usar pkexec( aplicativo polkit ) com alguns aplicativos / comandos (para outros, ele precisa ser configurado):

    captura de tela

Pandya
fonte
Ao usar o pkexec, por exemplo pkexec leafpad, ele fornece Cannot open display:depois de digitar a senha. Existe alguma configuração adicional necessária?
GTRONICK
TenteDISPLAY=:0 pkexec leafpad
Pandya
Ainda não está funcionando, a mesma mensagem Cannot open display:aparece #
GTRONICK 14/12