Ab und zu kommt es vor, dass man Dateien automatisiert (z. B. via Cronjob) über das Internet transferieren muss. Für diesen Fall bietet sich Rsync gerade zu an. Zum einen weil SSH hier wunderbar als Transport Layer verwendet werden kann (verschlüsselt) und weil es relativ schnell eingerichtet ist.
Hier also schnell eine kurze Erklärung wie man einen Datentransfer mit Rsync via SSH einrichtet, damit beim Transfer kein Passwort verwendet werden muss.
1. Schritt: Benutzer anlegen
Als erstes muss auf dem Quell- sowie dem Zielsystem ein Benutzer (z. B. transfer) angelegt werden (dies erfolgt am besten mit dem Root-User) und für diesen Benutzer ein Passwort vergeben werden:
useradd transfer
passwd transfer
2. Schritt: Rsync-Installation auf Quell- und Zielsystem
Damit der Datentransfer funktioniert, muss Rsync auf beiden beteiligten Systemen installiert sein. Dies überprüft man am besten folgendermassen:
Wird anstelle einer Fehlermeldung die Versionsnummer ausgegeben, dann ist ein funktionsfähiges Rsync auf dem Rechner installiert.
Ist dies nicht der Fall, kann Rsync relativ einfach nachinstalliert werden (hier im Beispiel auf einem Ubuntu-Server):
sudo apt-get install rsync
3. Schritt: Erstellung eines passwortfreien RSA-Schlüssels
Damit man an den SSH RSA-Key des Benutzers kommt, der danach auf dem Zielsystem passwortfrei authentifiziert werden kann, muss man zwangsläufig einen RSA-Key erzeugen. Dazu meldet man sich zuerst mit dem neu erstellten Benutzer “transfer” am jeweiligen Server an.
Danach wird auf dem Quell- und dem Zielsystem ein .ssh-Verzeichnis im Home-Verzeichnis des Benutzers erstellt:
Nun wechselt man auf dem Zielserver in das neu erstellte Verzeichnis und erstellt die RSA-Keys für den Benutzer “transfer”:
cd .ssh
ssh-keygen -t rsa -f transfer.identity
Die Frage nach der “Passphrase” quittiert man zweimal mit Enter, schliesslich wollen wir ja eine authentifizierte Verbindung ohne Passwort!
Nun wurden im .ssh-Verzeichnis zwei neue Dateien erstellt:
- transfer.identity (Private Key)
- transfer.identity.pub (Public Key – wird später verwendet)
Schritt 4: Den Public Key auf dem Quellsystem für den Benutzer “transfer” berechtigen
Nun holt man sich die erstellte Datei transfer.identity.pub vom Zielsystem auf den lokalen Rechner. Danach meldet man sich mit dem User “transfer” am Quellsystem an, wechselt ins .ssh-Verzeichnis und lädt die Datei “transfer.identity.pub” mittels SCP, FTP, o.ä. aufs Quellsystem ins Home-Verzeichnis des Benutzers transfer (/home/transfer/.ssh). Den Inhalt dieses Schlüssels berechtigt man folgendermassen:
cat /home/transfer/.ssh/transfer.identity.pub >> /home/transfer/.ssh/authorized_keys2
Achtung:
Auf beiden System muss das Verzeichnis .ssh dem Benutzer “transfer” gehören und die Verzeichnisrechte für diesen Benutzer folgendermassen gesetzt sein:
- zugänglich (“x”)
- lesbar (“r”)
- schreibbar (“w”)
Schritt 5: Passwortfreien Login vom Zielsystem aus testen
Wird bei diesem Schritt ein Passwort abgefragt, dann ist einer der vorherigen Schritte fehlgeschlagen oder es wurde ein Fehler gemacht. Eigentlich müsste hier der Quellserver eine Shell zurückgeben ohne nach einem Passwort zu fragen:
ssh -i /home/transfer/.ssh/transfer.identity QUELLSERVER
6. Rsync testen
Hier kann man testweise mal Files vom Quellserver auf den Zielserver laden. Dies geschieht z. B. mit folgendem Aufruf (wobei der Option -e der genaue SSH-Aufruf folgt über den verschlüsselt getunnelt wird):
rsync -e 'ssh -i /home/transfer/.ssh/transfer.identity'
-avz /var/www/html/meingewuenschterordner/ QUELLSERVER:/var/www/html/
Genaue Informationen über die Optionen von Rsync sind in den Manuals ersichtlich: