Sparsame Synchronisation eines entfernten Ordners

Dieses How to zeigt wie man mit Gentoo, sshd, 'vixie-cron' und 'rsync' ein sicheres vollautomatisches Backup von einem entfernten Host macht.

Software installieren

Auf beiden Systemen muss 'rsync' und 'ssh' installiert sein.

root@lokal ~ # emerge -av net-misc/openssh net-misc/rsync
root@entfernt ~ # emerge -av net-misc/openssh net-misc/rsync

Zusätzliche Benutzer anlegen

Diese Benutzer sollen nur die nötigsten Rechte haben.

Die Befehle müssen auf beiden Systemen ausgeführt werden:

root@lokal ~ # useradd -d /zielort/des/backups bak
root@entfernt ~ # useradd bak

Der Benutzer 'bak' auf dem entfernten System muss alle zusichernden Daten lesen können.

Der Benutzer 'bak' auf dem lokalen System muss am Zielort schreiben können.

Optional: Den lokalen Benutzer deaktivieren

Um zu verhindern, dass bei der Synchronisation das lokale System gehackt wird, empfiehlt es sich folgendes.

In der Datei '/etc/passwd' die Zeile des Benutzers bearbeiten:

bak:x:1004:1011::/zielort/des/backups:/bin/false

Info: UID's

Die UID der beiden Benutzer 'bak' müssen nicht gleich sein. Sie könnten auch 'A' und 'B' heissen.

SSH-Schlüssel

Wir erstellen mit dem lokalen Benutzer die Schlüssel. Wichtig ist, dass keine Passwörter gesetzt werden, da man dies sonst bei jeder Synchronisation wieder ingeben müsste (weitere Informationen → SSH):

bak@lokal ~ $ ssh-keygen -t rsa -b 8192

Dann wird der Schlüssel kopiert:

bak@lokal ~ $ cat ~/.ssh/id_rsa.pub | ssh bak@entfernt "mkdir -p --mode=700 ~/.ssh; tee >> ~/.ssh/authorized_keys"

Cronjob schreiben

Um das ganze jetzt automatisch ablaufen zu lassen, verwenden wir einen Cron-Job.

Da der Cronjob nur eine Linie zur Verfügungstellt, schreiben wir die benötigten Befehle in eine Textdate, welche wir dann ausführbar machen.

Das Skript liegt auf dem lokalen Rechner:

Datei Inhalt
~/Start_Backup.sh
#!/bin/bash
# Autor: Lö TüX!
# Lizenzierung: GPLv3

echo -n "############## " >> Logs/`date +%Y%m%d`
echo -n `date -R` >> Logs/`date +%Y%m%d`
echo " --------------" >> Logs/`date +%Y%m%d`

if [ -e "Logs/lock" ]; then
	echo "Das Skript wird bereits ausgeführt!" >> Logs/`date +%Y%m%d` 2>&1

	echo -n "!!!!!!!!!!!!!! " >> Logs/`date +%Y%m%d`
	echo -n `date -R` >> Logs/`date +%Y%m%d`
	echo " ##############" >> Logs/`date +%Y%m%d`
	exit 4
else
        touch Logs/lock

        mkdir -p `date +%B` >> Logs/`date +%Y%m%d` 2>&1
        rsync -rv --compress-level=9 --delete-before bak@entfernt:/quellverzeichnis/des/backups ./`date +%B` >> Logs/`date +%Y%m%d` 2>&1

        rm Logs/lock
fi

echo -n "-------------- " >> Logs/`date +%Y%m%d`
echo -n `date -R` >> Logs/`date +%Y%m%d`
echo " ##############" >> Logs/`date +%Y%m%d`

Ausführbar machen:

bak@lokal ~ $ chmod +x Start_Backup.sh

Da das Skript Log-Dateien erzeugt, müssen wir den entsprechenden Ordner erstellen:

bak@lokal ~ $ mkdir Logs

Cronjob installieren

Mit dem Programm 'crontab' können wir zeitgesteuerte Befehle für alle Benutzer des Systems verwalten.

Auf dem lokalen System führen wir diesen Befehl aus:

root@lokal ~ # crontab -u bak -e

Jetzt können in dieser Datei folgende Zeilen schreiben:

# Führe Befehl alle sechs Stunden aus, ausser um Mitternacht
0     2-22/6     *     *     *    /zielort/des/backups/Start_Backup.sh

Testen

Da wir zum Testen nicht warten wollen, können wir den Befehl auf der lokalen Maschine auch von Hand starten:

root@lokal ~ # su - bak -s /bin/bash
bak@lokal ~ $ ./Start_Backup.sh

Da der Befehl keinerlei Ausgaben macht, müssen wir die Arbeit im Log nachlesen:

bak@lokal ~ $ less Logs/`date +%Y%m%d`
 
infos/netzwerk/rsync.txt · Zuletzt geändert: 2010/10/06 00:13 (Externe Bearbeitung)
 
Falls nicht anders bezeichnet, ist der Inhalt dieses Wikis unter der folgenden Lizenz veröffentlicht:CC Attribution-Noncommercial-No Derivative Works 3.0 Unported
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki