Voraussetzungen
Der Benutzer
Der Zugriff auf den Webspace mithilfe von RSYNC ist nur via Secure Shell möglich. Das bedeutet, man sollte sich für diesen Zugriff einen SFTP-Benutzer anlegen, sofern das jeweilige Produkt dies erlaubt. Eine genaue Beschreibung, wie man einen SFTP-Benutzer anlegt findet man auf
LANSOL FTP-Server - Erstellen eines neuen (S)FTP-Benutzers
Der Client
Für alle Unix und Unixoide Systeme existiert der rsync-client. Mit dessen Hilfe bequem und automatisiert regelmäßig Backups und gegebenenfalls auch Recoveries gefahren werden können. Dazu bedarf es etwas Vorbereitung.
Der Schlüssel
Wie bereits bereits beim Erstellen des SFTP-Benutzers erwähnt, ist es möglich einen ssh-public-key zu hinterlegen. Dieser wird gemeinsam mit dem private-key wie folgt erzeugt:
ssh-keygen -t rsa -b 4096 -f .ssh/id_rsa_sftp
Lässt man -t (type) und -b (byte) weg wird ein schwacher 2048 Byte Key erzeugt. Empfohlen wird ein 4096 Byte Key oder man verwendet eine fortschrittlichere Verschlüsselungsmethode wie ED25519:
ssh-keygen -t ed25519 -f .ssh/id_ed25519_sftp
Nachdem man das Schlüsselpaar erzeugt hat kopiert man den öffentlichen Schlüssel (pub key) in das entsprechende Feld im Benutzerdialog. Den Schlüssel lässt man sich mit einem cat-Befehl ausgeben
cat .ssh/id_rsa_sftp.pub
oder
cat .ssh/id_ed25519_sftp.pub
SSH-config (Optional)
Mit der Datei .ssh/config im $HOME-Verzeichnis Ihres Rechners können Sie ein ssh-Objekt anlegen, dass die zur Verbindung über ssh relevanten Daten enthält.
Eine tail-Abfrage zur Prüfung:
Dateitransfer
Upload und Download von Dateien mittels rsync Client
Nun da die Schlüssel gesetzt sind lädt man zum Test ein paar Dateien auf den FTP-Server. Mit rsync sieht das so aus:
rsync -a -e "ssh -i .ssh/id_<rsa oder ed25519>_sftp" source-Verzeichnis/ username@sftp01.cloud4partner.net:Target-Verzeichnis
Der beschriebene Befehl kopiert den Inhalt, daher der (/) Slash am Ende, des source-Verzeichnisses in das Target-Verzeichnis. Lässt man den Slash weg wird ein Unterverzeichnis mit dem Namen und dem Inhalt des source-Verzeichnisses im Target-Verzeichnis erzeugt. Im Beispiel werden lokale Daten auf dem FTP-Server versendet. Dies geht natürlich auch umgekehrt. Dazu muss man lediglich die Verzeichnisse vertauschen.
- -a : vereinigt die gängigsten Optionen von rsync:
-
- -r: recursive, kopiert auch Unterordner
- -l: symbolic links, kopiert Verweise auf Dateien
- -p: behält die User-Rechte bei
- -t: ändert nicht das mdate
- -g: behält Gruppenrechte bei
-
- -v: mit dieser Option wird in die Standardausgabe die Datei ausgegeben an welcher gerade gearbeitet wird.
Für mehr Informationen über die Handhabung von rsync, kann man die ubuntuusers-Seite zu rsync zu rate ziehen: ubuntuusers - rsync
Damit man nicht umständlich via Remote Shell ( -e ) einen Befehlbemühen muss, kann man die in der ssh/config stehenden Daten nutzen:
rsync -a source-Verzeichnis/ sftp01:Target-Verzeichnis
Zur Veranschaulichung kann man eine Dateiübermittlung in der Bildern verfolgen. Eine Datei wird in das Stammverzeichnis der FTP-Servers kopiert.
rsync melden eine erfolgreiche Übermittlung. Das lässt sich mittels einer ssh-Abfrage auch bestätigen.
Gemäß der Optionen -p und -g wurden die POSIX-Rechte beibehalten. Das erkennt man an r(ead)w(rite)-r--r--, das in Octalzahlen 0644 entspricht, im oberen und unteren Bild.
Das creation date der Datei wurde gemäß Option -t ebenso beibehalten.
Cronjobs
Damit lassen sich nun auch zeitlich gesteuerte Backup-Jobs anlegen. Der einfachste ist der Cronjob:
Hierfür öffnet man das crontab mit dem -e Edit-Aufruf:
crontab -e
Daraufhin öffnet sich entweder der hinterlegte Editor, in der Regel ist das vi oder emacs, oder man wird gefragt welcher Editor verwendet werden soll. Man kann die EDITOR Umgebungsvariable auch selbst ändern in dem man sie neu vergibt:
export EDITOR=nano
Im crontab kann man nun die Ausführzeit einstellen
0 5 1 * 7 rsync -a sftp01:source-Verzeichnis Target-Verzeichnis
So könnte zum Beispiel ein Backup Job aussehen, der jeden ersten jedes Monats um 5 Uhr morgens ausgeführt wird, sofern dieser ein Sonntag ist. Mehr über die Einrichtung von Crontabs kann man wiederum bei ubuntuusers - Cron erfahren .
Man beachte, führt man einen Cronjob als root aus gibt man den vollen Pfad zu rsync an. root-User haben in den seltensten fällen einen $PATH-export in ihren .profile oder rc-Dateien. Der root User wird angesprochen wenn man entweder
sudo crontab -e
oder das Kommando als root ausführt. Um herauszufinden wo die ausführbare Datei von rsync zu finden ist bedient man sich dem whereis-Kommando:
whereis rsync