Zum Hauptinhalt springen
S-EDV news
← Alle Anleitungen
📘 Anleitung Linux 02.06.2026 · 8 min Lesezeit

rsync über SSH: Daten synchronisieren und migrieren

rsync über SSH sicher einsetzen: Verbindung prüfen, Schrägstrich-Regel verstehen, Probelauf mit --dry-run, Serverumzug mit -aHAX und --numeric-ids, Abgleich mit --delete und Automatisierung als Skript mit Protokoll.

Geprüft am 14.10.2026 · für rsync 3.5.1

WerbelinksMit * markierte Links sind Werbelinks: Bei einem Kauf erhalten wir eine Provision, der Preis bleibt gleich. Als Amazon-Partner verdiene ich an qualifizierten Verkäufen. Mehr dazu

Leuchtendes blaues Netzwerkkabel verbindet zwei Serverschränke in einem modernen Rechenzentrum

rsync überträgt Dateien zwischen zwei Systemen und kopiert bei jedem weiteren Lauf nur, was sich geändert hat. Über SSH läuft die Übertragung verschlüsselt, ohne zusätzlichen Dienst auf dem Zielserver. Damit eignet sich rsync für Serverumzüge, das Spiegeln von Datenverzeichnissen und regelmäßige Kopien auf ein zweites System. Diese Anleitung zeigt einen sicheren Ablauf: Verbindung prüfen, Pfade verstehen, Probelauf, echte Übertragung, Abgleich mit Löschen und eine wiederholbare Automatisierung.

Voraussetzungen

  • Zwei Linux-Systeme (x86-64 oder ARM), von denen eines das andere per SSH erreicht, standardmäßig über Port 22. rsync braucht kaum CPU und RAM; bei vielen Millionen Dateien steigt der Speicherbedarf für die Dateiliste.
  • Das Paket rsync auf beiden Systemen, unter Debian und Ubuntu mit sudo apt install rsync. rsync startet auf der Gegenseite einen eigenen Prozess; fehlt es dort, bricht die Verbindung ab.
  • Ein SSH-Konto mit Leserechten auf der Quelle und Schreibrechten im Zielordner. Sollen Besitzer und Gruppe exakt übernommen werden, muss rsync auf der Empfängerseite als root laufen.
  • Freier Speicher auf dem Ziel mindestens in Höhe der Quelldaten. Den freien Platz am Ziel zeigt df -h /ziel/, die Größe der Quelle der Befehl im ersten Codeblock von Schritt 1.
  • Für automatisierte Läufe ein SSH-Schlüssel, siehe SSH-Key-Authentifizierung einrichten.

Schritt 1: SSH-Verbindung und rsync prüfen

Prüfen Sie in einem Befehl, ob die Anmeldung funktioniert und rsync auf dem Ziel vorhanden ist:

du -sh /srv/daten/
rsync --version | head -n 1
ssh benutzer@zielserver 'rsync --version | head -n 1'

Läuft SSH auf einem anderen Port, ergänzen Sie -p 2222 beim ssh-Aufruf. rsync übergeben Sie den Port später mit -e "ssh -p 2222". Liegt rsync auf dem Ziel nicht im Suchpfad, nennen Sie es mit --rsync-path=/pfad/zu/rsync.

Verifizieren: Beide Befehle geben eine Zeile im Format rsync version 3.x.x protocol version 3x aus. „command not found“ beim zweiten Befehl heißt: rsync fehlt auf dem Ziel.

Schritt 2: Quelle, Ziel und den Schrägstrich verstehen

Laut rsync-Handbuch entscheidet ein Schrägstrich am Ende der Quelle darüber, ob der Ordner selbst oder nur sein Inhalt übertragen wird:

BefehlErgebnis auf dem Ziel
rsync -a /srv/daten/ ziel:/backup/Inhalt von daten direkt in /backup/
rsync -a /srv/daten ziel:/backup/neuer Unterordner /backup/daten/

Am Ziel spielt der Schrägstrich für dieses Verhalten keine Rolle. Fehlen beim Ziel mehrere Ordnerebenen, legt rsync standardmäßig nur die letzte an und bricht sonst ab; mit --mkpath erzeugt es den ganzen Pfad. Gewöhnen Sie sich an, die Quelle immer mit Schrägstrich anzugeben und das Ziel so zu benennen, wie der Ordner später heißen soll.

Verifizieren: ls -la /srv/daten/ zeigt genau die Dateien und Ordner, die später unmittelbar unter dem Zielordner liegen sollen.

Schritt 3: Probelauf mit --dry-run

Der Probelauf zeigt, was rsync tun würde, ohne etwas zu verändern:

rsync -aih --dry-run /srv/daten/ benutzer@zielserver:/backup/daten/

Die Optionen im Einzelnen: -a (Archivmodus) entspricht laut Handbuch -rlptgoD, also rekursiv, Symlinks als Symlinks, Rechte, Zeitstempel, Gruppe, Besitzer sowie Geräte- und Spezialdateien. -i gibt je Datei eine Kurzzeile mit der Art der Änderung aus, -h macht Größenangaben lesbar. Laut Handbuch ist die Ausgabe von -i im Probelauf dieselbe wie beim echten Lauf.

Zeilen, die mit >f+++++++++ beginnen, sind neue Dateien, cd+++++++++ neue Ordner. Steht in der Liste ein zusätzlicher Unterordner, den Sie nicht erwarten, stimmt der Schrägstrich aus Schritt 2 nicht.

Verifizieren: Die Ausgabe listet die erwarteten Dateien ohne zusätzliche Ordnerebene und endet mit einer Zusammenfassung, die (DRY RUN) enthält. Auf dem Ziel hat sich nichts geändert.

Schritt 4: Daten übertragen

Stimmt der Probelauf, starten Sie dieselbe Zeile ohne --dry-run. Für Serverumzüge empfehlen sich zusätzliche Optionen:

sudo rsync -aHAX --numeric-ids -h --info=progress2 --partial \
  /srv/daten/ root@zielserver:/srv/daten/
  • -H, -A, -X übernehmen Hardlinks, ACLs und erweiterte Attribute. Das Handbuch weist ausdrücklich darauf hin, dass -a diese drei nicht enthält.
  • --numeric-ids überträgt Benutzer- und Gruppen-IDs als Zahlen. Das ist bei Umzügen sinnvoll, wenn auf dem Ziel dieselben IDs gelten sollen, etwa bei Container-Daten.
  • --info=progress2 zeigt den Fortschritt der gesamten Übertragung statt je Datei, --partial behält halb übertragene Dateien, sodass ein erneuter Lauf dort weitermacht. Für den Alltag fasst -P die Optionen --partial --progress zusammen.

Bricht die Übertragung ab, führen Sie denselben Befehl erneut aus. rsync überträgt dann nur, was noch fehlt oder sich unterscheidet. Bei schmalen Leitungen begrenzt --bwlimit=20M die Bandbreite. Lange Übertragungen starten Sie am besten in einer Sitzung, die eine getrennte SSH-Verbindung überdauert, etwa mit tmux oder screen; sonst endet rsync, sobald Ihre Verbindung zum Quellserver abreißt. Bei einem Umzug laufender Dienste übertragen Sie zuerst im Betrieb, stoppen dann den Dienst und führen einen letzten, kurzen Lauf aus, der nur noch die Änderungen nachzieht.

Verifizieren: echo $? direkt nach dem Lauf gibt 0 aus. Ein anschließender Probelauf aus Schritt 3 listet keine Dateien mehr.

Schritt 5: Ziel abgleichen mit --delete

Ohne weitere Optionen löscht rsync auf dem Ziel nie etwas. Soll das Ziel ein exaktes Abbild der Quelle sein, etwa beim letzten Abgleich vor einer Umstellung, ergänzen Sie --delete. Laut Handbuch entfernt es auf dem Ziel alle Dateien, die in den übertragenen Ordnern der Quelle nicht mehr existieren. Prüfen Sie das immer zuerst im Probelauf:

rsync -aih --delete --dry-run /srv/daten/ benutzer@zielserver:/backup/daten/

Zeilen mit *deleting zeigen jede Datei, die verschwinden würde. Erst wenn diese Liste stimmt, starten Sie den Lauf ohne --dry-run. Zwei Absicherungen helfen: Die Backup-Option im folgenden Beispiel verschiebt gelöschte und überschriebene Dateien in einen datierten Ordner auf dem Ziel, statt sie zu entfernen, und --max-delete=100 überspringt laut Handbuch alle weiteren Löschungen, sobald 100 erreicht sind, und beendet rsync mit Exit-Code 25.

Achtung bei vertauschter Richtung: Ein --delete von einer leeren oder falschen Quelle leert das Ziel. Kontrollieren Sie die Reihenfolge Quelle, Ziel in jedem Befehl.

rsync -aih --delete --max-delete=100 \
  --backup --backup-dir=/backup/geloescht-$(date +%F) \
  /srv/daten/ benutzer@zielserver:/backup/daten/

Verifizieren: Der Probelauf zeigt nur *deleting-Zeilen für Dateien, die Sie tatsächlich entfernen wollen. Nach dem echten Lauf liefert ein erneuter Probelauf mit --delete keine Ausgabezeilen mehr.

Schritt 6: Ergebnis prüfen und automatisieren

Nach einer Migration vergleichen Sie Inhalte zusätzlich über Prüfsummen. -c liest dazu alle Dateien auf beiden Seiten vollständig ein und dauert bei großen Datenmengen entsprechend länger:

rsync -aic --dry-run /srv/daten/ benutzer@zielserver:/srv/daten/

Für regelmäßige Läufe legen Sie den geprüften Befehl in ein Skript, zum Beispiel /usr/local/bin/sync-daten.sh, und schreiben ein Protokoll mit:

#!/bin/sh
rsync -aH --delete --log-file=/var/log/sync-daten.log \
  -e "ssh -i /root/.ssh/id_ed25519_sync" \
  /srv/daten/ backup@zielserver:/backup/daten/

Machen Sie es mit chmod 700 ausführbar und rufen Sie es per Cron oder systemd-Timer auf. Ein eigener Schlüssel nur für diesen Zweck erleichtert es, den Zugang später gezielt zu entziehen. Beachten Sie: Ein Spiegel mit --delete überträgt auch versehentliches Löschen. Er ersetzt kein versioniertes Backup.

Verifizieren: Der Prüfsummen-Probelauf liefert keine Dateizeilen. Nach dem ersten geplanten Lauf enthält /var/log/sync-daten.log Einträge mit Zeitstempel, und echo $? nach einem manuellen Aufruf des Skripts gibt 0 aus.

Typische Fehler

  • Dateien landen in einem zusätzlichen Unterordner: Der Schrägstrich am Ende der Quelle fehlt (Schritt 2).
  • „rsync: command not found“ oder „connection unexpectedly closed“: rsync fehlt auf der Gegenseite oder liegt nicht im Suchpfad. Installieren Sie es oder nutzen Sie --rsync-path.
  • „Connection refused“: SSH lauscht auf einem anderen Port oder eine Firewall blockiert. Port mit -e "ssh -p PORT" angeben.
  • „Permission denied“ oder Exit-Code 23: Laut Handbuch bedeutet 23 eine teilweise Übertragung wegen Fehlern. Meist fehlen Leserechte auf der Quelle oder Schreibrechte am Ziel. Die betroffenen Dateien stehen in der Ausgabe; Rechte prüfen Sie mit Linux-Benutzer, Gruppen und Rechte verstehen.
  • Exit-Code 24: Quelldateien sind während der Übertragung verschwunden. Bei laufenden Anwendungen normal; Datenbanken sichern Sie vorher mit deren eigenem Werkzeug.
  • Besitzer auf dem Ziel falsch: rsync setzt Besitzer nur, wenn es auf der Empfängerseite als root läuft. Verbinden Sie als root oder nutzen Sie auf dem Ziel --rsync-path="sudo rsync" mit passender sudo-Regel.
  • Jeder Lauf überträgt wieder alles: Die Zeitstempel werden nicht übernommen, etwa auf FAT- oder SMB-Zielen. Prüfen Sie mit -i, welches Merkmal sich jeweils unterscheidet.

Häufige Fragen

Warum ist der Probelauf so wichtig?

Ein falscher Pfad oder eine vertauschte Richtung fallen erst auf, wenn Daten schon verschoben oder gelöscht sind. Der Probelauf mit -i zeigt dieselben Änderungen wie der echte Lauf, ohne etwas anzufassen.

Ist rsync ein Backup?

rsync kopiert den aktuellen Stand. Ohne Versionierung und Rücksicherungstests ist das kein vollständiges Backup. Für versionierte Sicherungen eignen sich Werkzeuge mit Snapshots, oder Sie kombinieren rsync mit einem datierten Backup-Ordner je Tag wie in Schritt 5.

Wann nutzen Sie --delete?

Nur wenn das Ziel ein exaktes Abbild der Quelle sein soll, zum Beispiel beim letzten Abgleich vor einem Serverumzug. Für Archive, die alte Dateien behalten sollen, lassen Sie es weg.

Wie schließe ich Ordner aus?

Mit --exclude='cache/' je Muster oder mit --exclude-from=datei.txt für eine Liste. Muster beziehen sich auf den Pfad relativ zur Quelle.

Fazit

rsync über SSH ist ein verlässliches Standardwerkzeug für Umzüge und Spiegelungen. Die Sicherheit entsteht aus der Reihenfolge: Verbindung prüfen, Schrägstrich bewusst setzen, Probelauf mit -i, dann echt übertragen und --delete nur nach geprüfter Löschliste. Für Serverumzüge gehören -HAX und --numeric-ids dazu, für den Dauerbetrieb ein Skript mit Protokoll.

Weiterführende Anleitungen und Quellen