Wer einen Server mit Kunden betreibt, sollte immer einen zweiten (schwächeren) Backup-Server mitlaufen lassen. Da bietet sich z.B. eine Replikation der MySQL Datenbank an – aber Vorsicht, nur mit Monitoring betreiben! – und vor allem ein Backup der Dateien. Wie lassen sich die Dateien bequem und automatisiert auf einen anderen Server übertragen?
Die einfachste, schnellste und sicherste Methode ist rsync mit der SSH Schnittstelle zu kombinieren. rsync wird über Cronjobs ausgeführt und man bastelt sich ein kleines Skript mit verschiedenen Befehlaufrufen, die jeweils inkrementell alle Dateien auf den angegebenen Server übertragen und veraltete Dateien dort löschen und mit den jeweils aktuellen ersetzen. Wie richtet man eine solche Sicherung ein?
Zuerst müssen wir ein private / public Key-Paar erstellen, damit sich der eine Server auf dem Backup-Server mittels SSH Key einloggen kann (sicherste Variante!). Bitte vergebt dabei als Kommentar root@Namen eures Hosts, damit ihr auf dem Backup-Server immer wisst, welcher Key was macht.
ssh-keygen -t rsa -b 4098 -N "" -C "root@[hostname]"
-t gibt an, mit welchem Algorithmus gearbeitet wird, -b die Keylänge und -N “” erstellt ein leeres Passwort für den Key. Beim Erstellen keinen Dateinamen vergeben, sondern einfach den Standard id_rsa vergeben lassen. Kopiert nun den Inhalt der Datei id_rsa.pub (das ist der Public Key). Loggt euch jetzt auf dem Backup Server ein, erstellt dort im Ordner Root einen versteckten Ordner .ssh und darin eine Datei mit dem Namen authorized_keys. Für andere Benutzer analog machen.
Damit der Login funktioniert, bitte unter /etc/ssh/sshd_config überprüfen, ob die Zeile
AuthorizedKeysFile %h/.ssh/authorized_keys
auskommentiert ist – wenn nicht, auskommentieren und den ssh Dienst neu starten. Die Schritte nochmal als Befehle:
cd /root mkdir .ssh chmod 700 .ssh nano authorized_keys chmod 600 authorized_keys
Nun erstellen wir das Skript für die Übertragung auf dem Server, der die Originaldateien hat. Bei rsync wird nach dem ersten Teil zuerst der Ordner angegeben, der zu sichern ist, dann nach einem Leerzeichen der Backupserver als IP-Adresse oder Domainnamen, als nächstes ein Doppelpunkt und gleich im Anschluss das Verzeichnis auf dem Backupserver, in das alle Dateien gesichert werden sollen. Sollte der Ordner auf dem Backup-Server nicht existieren, wird er angelegt, sofern der Nutzer das Recht hat, mit dem sich rsync einloggt (in dem Fall root).
#! /bin/sh rsync -azP -e "ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null" /ordner-zum-sichern backup-server-adresse:/ordner-auf-backup-server --delete
Das Skript nun ausführbar machen mit chmod 700 rsync.sh z.B. Damit das Skript automatisch ausgeführt wird, sollten wir einen Eintrag im Crontab (/etc/crontab) anlegen:
@daily root /root/rsync.sh
In der Firewall muss der Rsync Port nicht freigegeben werden, da rsync hier über SSH arbeitet.