Como eu pergunto a senha pelo prompt da GUI enquanto uso o sudo no script?

6

Eu uso o Trisquel GNU / Linux com o GNOME Flashback Desktop Environment. Eu preciso de uma solicitação de senha da GUI para o usuário executar o comando com sudo no script. Exemplo considere seguir o 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 seguindo o caminho (Executar) ou seja, não dentro do terminal:

Portanto, é necessário pedir uma senha para executar o comando com sudo , caso contrário, ele não fará um trabalho.

Portanto, como faço para solicitar senha por prompt da GUI?

    
por Pandya 08.01.2016 / 13:57

1 resposta

13

Você pode perguntar 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.

Assim, você pode criar um programa auxiliar gráfico, como ssh-askpass , que solicita ao usuário uma frase secreta usando o GNOME:

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

Então, adicione a seguinte linha a /etc/sudo.conf :

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

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

Vocêtambémpodeusaroutroprogramacomozenityparaisso.Exemploeuusooseguinte:

$cat/etc/sudo.conf#PathtoaskpasshelperprogramPathaskpass/usr/local/bin/zenity_passphrase

Ondezenity_passphraseéumscriptpersonalizado definir para ser usado diretamente como comando:

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

que funciona como:

Nota:

  • Vocêtambémpodeusargksudo(frontenddoGTK+parasuesudo)emvezdesudonoscriptqueperguntacomasolicitaçãodaGUI:

  • Vocêtambémpodeusaropkexec( aplicativo polkit ) com alguns (para outros precisa ser configurado) aplicativos / comandos:

por 08.01.2016 / 13:57