Como posso acionar a caixa de diálogo acima a partir de um script de shell que precisa solicitar uma senha?
Já encontrei e uso zenity
para esse fim, embora goste mais do primeiro por razões estéticas (sim, isso às vezes importa ;-).
Alternativa Zenity:
zenity --password --title="Enter private passphrase"
Ubuntu 20.04, GTK, GNOME
Responder1
Eu sei que este post tem quase 6 meses, mas ninguém sugeriu usar a ferramenta yad (mais um diálogo). Isto é o que parece:
O comando completo é:
password="$(yad --center --width=300 --image=keys.png --entry --hide-text --button=gtk-ok:0 --button=gtk-cancel:1 --title="Authentication required" --text="Enter password:")"
A senha não é exibida na tela quando é digitada (o "--hide-text" faz isso). Os botões são os padrão do gtk "OK" e "Cancelar". Neste exemplo a senha digitada pode ser acessada a partir da variável $password, por exemplo
echo $password
Se o botão cancelar for pressionado, o código de retorno ($?) de yad é 1 (de --button=gtk-cancel:1) e o código de retorno é 0 quando o botão OK é pressionado (de --button=gtk-ok :0).
yad pode ser instalado em versões posteriores do Ubuntu no Software Center, 16.04 requer instalação usando:
sudo apt install yad
A página inicial do yad está aqui: https://sourceforge.net/projects/yad-dialog/
Outros exemplos mostrando como usar o yad podem ser encontrados aqui: https://sourceforge.net/p/yad-dialog/wiki/browse_pages/
Responder2
Acho que a solução correta seria usar pinentry-gnome3
. IIRC, é uma dependência degpg
askpass() {
prompt=$1
echo -e "SETPROMPT $prompt\nGETPIN\nBYE" | pinentry-gnome3 | grep -E '^D ' | sed 's/D //'
}
password=$(askpass 'Enter your password:')