web-dev-qa-db-fra.com

Pouvez-vous utiliser gnome keyring dans le script bash, si oui, comment?

Je développe un script de montage automatisé pour les partages Windows. J'ai terminé le script et cela fonctionne très bien, mais est-il possible d'ajouter Gnome Keyring à la bash afin qu'une fois l'utilisateur écrit son mot de passe, il sera sauvegardé dans Gnome Keyring et sera ensuite repris à partir de là. De plus, les mots de passe de mes utilisateurs Windows AD doivent être changés tous les mois. Est-il possible de créer le script? Une fois par mois, le script demande à nouveau un mot de passe.

Exemple:

L'utilisateur se connecte à Ubuntu et le script de montage commence à la connexion. L'utilisateur écrit son mot de passe et le script l'envoie à Gnome Keyring pour qu'il soit enregistré. La prochaine fois qu'il se connectera, le mot de passe sera extrait de Gnome Keyring, mais si c'est le 1er juin, par exemple, l'utilisateur doit écrire le mot de passe à nouveau.

Code:

    #!/bin/bash
MOUNTDIR=Public
DIRNAME=Shares
DOMAIN=AD_Domain
SERVER=server.local.lan
SHARE=shared_folder

# create mountpoint for mounting
if [ ! -d ${HOME}/${DIRNAME} ]; then
        mkdir ${HOME}/${DIRNAME}
fi

# define a function that launched the zenity username dialog
get_username(){
    zenity --entry --width=300 --title="Mount $MOUNTDIR" --text="Username:"
}
# define a function that launched the zenity password dialog
get_password(){
    zenity --entry --width=300 --title="Mount $MOUNTDIR" --text="Password:" --hide-text
}

# attempt to get the username and exit if cancel was pressed.
wUsername=$(get_username) || exit

# if the username is empty or matches only whitespace.
while [ "$(expr match "$wUsername" '.')" -lt "1" ]; do
    zenity --error --title="Error in username!" --text="Please check your username! Username field can not be empty!"  || exit
    wUsername=$(get_username) || exit
done

# if the password is empty or matches only whitespace.
wPassword=$(get_password) || exit

while [ "$(expr match "$wPassword" '.')" -lt "1" ]; do
    zenity --error --title="Error in password!" --text="Please check your password! Password field can not be empty!" || exit
    wPassword=$(get_password) || exit
done

# mount windows share to mountpoint
Sudo mount -t cifs //$SERVER/$SHARE ${HOME}/${DIRNAME} -o username=${wUsername},password=${wPassword},domain=${DOMAIN}

# show if mounting was OK or failed
if [ $? -eq 0 ]; then
        zenity --info --title="Mounting public share succeeded!" --text="Location Documents/Shares/public!"
else
        zenity --error --title="Mounting public did not succed!" --text="Please contact system administrator!"
fi
6
mYzk

Selon ceci réponse vous pouvez utiliser secret-tool :

# store password
secret-tool store --label='MyLabel' server myserver user myuser key password

# retrieve password
secret-tool lookup server myserver user myuser key password
5
Nicolas

En cherchant la même chose, je suis tombé sur cette question et comme il n'y avait pas de réponse à jour (la seule réponse est dans un commentaire), voici le mien:

Départ this . Il peut être utilisé facilement pour les scripts

python -c "import keyring; print(keyring.get_password('name', 'username'))"
python -c "import keyring; keyring.set_password('name', 'username', '$PASSWORD')"

et en théorie, cela devrait fonctionner avec de nombreux démons de clés.

4
Ivaylo Petrov