Linux (Raspbian): Syncronisierung von Verzeichnissen mit Unison und SSH

Für Linux ist rsync ja das Mittel der Wahl für das Archivieren von Verzeichnissen, jedoch geht das leider nur in eine Richtung. Deshalb gibt es das Unison Tool, welches auf rsync aufsetzt, das diese Aufgabe ausführt. Der Dateiaustausch kann über verschiedene Protokolle laufen. Eines ist das SSH-Protokoll.

SSH Authentifizierung mit Zertifikat:

Hierfür habe ich auf meinem Windows Rechner (Client) mit Puttygen (ich benutzte den Putty aus den PortableApps.com) (in Linux mit „ssh-keygen -t rsa -b 4096“ die Keys erzeugen) ein 4092 bit RSA Zertifikat erzeugt. Hier habe ich dann für mich die öffentlichen Schlüssel untere id_rsa.pub gespeichert und den privaten Schlüssel unter id_rsa gespeichert (Vorsicht mit dem privaten Schlüssel). Ich verwende noch eine Phrase, damit es noch sicherer wird.

Jetzt muß der Public Key mit auf dem Server bekannt gemacht werden.

Verschiedene Methoden:

  • in Linux
    cat id_rsa.pub | ssh ServerID 'cat ~/.ssh/authorized_keys'
    ssh Username ServerID
    ssh-add # manchmal notwendig wenn ein Fehler erscheint
  • in MobaXterm, Putty oder Kitty
    im Profil gibt es irgendwo den Punkt

    • Advanced Settings -> Use private key -> id_rsa-Datei
    • SSH -> Auth -> Private key file for authentication -> id_rsa-Datei

Ich starte an dieser Stelle immer den SSH Server Dienst einmal neu.

sudo service ssh restart

Bei mir funktioniert jetzt immer die SSH Verbindung.

VORSICHT: Ich hatte ein Problem in der /etc/ssh/sshd_config. Mein X11 Forwarding ging von einem auf den nächsten Tag nicht mehr. Ich konnte es nach langem probieren lösen, indem ich den folgenden Eintrag hinzugefügt hatte und noch mal das lokale .Xauthority gelöscht habe:

X11UseLocalhost no

Syncronisation aufsetzen:

Als erstes muß das Unison Paket installiert werden:

sudo apt-get -y install unison

Ein Beispiel für eine entsprechende Unison Konfigurationsdatei (userpi.prf):

root = /home/username # Lokales Verzeichnis
root = ssh://root@192.168.178.3//home/username # entferntes Verzeichnis
prefer=newer
times=true

Befehl:

unison test.prf # einfach
unison -batch -owner -silent -contactquietly -auto -log -logfile /var/log/unison/$(basename "$i" ".prf").$DATUM.log $(basename "$i" ".prf") 2>1

Ich finde den Parameter (-repeat watch) noch sehr interessant

Erweiterung: Diese Datei liest verschiedene .prf Dateien ein und führt die Syncronisation durch:

#!/bin/sh
DATUM=$(date +%d.%m.%Y-%HUhr)
LISTE=`find /root/.unison/ . -iname "*.prf"`;
REMOTEIP=192.168.178.3
ping -c 3 $REMOTEIP > /dev/null # mache 3 pings und leite die Ausgabe in /dev/null um
if [ $? -eq 0 ] # wenn ping OK dann starte unison, sonst mache nichts
   then for i in $LISTE; #lese alle *.prf Dateien aus LISTE
      do
         #starte unison und schreibe Logfile mit Username und Zeitstempel
         unison -batch -owner -silent -contactquietly -auto -log -logfile /var/log/unison/$(basename "$i" ".prf").$DATUM.log $(basename "$i" ".prf") 2>1
      done
fi

Linux Script Lock (bei Cronjobs) aufsetzen:

Version 1 – Eigene Logik im Script:

#!/bin/sh
LOCK=/var/tmp/mylock
if [ -f $LOCK ]; then # 'test' ; race begin
 echo Job is already running\!
 exit 6
fi
touch $LOCK # 'set' ; race end
# do some work
rm $LOCK

Version 2 im Cronjob:

*/5 * * * * test -e /var/lock/unison-PROFILNAME; exit 0 || (touch /var/lock/unison-PROFILNAME;unison PROFILNAME;rm /var/lock/unison-PROFILNAME)

Es wird zuerst geprüft, ob ein Lockfile vorhanden ist. Dann wird ein Lockfile angelegt, damit Unison nicht doppelt aufgerufen wird. Wenn z.B. Job länger als 5 Minuten dauert, wird der nächste Job gleich wieder abgebrochen, da dieser zu doppelten Aktionen führen könnte. Der nächste Job startet dann erst wieder, wenn der Vorgänger abgeschlossen ist.

Version 3 – Lockrun Tool:

lockrun --lockfile=/var/tmp/mylock myscript.sh # Lockrun Tool muß installiert werden

Quellen:

SSH-Wiki bei Ubuntuusers (Authentifizierung über Public-Keys)

bidirektional syncen

cron – correct locking in shell scrips

Linux (Raspbian): Syncronisierung von Verzeichnissen mit Unison und SSH

Nick Horn ist für den Blog Nicks-Technik.de verantwortlich und interessiert sich für die Themen Lifestyle, Technik, Sport und Reisen. Motto: Der Weg ist das Ziel.