Rsync Backup Server erstellen
Ich setze Rsync für jede größere Kopieraktion ein. Ob nun Server zu Server oder auch nur für die Sicherung des privaten Bilderarchivs auf eine externe Platte zu Hause. Deshalb bietet sich Rsync natürlich an um Daten von mehreren Servern, regelmäßig zentral zu speichern. Für die Erstellung eines Rsync Backup Servers hat mir diese Anleitung sehr geholfen. Hier nun eine deutsche Zusammenfassung der Einrichtung und mein Script. Es ist sehr einfach weitere Server hinzuzufügen und da durch den Einsatz von Rsync nur Veränderungen kopiert werden ist es auch noch sehr Traffic sparend. Da ich hauptsächlich Server im Hetzner Netzwerk habe und der interne Traffic nicht gezählt wird brauche ich mir über den anfallenden Traffic nicht allzu viele Gedanken zu machen. Die Daten werden per SSH natürlich verschlüsselt und durch Rsync komprimiert übertragen. Auf Arbeit kommt als Backup Server ein Hetzner EQ6 und Privat ein EQ4 zum Einsatz. Bei mir kommen natürlich Debian Server auf allen Seiten zum Einsatz, aber da es alle Tools auch für andere Distributionen gibt, kann man auch andere *nix Systeme verbinden.
Begriffsklärung
- Backup Server ist der Server von dem das Rsync Backup ausgeführt wird und auf dem die Daten schlussendlich liegen werden
- Remote Server ist das zu sichernde System. Muss eigentlich kein Server sein
- Remote User ist der User auf dem Remote Server über den sich der Backup Server mit diesem verbindet
- Backup User ist der unprivilegierte User auf dem Backup Server unter dessen Rechten das Backup Script läuft
Für diese Anleitung werden folgende Namen verwendet:
- Backup Server: backup
- Backup User: b-user
- Remote Server: remote
- Remote User: r-user
Voraussetzungen
- Rsync muss natürlich installiert sein. Auf beiden Seiten, also auf dem zu sichernden Server und dem Backup Server!
- OpenSSH für die Authentifizierung auf beiden Seiten
- Cron für das automatische ausführen des Scripts
- Remote User muss alle Dateien die gesichert werden sollen lesen können
- Remote Server muss das authentifizieren per PublicKey zulassen
Installation
Rsync und OpenSSH muss auf beiden Seiten installiert werden:
$ aptitude update && aptitude safe-upgrade $ aptitude install rsync ssh
Konfiguration des Rsync Backup Servers
Damit man beim Aufruf von Rsync nicht immer nach dem Passwort gefragt wird, sollte man die Authentifizierung per PublicKey erledigen. Dazu muss auf dem Backup Server erstmal ein private/public Key Paar angelegt werden. Die Passphrase wird leer gelassen, damit das Backup nach einem Reboot des Backup Servers ohne Eingriff weiter läuft. Das ganze kann man gleich als Backup User machen.
b-user@backup:~$ mkdir /home/b-user/keys b-user@backup:~$ ssh-keygen -t dsa -b 1024 -f /home/b-user/keys/backup-rsync-key b-user@backup:~$ cd keys b-user@backup:~$ ls -ahl
total 16K drwxr-xr-x 2 b-user b-user 4.0K 2010-01-20 12:56 . drwxr-xr-x 4 b-user b-user 4.0K 2010-01-20 12:56 .. -rw------- 1 b-user b-user 668 2010-01-20 12:56 backup-rsync-key -rw-r--r-- 1 b-user b-user 613 2010-01-20 12:56 backup-rsync-key.pub
Jetzt haben wir einen Key ohne Passwort. Wichtig ist das den Private Key nur autorisierte Leute zu Gesicht bekommen! (backup-rsync-key ohne .pub) Damit man sich nun mit diesem Key auf Remote Server einloggen kann, muss der Public Key in die authorized_keys Datei auf dem Remote Server (für Remote User) eingetragen werden. Das kann man per Copy&Paste machen, oder man kopiert den Public Key per scp.
b-user@backup:~$ scp /home/b-user/keys/backup-rsync-key.pub r-user@remote:/home/r-user/
Konfiguration des Remote Servers
Auf dem Remote Server loggt man sich als Remote User ein und trägt dann den Public Key in authorized_keys Datei ein.
r-user@remote:~$ if [ ! -d .ssh ]; then mkdir .ssh ; chmod 700 .ssh ; fi r-user@remote:~$ mv backup-rsync-key.pub .ssh/ r-user@remote:~$ cd .ssh/ r-user@remote:~/.ssh$ if [ ! -f authorized_keys ]; then touch authorized_keys ; chmod 600 authorized_keys ; fi r-user@remote:~/.ssh$ cat backup-rsync-key.pub >> authorized_keys r-user@remote:~/.ssh$ rm backup-rsync-key.pub
Jetzt kann man sich vom Backup Server mit Remote Server verbinden ohne ein Passwort einzugeben. Dazu muss noch sicher gestellt sein das PubkeyAuthentication auf Remote Server erlaubt ist und wenn AllowUsers benutzt wird, das r-user auf der Liste steht.
$ nano /etc/ssh/sshd_config
PubkeyAuthentication yes AllowUsers r-user
Bedenken sollte man hier das jeder der den PrivateKey hat sich mit Remote Server ohne Eingabe eines Passworts verbinden kann und alles ausführen/lesen kann was Remote User kann. Will man dies weiter einschränken, gibt es in dem Tutorial ein paar Punkte die man zusätzlich einbauen kann. Ich persönlich beschränke nur den Ort von wo aus der Key benutzt werden kann.
r-user@remote:~/.ssh$ nano authorized_keys
An den Anfang der Zeile setzt man nun die IP des Backup Servers. Das sieht dann in etwa so aus. NOTE: Es muss alles in einer Zeile stehen, sonst funktioniert es nicht! Danach kann man den Key nur noch von dieser Adresse aus nutzen.
from="112.113.114.115" ssh-dss AAAAB3...
Testen der PublicKey Authentifizierung
Testen kann man Funktion natürlich sofort per Rsync oder zuerst per SSH. Verwendet man einen anderen Port als 22, kann man diesen mit -p ändern.
b-user@backup:~$ ssh -i /home/b-user/keys/backup-rsync-key r-user@remote
Wir man nach einem Passwort gefragt, dann funktioniert etwas nicht. Wichtig sind die richtigen Zugriffsrechte.
b-user@backup:~$ ls -ahlR drwxr-xr-x 2 b-user b-user 4.0K 2010-01-20 12:56 keys -rw------- 1 b-user b-user 668 2010-01-20 12:56 backup-rsync-key -rw-r--r-- 1 b-user b-user 613 2010-01-20 12:56 backup-rsync-key.pub
r-user@remote:~$ ls -ahlR drwx------ 2 r-user r-user 4.0K Jan 20 13:11 .ssh -rw------- 1 r-user r-user 613 Jan 20 13:11 authorized_keys
Nochmal alles überprüfen und wenn es funktioniert einen Rsync Test durchführen.
b-user@backup:~$ rsync -avz -e "ssh -i /home/b-user/keys/backup-rsync-key" r-user@remote:/remote/dir /backup/dir/
Sollte es hierbei Probleme geben, kann man den Output von Rsync weiter „verbosen“ indem man mehrere -v's hinzufügt.
b-user@backup:~$ rsync -avvvz -e "ssh -i /home/b-user/keys/backup-rsync-key" r-user@remote:/remote/dir /backup/dir/
Wenn alles funktioniert, kann man den Aufruf automatisieren und weitere Remote Server hinzufügen.
Weitere Schritte
Da der Artikel etwas groß geworden ist, habe ich ihn in zwei Teile geteilt. Hier geht es zu Teil 2