Dieses How to zeigt wie man mit Gentoo, sshd, 'vixie-cron' und 'rsync' ein sicheres vollautomatisches Backup von einem entfernten Host macht.
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
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.
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
Die UID der beiden Benutzer 'bak' müssen nicht gleich sein. Sie könnten auch 'A' und 'B' heissen.
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"
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
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
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`