Sonntag, Februar 4, 2024

Rsync über SSH

Anleitung zum sicheren, ressourcenschonenden Synchronisieren von Daten

https://www.hermannf … de/ict/rsync-ssh.php

Vorbemerkungen
Wir gehen, nur als Beispiel, davon aus, dass Benutzer egon seine Daten vom Rechner daheim auf einen Server files.hoster.de synchronisieren will. Der Vorgang ist exakt derselbe, wenn wir einen Server auf einen anderen Server spiegeln.

Voraussetzungen

  • Der Benutzer hat Root-Zugriff auf beide Systeme. Es wird hier übrigens angenommen, dass mit allen Benutzer-IDs die BASH-Shell verwendet wird.
  • Rsync auf beiden Systemen verfügbar.
    Auf einem Windows-PC kann das mittels Cygwin verfügbar gemacht werden.

  • SSH ist auf beiden Systemen verfügbar. Cygwin bietet auch dieses.
  • TCP-Verbindungen auf Port 22 des entfernten Systems sind möglich.


Die Schritte

Benutzer syncer auf dem System files.hoster.de anlegen. Der Benutzer braucht eine echte Shell und ein Passwort.

root@files.hoster.de:~#  useradd -s /bin/bash -m -d /home/syncer syncer
root@files.hoster.de:~#  passwd syncer
Enter new UNIX password: *******
Retype new UNIX password: *******
passwd: password updated successfully

Testen, ob der Login funktioniert:

egon@daheim:~$ ssh -l syncer files.hoster.de
syncer@files.hoster.de’s password: *******
syncer@files.hoster.de:~$ exit
egon@daheim:~$ 

Nach Eingabe des Passwortes muss man validieren, dass man jetzt auch wirklich als Benutzer syncer auf dem Server files.hoster.de eingeloggt ist. Das erkennt man daran, dass es keine Fehlermeldung gibt und dass die Eingabeaufforderung dann z.B. syncer@files.hoster.de o.ä. ist. Ansonsten muss man Fehlermeldung genau lesen und den Fehler beheben. Das sind Unix-Grundlagen, die hier nicht erklärt werden.

Testen, ob Rsync lokal installiert ist:

egon@daheim:~$ rsync –version

Liefert das rsync: command not found o.ä. dann muss man es installieren. Bei Cygwin startet man das Installationsprogramm neu und installiert Rsync nach. Bei Linux je nach Distribution und Paket-Manager, z.B. für Ubuntus Advanced Packaging Tool:
apt-get install rsync

Testen, ob Rsync auf dem entfernten Server installiert ist:

egon@daheim:~$ ssh -l syncer files.hoster.de
syncer@files.hoster.de’s password: *******
syncer@files.hoster.de:~$ rsync –version

Die Ausgabe ist zu interpretieren wie oben. Anschließend kann man den Server wieder verlassen:

syncer@files.hoster.de:~$ exit

Passwortfreies Schlüsselpaar erstellen (bei Passwort-Abfrage kein Passwort eingeben, sondern nur mit Return quittieren):

egon@daheim:~$ cd .ssh
egon@daheim:.ssh$ ssh-keygen -t rsa -f syncer.identity
Generating public/private rsa key pair.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again:
Your identification has been saved in syncer.identity.
Your public key has been saved in syncer.identity.pub.

Schlüssel von daheim auf files.hoster.de autorisieren, d.h. die Datei mit dem Public-Key auf files.hoster.de übertragen und dort ihren Inhalt an die Datei ~/.ssh/authorized_keys anhängen:

egon@daheim:~$  scp syncer.identity.pub syncer@files.hoster.de:~
egon@daheim:~$  ssh -l syncer files.hoster.de (Passwort eingeben)
syncer@files.hoster.de:~$  ! [ -e .ssh ] && mkdir .ssh
syncer@files.hoster.de:~$  chmod 700 .ssh
syncer@files.hoster.de:~$  cat syncer.identity.pub >> .ssh/authorized_keys
syncer@files.hoster.de:~$  chmod 600 .ssh/authorized_keys
syncer@files.hoster.de:~$  exit

Fehlerquelle:
Bei älterer SSH2-Implementierung kann es sein, dass die Datei mit autorisierten Schlüsseln statt authorized_keys noch authorized_keys2 heißen muss. In dem Fall ist alles wie oben durchführen, aber eben den Dateinamen entsprechend zu ändern.

Passwort-freien Login testen:

egon@daheim:~$  ssh -i .ssh/syncer.identity files.hoster.de
syncer@files.hoster.de:~$   exit

Auch hier muss man wirklich ohne Passworteingabe (!) zum Benutzer syncer auf dem Rechner files.hoster.de werden. Sonst muss man wieder weiter oben beginnen. Die Berechtigungen für das Verzeichnis .ssh und dessen Inhalt sind übrigens kritisch (700 bzw. 600).

Manuellen Aufruf von Rsync testen. Wir nehmen dazu an:

Die lokalen Daten, z.B. egons Website, liegen im Verzeichnis /home/egon/var/www/, also relativ ~/var/www/.
Die Kopie liegt auf dem entfernten Server unter /var/www/htdocs/. Man bedenke, dass der Benutzer syncer auf diesem Verzeichnis Schreibrechte braucht, die er z.B. über eine Gruppenzugehörigkeit bekommen kann oder aber er wird komplett zum Eigentümer dieser Dateien:

syncer@files.hoster.de:~$  sudo chown -R syncer /var/www/htdocs

Wenn man folgenden Aufruf in einer Zeile angibt (z.B. später in der Crontab) dann sind die Backslash-Zeichen wegzulassen:

egon@daheim:~$  rsync -e ’ssh -i .ssh/syncer.identity’ 
-avz –delete ~/var/www/ 
files.hoster.de:/var/www/htdocs/

Achtung: Die Option –delete sorgt dafür, dass Dateien, die zwar im Zielverzeichnis liegen, aber auf dem lokalen System gelöscht wurden, auch auf dem Server gelöscht werden.

Für alle weiteren Optionen steht man rsync Rede und Antwort.

Weitere Schritte
Wenn der Aufruf tut, was er soll, wird man den Daten-Abgleich automatisieren wollen. Für ein Backup eignen sich Cronjobs, die, z.B. nächtlich, alle Daten aktualisieren.

Für sonstige Aufgaben kann man sich kleine Skripte mit dem jeweiligen Aufruf machen und diese per Mausklick aufrufbar machen.

Viel Spaß!

Meine Sicherung


#!   /bin/bash -e

rsync -avzP –delete -e ”ssh -i /home/hobbystudent/.ssh/helios_rsync” hobbystudent@192.168.1.98:/srv/dev-disk-by-uuid-4b7b975e-6e29-4c37-9ea5-90d77a93dbfe/daten/ /mnt/2tb/daten/

Beispiel: Datensynchronisation für Backup-Zwecke
Häufig wird rsync für Backup-Zwecke verwendet. Mit dem folgenden Beispiel-Kommando wird das Verzeichnis /home/ des Servers server.example.com hin zum lokalen Rechner in das Verzeichnis /mnt/server-mirror/home/ synchronisiert. Die Daten werden dabei über SSH getunnelt übertragen:

rsync -av –delete -e ssh root@server.example.com:/home/ /mnt/server-mirror/home/

Wenn rsync automatisert in einem Skript verwendet werden soll, kann die Authentifizierung etwa über einen SSH Key durchgeführt werden:

rsync -av –delete -e ”ssh -i /home/user/.ssh/sshkey” root@server.example.com:/home/ /mnt/server-mirror/home/

Die gezeigten rsync Optionen haben folgende Bedeutung:

  • -a (Kurzversion für –archive): gleiche Bedeutung wie -rlptgoD
  • -r (Kurzversion für –recursive): Unterverzeichnisse kopieren
  • -l (Kurzversion für –links): symbolische Links kopieren
  • -p (Kurzversion für –perms): Rechte der Quelldatei beibehalten
  • -t (Kurzversion für –times): Zeiten der Quelldatei beibehalten
  • -g (Kurzversion für –group): Gruppenrechte der Quelldatei beibehalten
  • -o (Kurzversion für –owner): Besitzrechte der Quelldatei beibehalten (nur als root User möglich)
  • -D (Kurzversion für –devices –specials): Gerätedateien der Quelldatei beibehalten (nur als root User möglich)
  • -v (Kurzversion für –verbose): zeigt während der Ausführung an welche Dateien synchronisiert werden
  • –delete: entfernt Dateien im Zielverzeichnis die mittelerweile im Quellverzeichnis nicht mehr vorhanden sind