A opção -A
sudo permite que você especifique um programa auxiliar (na variável SUDO_ASKPASS) que solicitará a senha.
Crie um script para perguntar a senha (myaskpass.sh):
#!/bin/bash
zenity --password --title=Authentication
Em seguida, insira esta linha no início do seu script:
export SUDO_ASKPASS="/path/to/myaskpass.sh"
e substitua todas as ocorrências de sudo <command>
por:
sudo -A <command>
Você pode usar qualquer programa de solicitação de senha que desejar, em vez de zenity
. Eu tive que encapsulá-lo dentro de um script porque SUDO_ASKPASS deve apontar para um arquivo, então não funcionará com a opção --password
requerida por zenity
.
O acima funciona como um encanto se for executado a partir da linha de comando ou se você escolher Executar no terminal após clicar duas vezes no arquivo de script no gerenciador de arquivos, mas se escolher Executar ou tente iniciá-lo a partir de um arquivo .desktop, cada sudo
solicitará a senha novamente.
Se você não quiser uma janela de terminal, você pode armazenar a senha em uma variável e enviá-la para sudo -S
. Talvez haja algumas preocupações de segurança, mas acho que é bastante seguro (leia os comentários em esta resposta ).
Insira esta linha no início do seu script:
PASSWD="$(zenity --password --title=Authentication)\n"
e substitua todas as ocorrências de sudo <command>
por:
echo -e $PASSWD | sudo -S <command>