Können Sie den Gnome-Schlüsselring im Bash-Skript verwenden, wenn ja, wie?


8

Ich entwickle ein automatisiertes Montageskript für Windows-Freigaben. Ich habe das Skript fertiggestellt und es funktioniert einwandfrei, aber es ist möglich, Gnome Keyring zur Bash hinzuzufügen. Sobald der Benutzer sein Passwort schreibt, wird es in Gnome Keyring gespeichert und später von dort übernommen. Außerdem müssen die Kennwörter meiner Windows AD-Benutzer jeden Monat geändert werden. Ist es möglich, das Skript so zu erstellen, dass das Skript nach Ablauf eines Monats erneut nach dem Kennwort fragt?

Beispiel:

Der Benutzer meldet sich bei Ubuntu an und das Mount-Skript beginnt bei der Anmeldung. Der Benutzer schreibt sein Passwort und das Skript sendet es zum Speichern an Gnome Keyring. Wenn er sich das nächste Mal anmeldet, wird das Passwort vom Gnome-Schlüsselring übernommen, aber wenn es beispielsweise der 1. Juni ist, muss der Benutzer das Passwort erneut schreiben.

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

Sah in Gnome Schlüsselring Handbuch und scheint, dass es nur C-Programme unterstützt :(
mYzk

Antworten:


6

Nach dieser Antwort können Sie das Geheimwerkzeug verwenden :

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

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

Es wäre besser, wenn das Passwort NICHT in die Kommandozeile eingegeben würde.
Anthony

@anthony, Sie können am Anfang des Befehls ein Leerzeichen hinzufügen, um es nicht im Verlauf zu speichern.
Nicolas

Erstens ... können Sie sich daran erinnern, ein Leerzeichen vor einem Befehl zu setzen? Das ist aber nicht das einzige Problem. Es wird auch in der Prozessliste sichtbar! Die EINZIGE Zeit, in der ein Passwd in die Befehlszeile gestellt werden kann, ist eine eingebaute Bash (wie "Echo"), da diese nicht in der Prozessliste angezeigt wird!
Anthony

Ich ziehe meinen Kommentar jedoch zurück, da 'Passwort' in diesem Fall nicht DAS Passwort ist, sondern ein Attribut, das besagt, dass das gespeicherte 'Geheimnis' ein Passwort ist. "secret-tool" fordert immer (kein Echo) zur Eingabe des "Geheimnisses" auf oder liest von der Standardeingabe. Es war im gezeigten Beispiel oder sogar im Handbuch einfach nicht klar.
Anthony

1
Echo 'Geheimnis' | Geheimnis-Werkzeugspeicher --label = 'Englisch Beschreibung' attr Wert [attr value] ...
anthony

4

Bei der Suche nach dem gleichen Thema bin ich auf diese Frage gestoßen. Da es keine aktuelle Antwort gab (die einzige Antwort befindet sich in einem Kommentar), ist hier meine:

Überprüfen Sie dies . Es kann leicht für Skripte verwendet werden

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

und theoretisch sollte mit vielen Schlüsselringdämonen arbeiten.


Das OP fragt hauptsächlich nach der Verwendung des GNOME-Schlüsselbunds im Bash-Skript und nicht in Python. Sofern Sie nicht nachweisen können, dass das Python-Skript über ein Bash-Skript integriert oder verknüpft werden kann, wird diese Antwort möglicherweise abgelehnt.
Clearkimura

Der Python-Code kann über ein Bash-Skript ausgeführt werden. Angenommen, er zählt, wenn er mit dem Gnome-Schlüsselring verbunden werden kann
Wilf,

Das von mir bereitgestellte Code-Snippet kann direkt in ein Bash-Skript eingefügt werden. Zum Beispiel können Sie haben PASSWORD=$(zenity --password)und dann python -c "import keyring; keyring.set_password('wifi_work_password', 'ipetrov', '$PASSWORD')"oder PASSWORD=$(python -c "import keyring; print(keyring.get_password('name', 'username'))")(dies gibt None zurück, wenn kein Passwort gefunden wird, was für Sie möglicherweise schlecht ist, aber für mich ist es in Ordnung).
Ivaylo Petrov

Das Passwort in die Kommandozeile zu setzen ist keine gute Idee!
Anthony
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.