Benutzer-Werkzeuge

Webseiten-Werkzeuge


run_keepass_sync.sh

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
run_keepass_sync.sh [2021/02/15 10:48] – Scriptcode aktuaisiert dwadminrun_keepass_sync.sh [2021/05/27 09:38] (aktuell) – Scriptcode aktuaisiert dwadmin
Zeile 5: Zeile 5:
 Außerdem ist für das Funktionieren des Scriptes auch ein ssh-Key **ohne** Passwort nötig, sowie eine eigene Configdatei. Ggf. mit dem Kommando //ssh-keygen// erzeugen (zB. einen RSA-Key) und auf den Remoterechner per //ssh-copy-id// übertragen. Außerdem ist für das Funktionieren des Scriptes auch ein ssh-Key **ohne** Passwort nötig, sowie eine eigene Configdatei. Ggf. mit dem Kommando //ssh-keygen// erzeugen (zB. einen RSA-Key) und auf den Remoterechner per //ssh-copy-id// übertragen.
  
 +Desweiteren sollte eine PNG-Grafikdatei für die Anzeige im Hauptdialog vorhanden sein (Größe 128x128 Pixel) die in der Variablen $LOGO_FILE hinterlegt ist.
 +
 +\\
 +\\
 +
 +====== Konfigurationsdateien ======
 +\\
 +RSA Key ohne Passwort generieren (2x ENTER drücken)
 +<code>
 +$ ssh-keygen -t rsa -f /home/michael/.ssh/id_rsa_pwdless
 +</code>
 +
 +SSH Config erstellen
 <code bash $HOME/.ssh/config.pwdless> <code bash $HOME/.ssh/config.pwdless>
 # fuer Shellscripte mit passwortloesem Zugriff auf Remoterechner # fuer Shellscripte mit passwortloesem Zugriff auf Remoterechner
Zeile 16: Zeile 29:
 </code> </code>
  
 +SSH Keys auf den Remoterechner transferieren.
 <code> <code>
 $ ssh-copy-id -f <hostname_des_zielrechners> $ ssh-copy-id -f <hostname_des_zielrechners>
 </code> </code>
 +\\
 +\\
  
-Aufruf des Scriptes+====== Aufruf des Scriptes ====== 
 +\\
 <code> <code>
 # Algemein: # Algemein:
Zeile 29: Zeile 46:
 </code> </code>
 \\ \\
 +\\
 +
 +====== Screenshots ======
 +
 +{{screenshot_run_keepass_sync_main.png|Hauptdialog}}
 +
 +{{screenshot_run_keepass_sync_01.png|Forschrittsnzeige Schritt 1}}
 +
 +{{screenshot_run_keepass_sync_02.png|Forschrittsnzeige Schritt 2}}
 +
 +{{screenshot_run_keepass_sync_03.png|Forschrittsnzeige Schritt 3}}
 +
 +{{screenshot_run_keepass_sync_04.png|Forschrittsnzeige Schritt 4}}
 +
 +{{screenshot_run_keepass_sync_05.png|Forschrittsnzeige Schritt 5}}
 +
 +{{screenshot_run_keepass_sync_error_01.png|Fehlermeldung 1}}
 +
 +{{screenshot_run_keepass_sync_error_02.png|Fehlermeldung 2}}
 +
 +{{screenshot_run_keepass_sync_error_03.png|Fehlermeldung 3}}
 +
 +{{screenshot_run_keepass_sync_success.png|Passives Popup}}
 +
 +\\
 +\\
 +
 +====== Scriptcode ======
  
 <code bash run_keepass_sync.sh> <code bash run_keepass_sync.sh>
Zeile 37: Zeile 82:
 ####################### #######################
 # #
-USER_TMP_DIR="/home/michael/tmp" +USER_TMP_DIR="$HOME/tmp" 
-KEEPASS_DIR="/home/michael/Daten/Privat/Keepassxc"+KEEPASS_DIR="$HOME/Daten/Privat/Keepassxc"
 KEEPASS_BACKUP_DIR="$HOME/Daten/Privat/Keepassxc_Sicherheitskopie" KEEPASS_BACKUP_DIR="$HOME/Daten/Privat/Keepassxc_Sicherheitskopie"
 KEEPASS_FILE="PasswortDatenbank.kdbx" KEEPASS_FILE="PasswortDatenbank.kdbx"
-KEEPASS_LOGFILE=/home/michael/tmp/$(basename $0).log+KEEPASS_LOGFILE=$HOME/tmp/$(basename $0).log
 SOURCE_HOST=$(hostname) SOURCE_HOST=$(hostname)
 DESTINATION_HOST=$1 DESTINATION_HOST=$1
-DUMMY_FILE="/home/michael/tmp/dummy.txt"+DUMMY_FILE="$HOME/tmp/dummy.txt
 +LOGO_FILE="$HOME/project/run_keepass_sync.png"
 # #
 # Fuer einen passwortlosen ssh-Zugang ist ein eigener rsa-Key erforderlich # Fuer einen passwortlosen ssh-Zugang ist ein eigener rsa-Key erforderlich
 # (id_rsa_pwdless* und config.pwdless), sowie ein ssh Configfile in ~/.ssh # (id_rsa_pwdless* und config.pwdless), sowie ein ssh Configfile in ~/.ssh
 # #
-SSH_CONFIG_FILE="/home/michael/.ssh/config.pwdless"+SSH_CONFIG_FILE="$HOME/.ssh/config.pwdless"
 # #
 ################ ################
Zeile 60: Zeile 106:
  if [ ! -d "$USER_TMP_DIR" ]  if [ ! -d "$USER_TMP_DIR" ]
  then  then
- mkdir $USER_TMP_DIR + mkdir "$USER_TMP_DIR"
  fi  fi
   
Zeile 69: Zeile 115:
  touch $KEEPASS_LOGFILE  touch $KEEPASS_LOGFILE
  print_timestamp start  print_timestamp start
- echo "[$(date '+%H:%M:%S')] Logfile $KEEPASS_LOGFILE angelegt (1)" >> $KEEPASS_LOGFILE+ echo "[$(date '+%H:%M:%S')] Logfile $KEEPASS_LOGFILE angelegt am $(date '+%d.%m.%Y'(1)" >> $KEEPASS_LOGFILE
  else  else
  touch $KEEPASS_LOGFILE  touch $KEEPASS_LOGFILE
- echo "[$(date '+%H:%M:%S')] Logfile $KEEPASS_LOGFILE angelegt (2)" >> $KEEPASS_LOGFILE+ echo "[$(date '+%H:%M:%S')] Logfile $KEEPASS_LOGFILE angelegt am $(date '+%d.%m.%Y'(2)" >> $KEEPASS_LOGFILE
  fi  fi
 } }
Zeile 132: Zeile 178:
  # Test auf Erreichbarkeit des Zielrechners  # Test auf Erreichbarkeit des Zielrechners
  echo "Verfügbarkeitstest" > $DUMMY_FILE  echo "Verfügbarkeitstest" > $DUMMY_FILE
- scp -F $SSH_CONFIG_FILE $DUMMY_FILE $DESTINATION_HOST:$USER_TMP_DIR+ echo "[$(date '+%H:%M:%S')] Simmulierter Pogrammaufruf:  scp -F $SSH_CONFIG_FILE $DUMMY_FILE $DESTINATION_HOST:/tmp" >> $KEEPASS_LOGFILE 
 + scp -F $SSH_CONFIG_FILE $DUMMY_FILE $DESTINATION_HOST:/tmp
  RC=$?  RC=$?
  if [ "$RC" -eq 0 ]  if [ "$RC" -eq 0 ]
Zeile 148: Zeile 195:
  echo "[$(date '+%H:%M:%S')] KEEPASS_BACKUP_DIR="$KEEPASS_BACKUP_DIR >> $KEEPASS_LOGFILE  echo "[$(date '+%H:%M:%S')] KEEPASS_BACKUP_DIR="$KEEPASS_BACKUP_DIR >> $KEEPASS_LOGFILE
  echo "[$(date '+%H:%M:%S')] KEEPASS_DIR="$KEEPASS_DIR >> $KEEPASS_LOGFILE  echo "[$(date '+%H:%M:%S')] KEEPASS_DIR="$KEEPASS_DIR >> $KEEPASS_LOGFILE
- echo "[$(date '+%H:%M:%S')] $KEEPASS_FILE="$KEEPASS_FILE >> $KEEPASS_LOGFILE+ echo "[$(date '+%H:%M:%S')] KEEPASS_FILE="$KEEPASS_FILE >> $KEEPASS_LOGFILE 
 + echo "[$(date '+%H:%M:%S')] LOGO_FILE="$LOGO_FILE >> $KEEPASS_LOGFILE
  echo "[$(date '+%H:%M:%S')] USER="$USER >> $KEEPASS_LOGFILE  echo "[$(date '+%H:%M:%S')] USER="$USER >> $KEEPASS_LOGFILE
  echo "[$(date '+%H:%M:%S')] SOURCE_HOST="$SOURCE_HOST >> $KEEPASS_LOGFILE  echo "[$(date '+%H:%M:%S')] SOURCE_HOST="$SOURCE_HOST >> $KEEPASS_LOGFILE
Zeile 158: Zeile 206:
 { {
  # Synchronisation anstossen via rsync  # Synchronisation anstossen via rsync
- echo "" >> $KEEPASS_LOGFILE + echo "[$(date '+%H:%M:%S')] Synchronistaion der Passwort-Datenbank $KEEPASS_FILE nach Zielrechner $DESTINATION_HOST startet ..." >> $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 -F '$SSH_CONFIG_FILE'' $KEEPASS_DIR/$KEEPASS_FILE $USER@$DESTINATION_HOST:$KEEPASS_DIR/ >> $KEEPASS_LOGFILE  rsync -v -r -c -g -p -t -l -H -b --backup-dir=$KEEPASS_BACKUP_DIR --delete --stats --progress  -e 'ssh -F '$SSH_CONFIG_FILE'' $KEEPASS_DIR/$KEEPASS_FILE $USER@$DESTINATION_HOST:$KEEPASS_DIR/ >> $KEEPASS_LOGFILE
  RC=$?  RC=$?
Zeile 168: Zeile 215:
 show_passive_popup() show_passive_popup()
 { {
- # Popup anzeigen bei erfolgreicher Synchronisation+ # Popup anzeigen bei (nicht)erfolgreicher Synchronisation
  if [ "$RC" = "0" ]  if [ "$RC" = "0" ]
  then  then
Zeile 181: Zeile 228:
 show_host() show_host()
 { {
- # Ermittlung von Quell- und Zielrechner für die Ausgabe in der kdialog-Box+ # Ermittlung der Typen von Quell- und Zielrechner für die Ausgabe in der kdialog-Box
  if [ "$DESTINATION_HOST" = "greenline" ]  if [ "$DESTINATION_HOST" = "greenline" ]
  then  then
Zeile 211: Zeile 258:
 check_proc() check_proc()
 { {
- # Testen ob Keepassxc auf den Rechnern läuft+ # Testen ob Keepassxc auf dem lokalen Rechnern läuft
  PROC_ID_LOCAL=$(ps -U $USER|egrep keepassxc$ |awk '{print $1}')  PROC_ID_LOCAL=$(ps -U $USER|egrep keepassxc$ |awk '{print $1}')
  if [ "$PROC_ID_LOCAL" ]  if [ "$PROC_ID_LOCAL" ]
Zeile 221: Zeile 268:
  fi  fi
   
 + # Testen ob Keepassxc auf dem entfernten Rechnern läuft
  PROC_ID_REMOTE=$(ssh -F $SSH_CONFIG_FILE $DESTINATION_HOST ps -U $USER | egrep keepassxc$ | awk '{print $1}')  PROC_ID_REMOTE=$(ssh -F $SSH_CONFIG_FILE $DESTINATION_HOST ps -U $USER | egrep keepassxc$ | awk '{print $1}')
  if [ "$PROC_ID_REMOTE" ]  if [ "$PROC_ID_REMOTE" ]
Zeile 232: Zeile 280:
 print_timestamp() print_timestamp()
 { {
 + # Timestamp (Start und Ende) ins Logfile schreiben
  TS_VALUE=$1  TS_VALUE=$1
  if [ "$TS_VALUE" = "start" ]  if [ "$TS_VALUE" = "start" ]
  then  then
- echo "[$(date '+%H:%M:%S')] --------- Start ----------" >> $KEEPASS_LOGFILE+ echo "[$(date '+%H:%M:%S')] ----------------------------------------------------- Start -----------------------------------------------------" >> $KEEPASS_LOGFILE
  elif [ "$TS_VALUE" = "end" ]  elif [ "$TS_VALUE" = "end" ]
  then  then
- echo "[$(date '+%H:%M:%S')] --------- Ende ----------" >> $KEEPASS_LOGFILE+ echo "[$(date '+%H:%M:%S')] ----------------------------------------------------- Ende ------------------------------------------------------" >> $KEEPASS_LOGFILE
  fi  fi
 } }
Zeile 244: Zeile 293:
 init_progressbar() init_progressbar()
 { {
 + # initieren der Fortschrittsanzeige
  progress=$(kdialog --title "Abgleich der Passwort-Datenbank" --progressbar "Abgleich der Passwort-Datenbank" 5)  progress=$(kdialog --title "Abgleich der Passwort-Datenbank" --progressbar "Abgleich der Passwort-Datenbank" 5)
  qdbus $progress showCancelButton false  qdbus $progress showCancelButton false
Zeile 250: Zeile 300:
 run_progressbar() run_progressbar()
 { {
 + # Fortschrittsanzeige aktualisieren bei jedem Schritt
  VALUE="$1"  VALUE="$1"
  TEXT="$2"  TEXT="$2"
Zeile 258: Zeile 309:
 close_progressbar() close_progressbar()
 { {
 + # Fortschrittsanzeige am Scriptende schließen
  qdbus $progress close > /dev/null  qdbus $progress close > /dev/null
 } }
Zeile 266: Zeile 318:
 # #
 init_progressbar init_progressbar
-run_progressbar "1" "Diverse Vorbereitungen zur Synchronisation treffen" +run_progressbar "1" "Verschiedene Vorbereitungen zur Synchronisation treffen"
-#qdbus $progress Set "" value 1 > /dev/null +
-#qdbus $progress setLabelText "1. Schritt:   Diverse Vorbereitungen zur Synchronisation treffen" > /dev/null+
 sleep 2 sleep 2
 create_log create_log
Zeile 287: Zeile 337:
 fi fi
  
-run_progressbar "2" "Quell- und Zielrechner auf Verfügbarkeit prüfen" +run_progressbar "2" "Quell- und Zielrechner auf Erreichbarkeit überprüfen"
-#qdbus $progress Set "" value 2 > /dev/null +
-#qdbus $progress setLabelText "2. Schritt:   Quell- und Zielrechner auf Verfügbarkeit prüfen" > /dev/null +
-#sleep 2+
 check_dest_host check_dest_host
 if [ "$RC" -ne 0 ] if [ "$RC" -ne 0 ]
Zeile 301: Zeile 348:
  
 run_progressbar "3" "Prüfe ob KeepassXC auf Quell- oder Zielrechner läuft" run_progressbar "3" "Prüfe ob KeepassXC auf Quell- oder Zielrechner läuft"
-#qdbus $progress Set "" value 3 > /dev/null 
-#qdbus $progress setLabelText "3. Schritt: Prüfe ob KeepassXC auf Quell- oder Zielrechner läuft" > /dev/null 
 check_proc check_proc
 +# Auf Rückgabewerte der Funktion check_proc mit entsprechenden Dialogboxen reagieren 
 if [ "$PROC_ID_LOCAL" ] if [ "$PROC_ID_LOCAL" ]
  then  then
Zeile 318: Zeile 364:
 fi fi
  
-run_progressbar "4" "Prüfe ob KeepasXC DB im gleichen Verzeichnis liegen" +run_progressbar "4" "Prüfe ob KeepassXC DB im angegebenen Verzeichnis liegt"
-#qdbus $progress Set "" value 4 > /dev/null +
-#qdbus $progress setLabelText "4. Schritt:  Prüfe ob KeepasXC DB im gleichen Verzeichnis liegen" > /dev/null+
 make_backupdir make_backupdir
 check_keepass_db check_keepass_db
 +# Auf Rückgabewert der Funktion check_keepass_db reagieren
 if [ "$RC" -ne 0 ] if [ "$RC" -ne 0 ]
  then  then
Zeile 333: Zeile 378:
 show_host 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, dass 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")+# Hauptdialogbox vor der Synchronisation der Passwort-Datenbank 
 +#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, dass 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") 
 + 
 +kdialog --title "Abgleich der Passwort-Datenbank" --yesnocancel "<center><img src=$LOGO_FILE></img><br></center>Soll die Passwort-Datenbank (Dateiname: $KEEPASS_FILE) vom Quell- zum Zielrechner synchronisiert werden?<br><br>Achtung, dabei wird die Passwort-Datenbank auf dem Zielrechner überschrieben. Voraussetzung für eine erfolgreiche Synchronisation ist, dass die Datenbank des Passwortmanagers im selben Verzeichnis auf Quell- und Zielrechner abgelegt ist:<br><center><b>$KEEPASS_DIR</b></center><br>Hinweis:<br>Quelle ist dieser Rechner: Name $SOURCE_HOST ($PC_TYP_SOURCE)<br>Ziel ist der entfernte Rechner: Name $DESTINATION_HOST  ($PC_TYP_DEST)<br>"
 SYNC_DIALOG_CHECK=$? SYNC_DIALOG_CHECK=$?
  
 run_progressbar "5" "Synchronisation der KeepassXC Datenbank durchführen" run_progressbar "5" "Synchronisation der KeepassXC Datenbank durchführen"
-#qdbus $progress Set "" value 5 > /dev/null +Auf Mausklicks in der Hauptdialogbox reagieren (JA, NEIN, ABBRECHEN)
-#qdbus $progress setLabelText "5. Schritt:  Synchronisation der KeepassXC Datenbank durchführen" > /dev/null+
 if [ "$SYNC_DIALOG_CHECK" = "0" ] if [ "$SYNC_DIALOG_CHECK" = "0" ]
  then  then
run_keepass_sync.sh.1613382524.txt.gz · Zuletzt geändert: 2021/02/15 10:48 von dwadmin