KeepassXC: Synchronisation der Datenbank über WebDAV mit rclone

Mike hat im Blog schon vor einiger Zeit den Passwort-Manager KeePassXC und in einem weiteren Beitrag die Synchronisation der Datenbank mit syncthing dargestellt. Letzteres lässt sich alternativ auch vielleicht ein bisschen einfacher mit rclone umsetzen.

Ich synchronisiere die Datenbank per WebDAV über mein Mailkonto bei mailbox.org. WebDAV wird auch von anderen Anbietern wie z.B. posteo.de unterstützt und ist daher dort ähnlich einzurichten. Als Betriebssystem verwende ich Arch Linux mit KDE. Unter z.B. Windows sehen die folgenden Details daher teilweise ein bisschen anders aus.

Vorweg: Ich habe in meinem mailbox.org-Konto unterhalb von Drive > Meine Dateien einen Ordner KeePass angelegt, in dem die Datenbank abgelegt wird. Der Ordner „Meine Dateien“ ist standardmäßig schon vorhanden. In der einzugebenden URL (siehe die folgenden Schritte) ist daher nur der entsprechende neue Unterordner anzugeben. Oder diesen eben ganz weglassen, falls man die Datenbank direkt in „Meine Dateien“ ablegt.

Die Vorgehensweise ist auf https://rclone.org/webdav/ erläutert:

  • Man startet rclone config und wählt New remote.
  • Es ist ein Name für die neue Verbindung zu wählen - ich habe mich für KPXC entschieden.
  • Bei Storage ist webdav zu wählen.
  • Die einzugebende URL (inkl. dem oben erwähnten Ordner) lautet bei mailbox.org:
    https://office.mailbox.org/servlet/webdav.infostore/Userstore/<Benutzername>/KeePass
    Hinweis: Der Benutzername ist bei mir als .../Vorname Nachname/... eingegeben. Ich weiß nicht, ob das generell bei allen Mailkonten so ist. Ggfs. muss man das ausprobieren.
  • Bei vendor ist other zu wählen.
  • Bei user ist die Mailadresse einzugeben.
  • Bei Passwort ist Yes type in my own password zu wählen und das Passwort für das Mailkonto einzugeben. Wichtig: Dieses wird anschließend von rclone in verschlüsselter Form auf dem Rechner gespeichert!
  • Das Ganze zum Schluss mit y bestätigen oder ggfs. mit e nochmals editieren.

Als Ergebnis erzeugt rclone die Datei ~/.config/rclone/rclone.conf:

[KPXC]
type = webdav
url = https://office.mailbox.org/servlet/webdav.infostore/Userstore/******/KeePass
vendor = other
user = *****@mailbox.org
pass = *******************

Mit folgendem Befehl lässt sich nun die Datenbank nach mailbox.org kopieren:

rclone copy -vv /home/seeket/MeineDaten.kdbx KPXC:

Die Option -vv habe ich nur hinzugefügt, um die Ausgabe etwas gesprächiger zu machen.

Hat man z.B. auf dem Handy mit einer Keepass-kompatiblen App an der Datenbank etwas verändert, lässt diese sich wiederum auf den Rechner kopieren:

rclone copy -vv KPXC: /home/seeket

Einen automatischen Sync vermeide ich, um Datenverluste bzw. unbeabsichtigtes Überschreiben zu verhindern. Um zu checken, ob die remote und die lokale Version der Datenbank identisch sind, kann man

rclone check MeineDaten.kdbx KPXC: --download

ausführen. Der Schalter --download ist hier nötig, weil WebDAV keine Hashes unterstützt und daher die remote Version heruntergeladen wird, um die Dateigröße zu vergleichen.

Um das zu vereinfachen, habe ich mir in der ~/.bashrc folgende Aliase angelegt:

alias keepush="rclone copy -vv /home/seeket/MeineDaten.kdbx KPXC:"
alias keereceive="rclone copy -vv KPXC: /home/seeket"
alias keecheck="rclone check  /home/seeket/MeineDaten.kdbx KPXC: --download"

KeePassXC starte ich nicht direkt, sondern über folgendes Skript:

#!/bin/bash

FILE="/tmp/kee.txt"
rclone check /home/seeket/MeineDaten.kdbx KPXC: --download 2>&1 | tee "$FILE"
STRING="sizes differ" 

if grep -q "$STRING" "$FILE"; then
 
  kdialog --title "Remote und lokale Datei unterscheiden sich" --yesno "Dateien unterschiedlich.\n Abbrechen?"
  
  response=$?
  case $response in
   0) kdialog --msgbox "Abbruch!" && exit ;;
   1) kdialog --msgbox "Weiter ..." && keebackup && keepassxc;;
  esac
  
  else
    
    
   keebackup && keepassxc
    
fi

Man hat also die Möglichkeit, den Start von KeePassXC abzubrechen, falls rclone Unterschiede zwischen der remote und lokalen Version der Datenbank feststellt, so dass diese vorher manuell synchronisiert werden kann.

kdialog verwende ich, weil ich KDE benutze. Mit anderen Desktop Environments lässt sich alternativ dafür aber auch z.B. Zenity, Dialog oder Yad verwenden.

keebackup ist übrigens folgendes Skript:

#!/bin/bash

SRCFILE=/home/seeket/MeineDaten.kdbx
TIME=`date +%b-%d-%Y-%H:%M:%S`            
DESTFILE=/home/seeket/MeineDaten.kdbx-$TIME  
cp $SRCFILE $DESTFILE

# alle Backups älter als 10 Tage löschen
find /home/seeket/MeineDaten.kdbx-* -type f -mtime +10 -delete

Es legt vor jedem Start von KeePassXC eine Kopie der Datenbank an (mit Zeitstempel) und löscht alle Backups, die älter als 10 Tage sind.

3 „Gefällt mir“

Vielen Dank für die Anleitung.
Wenn ich es richtig verstanden habe, läuft bei dir und bei Mike die Synchronisation immer nur in eine Richtung. Das heißt eine Datenbankversion ist die Richtige und die andere wird damit ersetzt.
Was öfters bei mir das Problem ist, ich benutze eine Keepassdatenbank mit meiner Frau auf zwei verschiedenen Rechnern, d.h. im Idealfall liegen zwei identische Kopien auf beiden Rechnern. Allerdings kommt es nun doch ab und zu vor, dass auf beiden Rechnern unabhängig von einander Einträge gemacht wurden und nun zwei verschiedene aktuelle Keepassdateien vorliegen.
Bisher habe ich versucht das händisch abzugleichen.
Nun gibt es aber im KeepassXC unter Datenbank auch die Funktion „Mit Datenbank zusammenführen“. Ein Test meinerseits hat probeweise ergeben, dass man damit eigentlich genau dieses Problem beheben kann. Allerdings traue ich dem Ganzen noch nicht, da ich noch nicht genau abschätzen kann, ob dabei wirklich alles richtig zusammengeführt wird.
Hast du damit Erfahrung und kann man so einen Abgleich auch in deinem Script unterbringen?
Zumindest auf keepass.info habe ich diesen Befehl gefunden

Command: Sync
This command synchronizes the database with another one. The other database path has to be specified using the „-File“ command line parameter. Usage example:

KPScript -c:Sync -guikeyprompt "C:\Path\A.kdbx" -File:"C:\Path\B.kdbx"

Ich selber stehe mit Scripten ziemlich auf dem Kriegsfuß bzw. habe zur Zeit keine Muße, mir das endlich mal beizubringen.

Ich bekomme immer nur den Fehler Failed to copy: 409 conflict

Ich bin mir auch nicht sicher, welche Pfad ich direkt angeben muss.
Der Ordner liegt im Mailbox Speicher unter Drive > Meine Dateien > Dokumente > Keepass
Da bin ich von ausgegangen, dass ich in rclone dann als Pfad https://office.mailbox.org/servlet/webdav.infostore/Userstore/Vorname, Nachname/Meine Dateien/Dokumente/Keepass angebe. Leider hat das nicht geholfen und auch mal den kompletten Mailbox Pfad angeben oder sonstige Konstellationen haben nicht geholfen.

Welchen Pfad gebt ihr da an? Den ab Meine Dateien?

Ja, wobei Mike das ein bisschen anders handhabt. Er schreibt ja:

Eine »echte« Synchronisation zwischen Desktop- und mobiler KeePass-Datenbank findet nicht statt. Vielmehr handelt es sich um eine Art »Push« vom Desktop auf das mobile Endgerät. Sobald ich auf dem Desktop eine Änderung an der KeePass-Datenbank vorgenommen habe, wird die Datenbank auf das mobile Endgerät kopiert. Ihr könnt das natürlich anders handhaben – für mein Setup ist das die sinnvollste Lösung. Ich pflege meine Passwörter für das mobile Endgerät ausschließlich auf dem Desktop. Unterwegs findet dann lediglich eine Nutzung statt.

Das mache ich zwar meist auch so, erlaube aber dennoch in einigen Fällen die Modifikation der Datenbank auf dem Handy. In diesen Fällen erfolgt dann die manuelle Synchronisation mit keereceive.

Nein, tut mir leid, damit habe ich keine Erfahrung. Und die Skripte für KeePass funktionieren unter KeePassXC nicht, das müsste da anders umgesetzt werden.

Bei mir ist der Pfad Drive > Meine Dateien > KeePass . Der Ordner „Meine Dateien“ ist offenbar schon vorgegeben. Da du Keepass als Unterordner im Ordner Dokumente angelegt hast, müsstest du also

https://office.mailbox.org/servlet/webdav.infostore/Userstore/<Benutzername>/Dokumente/Keepass

angeben. Und was den Benutzernamen angeht: Bei mir steht

.../Vorname Nachname/...

EDIT: Ich habe die Aspekte Pfad und Benutzername im Tutorial noch etwas näher erläutert.

Der Installations-/Einrichtungs-Aufwand liest sich für mich bei beiden „ungefährt gleich groß“. Bei syncthing hat man meiner Meinung nach aber den unschlagbaren Vorteil, dass das alles 24x7 vollautomatisch in alle Richtungen auf beliebig viele Computer (und Android, leider nicht auf iOS) synchronisiert.

Ich synchronisiere meinen Passwort-Manager (pass) dennoch anders:

Und zwar ist der ja schon ein git-Repo in meinem privaten Repo auf GitLab und damit ist schon alles gesagt, was zu tun ist :wink: (einmalig: git clone … und ab dann git pull/push).
Das funktioniert sogar so gut und „einfach“, dass selbst meine Kinder (Schüler) und Frau (Nicht-Informatikerin) das auf ihren iPhones benutzen können :heart: Ausserdem gibt es auch noch Browser-Extension und GUIs dafür…

Hier nur der kleine Hinweis, dass man mit https://www.mobiussync.com/ Syncthing auch auf iOS verwenden kann. Allerdings scheint es ja mit der vollautomatischen Aktualisierung unter iOS Limitierungen zu geben.
Danke auch für den Hinweis auf pass. Mit GitLab muss ich mich dann wohl auch noch mal auseinandersetzen.

Das ist einer der Gründe, warum ich wieder zum Original zurück bin.

https://keepass.info/help/base/multiuser.html#syncorsave2x
https://keepass.info/help/v2/sync.html