Rsync über SSH mit E-Mail Benachrichtigung und Rotation

Im Internet finden sich eine Vielzahl von Anleitung bei denen nicht immer klar erkenntlich ist, welches System in welche Richtung synchronisiert bzw. gebackup werden soll. Daher zunächst eine Beschreibung des Versuchsaufbaus.


2 Linux Rechner

1. Server: Beherbergt die Dateien im original.
2. Client: Macht eine Kopie von den Dateien

Wie in der Überschrift genannt, soll das Ganze über SSH ablaufen. Außerdem soll es später automatisiert werden. Also benötigen wir einen SSH-Login ohne Passwort und mit Zertifikat. Es empfiehlt sich ggf. einen neuen Benutzer zu erstellen, der nur eingeschränkte Lese-Rechte auf dem Server hat, falls der Key vom Client mal in die falschen Hände gerät und es nicht sofort gemerkt wird.


benutzer@client$ ssh-keygen -b 2048 -t rsa

Im Prinzip können alle Abfragen mit [Enter] bestätigt werden, außer es existieren ggf. schon Keys bzw. falls der Key in einem anderen Verzeichnis gespeichert werden soll.

Nach der Erstellung sollten sich zwei Dateien im Verzeichnis benutzer/.ssh/ befinden, einmal eine Datei (bspw.: id_rsa.pub) mit dem öffentlichen Schlüssel und eine die den privaten und öffentlichen Schlüssel enthält. Den öffentlichen Schlüssel kopieren jetzt auf den Server:


benutzer@client$ ssh-copy-id -i .ssh/id_rsa.pub AndererBenutzer@server

Wenn der Key kopiert ist, sollte ein Login mittels


benutzer@client$ ssh AndererBenutzer@server

bereits funktionieren.

Als nächstes wird ein Skript benötigt, welches die Synchronisation durchführt. Dabei greifen wir auf das Programm Rsync zurück. Der einfachste Aufruf wäre wie folgt:


benutzer@client$ rsync -avz -e ssh AndererBenutzer@server:/home/Quellverzeichnis /Benutzer/Zielverzeichnis/

-v, --verbose
-a, --archive
-z, --compress

Eine Auflistung aller Parameter gibt es mittels man rsync oder hier http://linux.die.net/man/1/rsync .

Dieser Aufruf könnte noch in die Crontab geschrieben werden. Zusätzlich möchte ich aber noch eine E-Mail Benachrichtigung und eine Rotation haben.

Die Synchronisation soll einmal die Woche durchgeführt werden und die letzten vier Wochen sollen verfügbar sein, falls mal ein längerer Urlaub ansteht. Anbieten würde es sich also, wenn wir die Wochennummer nehmen und durch vier teilen. Damit gäbe es eine Rotation von vier Wochen.


benutzer@client$ $(($(date +%V)%4))

bzw. im Rsync-Skript wäre dies dann:


benutzer@client$ rsync -avz -e ssh AndererBenutzer@server:/home/Quellverzeichnis /Benutzer/Zielverzeichnis_$(($(date +%V)%4))/

Somit würde das Verzeichnis alle vier Wochen rotieren.

Die E-Mail Benachrichtigung können wir auch direkt über die Konsole erledigen:


benutzer@client$ rsync -avz -e ssh AndererBenutzer@server:/home/Quellverzeichnis /Benutzer/Zielverzeichnis_$(($(date +%V)%4))/ && df -hT | mail -s "Erfolg" mail@example.com || df -hT | mail -s "Error" mail@example.com

Der Aufruf ist mit einer Bedingung ausgestattet, die im Fehlerfall den Betreff anpasst. Als Inhalt wird immer der verfügbare Plattenplatz mitgeschickt, damit rechtzeitig reagiert werde kann.

Anregungen und Verbesserungen gerne in den Kommentaren.