Ihr wollt ein Verzeichnis sichern? Und das am besten nur wenn
auch Aenderungen an den Dateien vorliegen? Natuerlich das ganze ueber
ein Netzwerk (es funktioniert zwar auch Lokal, doch macht hier ein Tunnel
durch eine verschluesselte ssh Verbindung wenig Sinn). Und das auch noch
Sicher? Dafuer ist rsync genau das richtige. Es uebertraegt Daten nur,
wenn sie auch veraendert worden sind, da es die zu uebertragenden Daten
noch komprimiert, ist auch die Belastung des Netzwerkes nicht so hoch
(genaueres zu rsync hier). Im Folgenden erklaere ich, wie ihr Daten mit
rsync durch einen ssh-Tunnel uebertragt. Den Computer, der die Daten
uebertraegt, heisst in diesem Tutorial CLIENT und den Computer, der
die Daten annimmt, nenne ich SERVER. Der User heisst auf beiden
Computern TUX.
* ssh2 muss auf beiden Rechnern installiert worden sein
* rsync muss auf beiden Rechnern installiert worden sein
* auf beiden Computern muss ein Useracc fuer rsync
* bereitstehen(es kann euer Useracc sein, den ihr immer
* nutzt, oder ein speziell fuer rsync angelegter)
Erstellung eines Schluesselpaares
Zu aller erst, muss auf dem CLIENT ein Schluesselpaar fuer die
Authentifizierung erstellt werden. Da es sich bei RSA um ein asymmetrisches
Verschluesselungsverfahren handelt, wird durch die folgenden Befehle ein PRIVATE-Key und ein PUBLIC-Key erstellt. Diese werden im Verzeichnis /home/TUX/.ssh abgelegt.
TUX@CLIENT:~$ cd /home/TUX/.ssh
TUX@CLIENT:~/.ssh$ ssh-keygen -t rsa -f CLIENT-SERVER.rsync
Ihr werdet bei der Eingabe nach einem Passwort gefragt. Bestaetigt dieses mit
2x ENTER druecken (also ein leeres Passwort). Da ich den Backup-Prozess nachher
noch automatisieren moechte (genaueres spaeter), ist hier
ein gesetztes Passwort stoerend.
Nachdem ihr das Passwort bestaetigt habt, erhaltet ihr 2 Dateien:
CLIENT-SERVER.rsync (ist der PRIVATE-Key) * CLIENT-SERVER.rsync.pub (ist der PUBLIC-Key) *
PUBLIC-Key auf SERVER kopieren und TUX autorisieren
Damit ssh auf SERVER auch weiss, dass es sich bei der Anmeldung durch dieses
Schluesselpaar um TUX handelt und dieser autorisiert ist Zugang zu erhalten,
muss erst einmal der PUBLIC-Key (die Datei CLIENT-SERVER.rsync.pub) auf SERVER kopiert werden (egal wie, ob smb, ftp oder anders). Nachdem ihr dies getan
habt, verschiebt ihr die Datei CLIENT-SERVER.rsync.pub in den
Ordner /home/TUX/.ssh (denkt daran, es handelt sich hierbei um den Computer SERVER, nicht CLIENT). Jetzt muesst ihr den Inhalt der Datei CLIENT-SERVER.rsync.pub noch in die Datei authorized_keys2 kopieren.
Dies macht ihr mit diesem Befehl (falls sie nicht schon
im Ordner /home/TUX/.ssh vorhanden ist, erstellt ihr sie mit diesem Befehl auch):
Wenn ihr dies getan habt, folgt nun ein kleiner Test.
Funktioniert der passwortfreie Login ueber ssh auch?
Nun, dies wollen wir jetzt testen. Wenn wir naemlich keine Verbindung ueber
ssh von CLIENT zu SERVER aufbauen koennen, dann muss erst
einmal dieser Fehler behoben werden. Nun bauen wir mit dem passwortfreien
Schluesselpaar von CLIENT zu SERVER eine ssh Verbindung auf.
Dies macht ihr mit folgendem Befehl:
TUX@CLIENT:~$ ssh [IP von SERVER] -i \
/home/TUX/.ssh/CLIENT-SERVER.rsync -l TUX
Das [IP von Server] ersetzt ihr natuerlich mit der IP des Computers. Ihr koennt
auch den DNS nehmen, nur macht dieser in lokalen Netzwerken oefter mal
Probleme. Deshalb rate ich euch, wenn die IP statisch ist, sie immer zu benutzen.
Das -l TUX bedeutet einfach nur, dass der User der sich versucht zu
authentifizieren, TUX heisst.
Durch Eingabe der oben genannten Zeile, muesste sich direkt eine Verbindung
ueber ssh zu SERVER aufgebaut haben, die ohne Eingabe eines
Passwortes zustande gekommen sein muesste. Falls ja, koennt ihr weiter
machen. Falls nein, muesst ihr ersteinmal den Fehler beheben.
Daten mit rsync durch einen ssh Tunnel uebertragen
Um Daten mit rsync durch einen ssh Tunnel zu uebertragen,
gebt ihr folgenden Befehl ein:
Dieser Befehl kopiert alle Dateien in dem Ordner /home/TUX von dem
Computer CLIENT nach /home/TUX/Tuxbackup auf dem Computer SERVER. [IP von SERVER] muss wieder durch die IP vom Computer oder seinen DNS
ersetzt werden. Was hinter dem Parameter -e in '' steht, ist der
ssh Aufruf. In ihm kann noch mehr stehen, wie z.B. eine andere Port-Angabe mit -p,
wenn der sshd nicht auf Port 22 laeuft. Hierbei zu beachten ist, dass in
dem ssh Aufruf keine Zielangabe steht (also eine IP oder DNS von SERVER),
da er diese von rsync erhaelt. Interessant ist noch der Parameter --delete,
dieser loescht die Dateien auf SERVER, die bei CLIENT in dem
zu kopierenden Ordner nicht mehr vorhanden sind.
Aber dieses solltet ihr selber testen.
Automatisierung durch einen Cronjob
Nun kommt der Grund dafuer, weshalb das Schluesselpaar ein leeres Passwort
enthalten sollte. Wenn ein Backupskript existiert, ist es schoen und gut. Es nutzt
nur nichts, wenn vergessen wird es auszufuehren. Deshalb koennen wir es den
Computer durch einen Cronjob ueberlassen, dies fuer uns zu tuen.
Als erstes fuehren wir diesen Befehl (diesmal als root) aus:
CLIENT:/home/Tux# crontab -u TUX -e
Nun oeffnet sich ein Editor, indem wir folgendes Eintragen, wenn wir einmal
in der Woche eine Datensicherung durchfuehren wollen:
Mit diesem Eintrag machen wir nun die obige Datenuebertragung am Sonntag
um 23:59Uhr. Falls ihr sie zu einem anderen Zeitpunkt haben wollt, muesst ihr
euch die Crontabellen genauer anschauen.
Dieses Skript nutze ich, um von meinem vServer die Daten auf meinen Homeserver zu kopieren. Dabei zu beachten ist, dass mein Homeserver keine statische IP besitzt, deshalb nutze ich dyndns. Zusaetzlich, werde ich durch eine eMail benachrichtigt, wie das Backup verlaufen ist.