run_keepass_sync.sh
Dies ist eine alte Version des Dokuments!
Dieses Shellscript mit grafischen Dialogboxen (kdialog) vereinfacht die Synchronisierung der Keepass Passwort-Datenbank zu einem Remoterechner.
Ggf. die von mir individuellen Hostnamen in der Funktion check_valid_host und show_host durch die eigenen ersetzen, sowie Pfade in den Variablenbelegungen an die eigenen Gegebenheiten anpassen.
Aufruf des Scriptes
# Algemein: $ ./run_keepass-sync <hostname_des_zielrechners> # Beispiel: $ ./run_keepass-sync raven
- run_keepass_sync.sh
#!/bin/bash # ####################### # Variablenbelegung ####################### # KEEPASS_DIR="/home/michael/Daten/Privat/Keepassxc" KEEPASS_BACKUP_DIR="$HOME/Daten/Privat/Keepassxc_Sicherheitskopie" KEEPASS_FILE="PasswortDatenbank.kdbx" KEEPASS_LOGFILE=$HOME/tmp/$(basename $0).log SOURCE_HOST=$(hostname) DESTINATION_HOST=$1 DUMMY_FILE="/tmp/dummy.txt" # # ################ # Funktionen ################ # create_log() { # Altes Logfile löschen und neues erstellen if [ -e "$KEEPASS_LOGFILE" ] then rm $KEEPASS_LOGFILE touch $KEEPASS_LOGFILE echo "Logfile $KEEPASS_LOGFILE angelegt (1)" >> $KEEPASS_LOGFILE else touch $KEEPASS_LOGFILE echo "Logfile $KEEPASS_LOGFILE angelegt (2)" >> $KEEPASS_LOGFILE fi } make_backupdir() { if [ ! -d "$KEEPASS_BACKUP_DIR" ] then mkdir $KEEPASS_BACKUP_DIR echo "Backupverzeichnis $KEEPASS_BACKUP_DIR angelegt" >> $KEEPASS_LOGFILE else echo "Backupverzeichnis $KEEPASS_BACKUP_DIR existiert bereits" >> $KEEPASS_LOGFILE fi } check_keepass_db() { # Test ob die Passwort-DB vorhanden ist am definierten Pfad if [ -e "$KEEPASS_DIR/$KEEPASS_FILE" ] then echo "Passwort-Datenbank $KEEPASS_DIR/$KEEPASS_FILE existiert" >> $KEEPASS_LOGFILE else echo "Passwort-Datenbank $KEEPASS_DIR/$KEEPASS_FILE existiert nicht!" >> $KEEPASS_LOGFILE RC=1 return $RC fi } check_valid_host() { case $DESTINATION_HOST in neonlight|greenline|raven) if [ "$SOURCE_HOST" = "$DESTINATION_HOST" ] then kdialog --title "Abgleich der Passwort-Datenbank" --error "Der Name des Ziel- und Remoterechner sind identisch." echo "SOURCE_HOST=$SOURCE_HOST -> DESTINATION_HOST=$DESTINATION_HOST" >> $KEEPASS_LOGFILE RC=1 return $RC else RC=0 return $RC fi ;; *) kdialog --title "Abgleich der Passwort-Datenbank" --error "Ungültigen Namen ($DESTINATION_HOST) für den Zielrechner angegeben." echo "DESTINATION_HOST=$DESTINATION_HOST" >> $KEEPASS_LOGFILE RC=1 return $RC ;; esac } check_dest_host() { # Test auf Erreichbarkeit des Zielrechners echo "Verfügbarkeitstest" > $DUMMY_FILE scp -q $DUMMY_FILE $DESTINATION_HOST:/tmp 2>/dev/null RC=$? if [ "$RC" -eq 0 ] then echo "Zielrechner ist verfügbar und hat eine Netzwerkverbindung im LAN bzw. WLAN" >> $KEEPASS_LOGFILE else echo "Zielrechner ist nicht eingeschaltet oder hat keine Netzwerkverbindung im LAN bzw. WLAN" >> $KEEPASS_LOGFILE return $RC fi } create_logmessages() { # Einträge ins Logfile schreiben für die evt. Fehlersuche echo "KEEPASS_BACKUP_DIR="$KEEPASS_BACKUP_DIR >> $KEEPASS_LOGFILE echo "KEEPASS_DIR="$KEEPASS_DIR >> $KEEPASS_LOGFILE echo "$KEEPASS_FILE="$KEEPASS_FILE >> $KEEPASS_LOGFILE echo "USER="$USER >> $KEEPASS_LOGFILE echo "SOURCE_HOST="$SOURCE_HOST >> $KEEPASS_LOGFILE echo "DESTINATION_HOST="$DESTINATION_HOST >> $KEEPASS_LOGFILE echo "Simmulierter Pogrammaufruf: rsync -v -r -c -g -p -t -l -H -b --backup-dir=$KEEPASS_BACKUP_DIR --delete --stats --progress -e ssh $KEEPASS_DIR/$KEEPASS_FILE $USER@$DESTINATION_HOST:$KEEPASS_DIR/" >> $KEEPASS_LOGFILE } run_sync() { # Synchronisation anstossen via rsync echo "" >> $KEEPASS_LOGFILE echo "Synchronistaion der Passwort-Datenbank $KEEPASS_FILE nach Zielrechner $DESTINATION_HOST startet ..." >> $KEEPASS_LOGFILE rsync -v -r -c -g -p -t -l -H -b --backup-dir=$KEEPASS_BACKUP_DIR --delete --stats --progress -e ssh $KEEPASS_DIR/$KEEPASS_FILE $USER@$DESTINATION_HOST:$KEEPASS_DIR/ >> $KEEPASS_LOGFILE RC=$? echo "RC rsync = "$? >> $KEEPASS_LOGFILE return $RC } show_passive_popup() { # Popup anzeigen bei erfolgreicher Synchronisation if [ "$RC" = "0" ] then kdialog --passivepopup "Synchronisation der Passwort-Datenbank konnte erfolgreich durchgeführt werden" 5 else kdialog --passivepopup "Synchronisation der Passwort-Datenbank konnte nicht erfolgreich durchgeführt werden" 5 fi } show_host() { # Ermittlung von Quell- und Zielrechner für die Ausgabe in kdialog-Box if [ "$DESTINATION_HOST" = "greenline" ] then PC_TYP_DEST="Laptop" elif [ "$DESTINATION_HOST" = "raven" ] then PC_TYP_DEST="Laptop" elif [ "$DESTINATION_HOST" = "neonlight" ] then PC_TYP_DEST="Desktop-PC" else PC_TYP_DEST="unbekannter Zielrechner" fi if [ "$SOURCE_HOST" = "greenline" ] then PC_TYP_SOURCE="Laptop" elif [ "$SOURCE_HOST" = "raven" ] then PC_TYP_SOURCE="Laptop" elif [ "$SOURCE_HOST" = "neonlight" ] then PC_TYP_SOURCE="Desktop-PC" else PC_TYP_SOURCE="unbekannter Quellrechner" fi } check_proc() { # Testen ob Keepassxc auf den Rechnern läuft PROC_ID_LOCAL=$(pidof keepassxc) echo "PROC_ID_LOCAL="$PROC_ID_LOCAL >> $KEEPASS_LOGFILE if [ "$PROC_ID_LOCAL" ] then return fi PROC_ID_REMOTE=$(ssh $DESTINATION_HOST pidof keepassxc) echo "PROC_ID_REMOTE="$PROC_ID_REMOTE >> $KEEPASS_LOGFILE } ################## # Hauptprogramm ################## # create_log check_valid_host if [ "$RC" -eq 1 ] then exit 1 fi check_dest_host if [ "$RC" -ne 0 ] then CHECK_DEST_HOST_DIALOG=$(kdialog --title "Abgleich der Passwort-Datenbank" --detailederror "Zielrechner $DESTINATION_HOST ist nicht eingeschaltet oder hat keine Netzwerkverbindung im LAN bzw. WLAN.\n\n1. Bitte den Zielrechner einschalten oder/und eine Netzwerkverbindung herstellen.\n2. Danach dieses Programm nochmals starten.\n" "$(cat $KEEPASS_LOGFILE)") exit 1 fi check_proc if [ "$PROC_ID_LOCAL" ] then CHECK_PROC_DIALOG=$(kdialog --title "Abgleich der Passwort-Datenbank" --detailederror "Auf diesem Rechner ($SOURCE_HOST) läuft noch der Passwortmanager.\n\n1. Bitte den Passwortmanager beenden.\n2. Danach dieses Programm nochmals starten.\n" "$(cat $KEEPASS_LOGFILE)") exit 10 elif [ "$PROC_ID_REMOTE" ] then CHECK_PROC_DIALOG=$(kdialog --title "Abgleich der Passwort-Datenbank" --detailederror "Auf dem Zielrechner $DESTINATION_HOST läuft noch der Passwortmanager.\n\n1.Bitte den Passwortmanager auf dem Zielrechner $DESTINATION_HOST beenden.\n2. Danach dieses Programm nochmals starten.\n" "$(cat $KEEPASS_LOGFILE)") exit 20 fi make_backupdir check_keepass_db if [ "$RC" -ne 0 ] then CHECK_KEEPASS_DB_DIALOG=$(kdialog --title "Abgleich der Passwort-Datenbank" --detailederror "Die Datenbankdatei ($KEEPASS_FILE) für Keepassxc existiert nicht.\n" "$(cat $KEEPASS_LOGFILE)") exit 2 fi show_host SYNC_DIALOG=$(kdialog --title "Abgleich der Passwort-Datenbank" --yesnocancel "\nSoll die Passwort-Datenbank ($KEEPASS_FILE) vom Quell- zum Zielrechner synchronisiert werden?\nAchtung, dabei wird die Passwort-Datenbank auf dem Zielrechner überschrieben.\n\nVoraussetzung dafür ist, das die Datenbank des Passwortmanagers im selben Verzeichnis auf Quell- und\nZielrechner abgelegt ist unter $KEEPASS_DIR.\n\nHinweis:\nQuelle ist dieser Rechner: Name $SOURCE_HOST ($PC_TYP_SOURCE)\nZiel ist der entfernte Rechner: Name $DESTINATION_HOST ($PC_TYP_DEST)\n") SYNC_DIALOG_CHECK=$? if [ "$SYNC_DIALOG_CHECK" = "0" ] then create_logmessages echo "SYNC_DIALOG_CHECK JA = "$SYNC_DIALOG_CHECK >> $KEEPASS_LOGFILE run_sync show_passive_popup $RC elif [ "$SYNC_DIALOG_CHECK" = "1" ] then create_logmessages echo "SYNC_DIALOG_CHECK NEIN = "$SYNC_DIALOG_CHECK >> $KEEPASS_LOGFILE exit 3 elif [ "$SYNC_DIALOG_CHECK" = "2" ] then create_logmessages echo "SYNC_DIALOG_CHECK ABBRECHEN = "$SYNC_DIALOG_CHECK >> $KEEPASS_LOGFILE exit 4 fi #EOF
run_keepass_sync.sh.1612854609.txt.gz · Zuletzt geändert: 2021/02/09 08:10 von dwadmin