Rsync Backup Server erstellen

2010-01-20 - kostaki Keine Kommentare »

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

Ähnliche Artikel

Kommentar schreiben

*

*