Blog Digitalgesellschaft Verwaltungsbetrieb Textarchiv Textarchiv Walter Kirk (✝) Impressum
Datensicherung mit Rsync via SSH
→ Vorbemerkung
→ Voraussetzungen
→ Hardware
→ Software
→ Ubuntu OpenSSH
→ SSH einrichten
→ Schritt 1: Schlüssel erzeugen
→ Schritt 2: Schlüssel austauschen
→ Schritt 3: SSH Konfiguration erstellen
→ Schritt 4: Test
→ rsync
→ Automatisierung
→ Skripte
→ Rsync und Löschen
→ Crontab
→ Log-Datei
→ Wirkung
→ Bedingung
→ Andere Betriebssysteme
→ Community
→ Schlussbemerkung
→ Checkliste Datensicherung mit Rsync via SSH
→ Quelle:
→ Artikel
→ Manual Page
Wer seine wichtigen digitalen Medien schützen will, also Audio-, Bild-, Text- und Videodokumente, muss sich zwangsläufig auch mit ihrer sicheren Aufbewahrung beschäftigen.
Leider sind die Möglichkeiten mit dem Betriebssystem Linux eher begrenzt, diese Aufgabe sozusagen automatisch erledigen zu können. Vielmehr ist hier noch einige Einstellungsarbeit notwendig, um ein praktikables Arbeiten mit Backup und Datensicherung zu gewährleisten.
In diesem Beitrag wird eine Alternative mit den Programmen rsync und SSH aufgezeigt. Damit lassen sich einige Vorgänge durchaus sozusagen wie von selbst erledigen.
Aus der Fülle der im Internet und in den speziellen Foren (community) gegebenen Hinweise zu diesem Thema sind diejenigen hier eingeflossen, die im aktuellen Test mit Ubuntu (23.04) geeignet sind, die Datensicherung regelmäßig, zuverlässig und sicher zu erledigen.
Wer über Backup und Datensicherung nachdenkt, braucht unbedingt auch ausreichend Speicherplatz in Form von Festplatten (HD). Da hier die persönlichen Verhältnisse eine große Rolle spielen, gilt es den eigenen Bedarf einigermaßen einzuschätzen. Wie man seinen individuellen Speicherplatzbedarf berechnet, hängt primär von den Aufgaben ab, die das eigene System bewältigen soll, z.B. Überwachung mit mehreren Kameras oder privates Home-Office.
Für die Sicherung der Daten gilt eine 3-fach-Regel: 1. Sicherung: Backup, 2. Sicherung: Datensicherung, 3. Sicherung: externe Aufbewahrung, also außerhalb des eigenen Arbeits-/Wohnbereiches.
Umgesetzt auf das private Home-Office gilt als Faustformel: derzeitig belegter Speicherplatz x 2 (Verdopplung) x 2 Festplatten (HD). Die externe Aufbewahrung wäre beispielsweise eine Speicherung in der Cloud oder bei GitHub, GitLab und ähnlichen Diensten.
Beispiel: 1 TB belegter Speicher x 2 = 2 TB x 2 = 2 HD mit 2 TB Speicherplatz.
Für eine Langzeitarchivierung wird auf den Blogbeirag Digitale Langzeitarchivierung verwiesen. Da ein Ausfall durch defekte an einer Hardware möglich sind, eignen sich für ein Backup auch sogenannte RAID-Systeme, also eine Spiegelung oder ein Verbund von HD. Siehe auch den Blogbeitrag Installation Ubuntu-Server 22.04 mit Software-Raid 1 auf einem Tablet-PC.
Unter dem Betriebssystem Linux werden zwei Programme benötigt, die ein Backup bzw. eine Datensicherung über ein verschlüsseltes System ermöglichen:
- rsync -- a fast, versatile, remote (and local) file-copying tool
- SSH -- Secure Shell (OpenSSH)
SSH ermöglicht die gegenseitige Authentifizierung und eine verschlüsselte Datenübertragung, so dass sensible Daten wie Passwörter oder Benutzernamen nicht von Unberechtigten ausgespäht werden können. Secure Shell bietet dabei ein hohes Sicherheitsniveau.
Zur Installation wird ein Terminal geöffnet und folgendes ausgeführt (debian-basierte Distribution):
xxxxxxxxxxtest@geraet:~$ sudo apt install net-tools rsync grsync ssh
Wer lieber mit einer graphischen Benutzeroberfläche den Datenaustausch erledigen will, kann das Programm Grsync nutzen. Hier wird der Weg über die Kommandozeile beschrieben, weil Grsync automatisierte Sicherungen nicht ermöglicht.
In der Distribution Ubuntu (debian-basiert) lässt sich ein openssh-client oder -server einrichten:
xxxxxxxxxxtest@geraet:~$ sudo apt install net-tools rsync openssh-server
Danach folgende Schritte vollziehen:
1. Automatischer Start
xxxxxxxxxxtest@geraet:~$ sudo systemctl enable sshtest@geraet:~$ sudo systemctl start ssh
2. Status ermitteln
xxxxxxxxxxtest@geraet:~$ sudo systemctl status ssh
Das Ergebnis kann so aussehen:
x● ssh.service - OpenBSD Secure Shell server Loaded: loaded (/usr/lib/systemd/system/ssh.service; enabled; preset: enab> Active: active (running) since Mon 2025-07-28 12:13:34 CEST; 7h ago Invocation: 5c4a6c7567e54aeb8b17dcf4edb30fe9TriggeredBy: ● ssh.socket Docs: man:sshd(8) man:sshd_config(5) Process: 1827 ExecStartPre=/usr/sbin/sshd -t (code=exited, status=0/SUCCESS) Main PID: 1841 (sshd) Tasks: 1 (limit: 23057) Memory: 1.7M (peak: 2.3M) CPU: 41ms CGroup: /system.slice/ssh.service └─1841 "sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startups"
Jul 28 12:13:34 test systemd[1]: Starting ssh.service - OpenBSD Secure >Jul 28 12:13:34 test sshd[1841]: Server listening on 0.0.0.0 port 22.Jul 28 12:13:34 test sshd[1841]: Server listening on :: port 22.Jul 28 12:13:34 test systemd[1]: Started ssh.service - OpenBSD Secure3. Firewall: Port freischalten
xxxxxxxxxxtest@geraet:~$ sudo ufw allow ssh
Dieser Schritt ist nur erforderlich, wenn die Firewall aktiv ist.
Tipp: In der Praxis ist die Nutzung des openssh-server bei jedem Gerät sinnvoll.
Alternative 1: GitHub und GitLab
xxxxxxxxxxtest@geraet: ~/.ssh$ ssh-keygen -t ed25519 -C "e-mail"
Die bei den Diensten angegebene E-Mail-Adresse ist anzugeben.
Weitere Hinweise siehe den Blogbeitrag GitHub via SSH.
Alternative 2: Sonstige
xxxxxxxxxxtest@geraet: ~/.ssh$ cd .sshtest@geraet: ~/.ssh$ ssh-keygenGenerating public/private rsa key pair.Enter file in which to save the key (/home/test/.ssh/id_rsa): TestEnter passphrase (empty for no passphrase): <keine Eingabe>Enter same passphrase again: <keine Eingabe>Your identification has been saved in testYour public key has been saved in test.pubThe key fingerprint is:SHA256:+KJDtdTgXkh2s4YXdHUMmOzSkIGhN/Jg9ybX1Hq2zgk wolfgang@t460s-lin2The key's randomart image is:+---[RSA 3072]----+| .+o+.+oo. || .= *.+. .. || =++* B. . || . **+Boo. || ++=S.o o || . o= o . || . . . E . || .. . + . || .. + |+----[SHA256]-----+
Damit nicht bei jedem Datenaustausch das Password abgefragt wird und einzugeben ist, kann der erstellte Schlüssel als generelle Authentifizierung auf dem entfernten Speicher (Remote Server) angegeben werden. Dazu wird der öffentliche Schlüsse (test.pub) in die Datei .ssh/authorized_keys eingetragen:
Alternative 1
xxxxxxxxxxtest@geraet: $ cat .ssh/test.pub | ssh test@192.168.48.196 'cat >> .ssh/authorized_keys'
Danach sind noch die Rechte zu vergeben:
xxxxxxxxxxtest@geraet: $ ssh test@192.168.48.196 "chmod 700 .ssh; chmod 640 .ssh/authorized_keys"
Alternative 2: Kopieren des öffentlichen Schlüssels mit ssh-copy-id
Mit der folgenden Anweisung werden die Schlüssel des Client auf den entfernten Remote-Server übertragen und in die Datei .ssh/authorized_keys eingetragen:
xxxxxxxxxxtest@geraet: $ ssh-copy-id test@192.168.48.196
xxxxxxxxxxtest@geraet: $ sudo nano ~/.ssh/config
xxxxxxxxxxhost datenserverhostname 192.168.48.196user testIdentityFile ~/.ssh/test.pub
Die Angaben sind den eigenen Verhältnissen anzupassen.
xxxxxxxxxxtest@geraet: ~/.ssh$ cdtest@geraet: $ ssh 192.168.48.196Welcome to Ubuntu 23.04 (GNU/Linux 6.2.0-20-generic x86_64)* Documentation: https://help.ubuntu.com* Management: https://landscape.canonical.com* Support: https://ubuntu.com/advantageSystem information as of Do 4. Mai 09:31:27 CEST 2023System load: 0.05Usage of /: 28.7% of 5.41TBMemory usage: 7%Swap usage: 0%Temperature: 57.0 CProcesses: 264Users logged in: 1IPv4 address for enp0s25: 192.168.48.196IPv6 address for enp0s25: 2003:eb:f3b:122d:e39d:5d67:fb59:7a3aIPv6 address for enp0s25: 2003:eb:f3b:122d:921b:eff:fe29:2a6* Strictly confined Kubernetes makes edge and IoT secure. Learn how MicroK8sjust raised the bar for easy, resilient and secure K8s cluster deployment.https://ubuntu.com/engage/secure-kubernetes-at-the-edge0 Aktualisierungen können sofort angewendet werden.Last login: Wed May 3 10:36:34 2023 from 192.168.48.101test@datenserver:~$
Mit dem folgenden Befehl erhält man die Verbindungsdaten des Remote-Server:
xxxxxxxxxxtest@datenserver:~$ ifconfigenp0s25: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500inet 192.168.48.196 netmask 255.255.255.0 broadcast 192.168.48.255inet6 2003:eb:f3b:122d:921b:eff:fe29:2a6 prefixlen 64 scopeid 0x0<global>inet6 fe80::921b:eff:fe29:2a6 prefixlen 64 scopeid 0x20<link>inet6 2003:eb:f3b:122d:e39d:5d67:fb59:7a3a prefixlen 64 scopeid 0x0<global>ether 90:1b:0e:29:02:a6 txqueuelen 1000 (Ethernet)RX packets 993333 bytes 1163593835 (1.1 GB)RX errors 0 dropped 0 overruns 0 frame 0TX packets 400803 bytes 51370248 (51.3 MB)TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0device interrupt 20 memory 0xf7c00000-f7c20000lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536inet 127.0.0.1 netmask 255.0.0.0inet6 ::1 prefixlen 128 scopeid 0x10<host>loop txqueuelen 1000 (Lokale Schleife)RX packets 210 bytes 23082 (23.0 KB)RX errors 0 dropped 0 overruns 0 frame 0TX packets 210 bytes 23082 (23.0 KB)TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536inet 127.0.0.1 netmask 255.0.0.0inet6 ::1 prefixlen 128 scopeid 0x10<host>loop txqueuelen 1000 (Lokale Schleife)RX packets 210 bytes 23082 (23.0 KB)RX errors 0 dropped 0 overruns 0 frame 0TX packets 210 bytes 23082 (23.0 KB)TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
Um sich wieder abzumelden wird ausgeführt:
xxxxxxxxxxtest@datenserver:~$ exitAbgemeldetConnection to 192.168.48.196 closed.
Die Syntax für den Datenaustausch lautet hier:
rsync -aP Quelle Ziel
Erläuterung
-aP: es werden die genauen Daten der Übertragung im Fenster angegeben
Quelle: Speicherort der Daten, die übertragen werden sollen
Ziel: Sicherungsort
xxxxxxxxxxtest@geraet:~$ rsync -aP /home/test/daten/ test@192.168.58.196:/media/backup/
Ob beim Ziel ein Slash "/" angegeben wird oder nicht, erweist sich im Test als wirkungslos, sollte jedoch bei den eigenen Sicherungsversuchen überprüft werden.
Ausgegeben wird beispielhaft:
xxxxxxxxxxsending incremental file list./032-radio/hoerzu-radio/032-radio/hoerzu-radio/HZ17_W.pdf1.281.539 100% 203,52MB/s 0:00:00 (xfr#1, to-chk=139/580)032-sonstiges/032-videos/test@geraet: $
Es gibt darüber hinaus eine Vielzahl von Einstellungen, die mit rsync eingesetzt werden können. Für eine 1:1-Kopie der Daten hat sich die Syntax in der Praxis bewährt.
Wer aufwendige Systeme pflegen muss, kann die Ausführung von Vorgängen in einem Script zusammen fassen.
Die Praxis hat jedoch gezeigt, dass dies für ein einfaches Backup bzw. eine Datensicherung aufgrund des damit verbundenen Risikos möglicher Fehler nicht die erste Wahl ist. Was eventuell an Zeitersparnis gewonnen werden kann, wird durch die Prozessprüfung und ggf. Fehlersuche wieder eingebüßt. Eine minimale Variante eines solchen Skriptes findet sich unter ubuntuusers.de
Wenn man aber keine überzogenen Vorstellungen an eine Automatisierung hat, dann können beispielsweise Batch-Dateien durchaus die zeitgesteuerte Datensicherung erleichtern und ermöglichen.
Ein eigenes Beispiel für rsync über den Standardport 22 mit zwei Verzeichnissen (Quelle-Ziel):
xxxxxxxxxx# /backup/skripte/backyoga.sh#!/bin/bash#Remote Server IPrserver=192.168.48.196#Local backup locationlbackuploc=/home/test/dokumente/#Local backup locationlbackuploc1=/home/test/medien/#Remote backup locationrbackuploc=/media/daten/dokumente/#Remote backup locationrbackuploc1=/media/daten/medien/#rsync command with standard portrsync -aP -e ssh $lbackuploc $rserver:$rbackuploc >> /home/test/log/backyoga-doku.log 2>&1 &rsync -aP -e ssh $lbackuploc1 $rserver:$rbackuploc1 >> /home/test/log/backyoga-medien.log 2>&1#To delete files older than 10 days# find $rbackuploc/* -mtime +10 -exec rm {} \;
Quelle: Eigene Fassung basierend auf Beispielen von Manuthamutu, Magesh
Die Daten sind den eigenen Verhältnissen anzupassen.
In diesem Beispiel-Skript werden zwei Quell- und zwei Zielverzeichnisse abgeglichen und notwendige Kopien angefertigt. Die Verbindung der Kommandos erfolgt durch den Schalter "&", der die weitere Ausführung von rsync für eine zweite Ziel-Quelle-Sicherung bewirkt. Dieses Skript lässt sich demzufolge für weitere Sicherungen erweitern.
Der Schalter --delete und andere Modifikationen sollten zur Ausführung von rsync jedoch nicht automatisiert freigegeben werden. Es besteht durchaus das Risiko des Datenverlustes.
Besser erscheint die Nutzung anderer Kommandos, wie im o.a. eigenen Beispiel angeführt. Das Löschen von Dateien ist hier bewusst deaktiviert.
Da die Anmeldung auf einem Remote Server wie oben beschrieben eingerichtet ist, lassen sich automatische Backups und Datensicherungen im Hintergrund als Cronjob ausführen. Bedingung ist: 1. Quelle und Ziel müssen eingeschaltet sein, 2. die Job-Einzelheiten müssen in der eigenen Crontab eingetragen sein.
Dazu öffnet man im Terminal die Datei crontab:
xxxxxxxxxxtest@geraet:~$ crontab -eno crontab for test - using an empty oneSelect an editor. To change later, run 'select-editor'.1. /bin/nano <---- easiest2. /usr/bin/vim.tiny3. /bin/edChoose 1-3 [1]: 1
Die Auswahl 1 bestätigen und die folgenden Angaben in die Datei kopieren und die Datei speichern/schließen:
xxxxxxxxxx0 18 * * * rsync -aP /home/test/daten test@192.168.48.196:/media/backup
Die Beispieldaten sind den eigenen Verhältnissen anzupassen.
Unter Nutzung des o.a. Skriptes lautet die Eintragung:
xxxxxxxxxx0 18 * * * /home/test/backup/skripte/backyoga.sh
Will man die Ausgabe in einer .log festhalten, dann wird folgende Sequenz an die obige Zeile angehängt, wodurch auch die Änderungen und Fehler aufgeführt werden:
>> /home/test/log/backup.log 2>&1
Mit einer angelegten .log kann das Beispiel dann so aussehen:
xxxxxxxxxx0 18 * * * rsync -aP /home/test/daten test@192.168.48.196:/media/backup >> /home/test/log/backup.log 2>&1
Dieser Eintrag bedeutet, dass alle Veränderungen in einer .log gespeichert werden. Das kann schnell unübersichtlich werden. Mit dem folgenden Eintrag erhält man eine separate .log für jede Datensicherung mit Angabe von Datum und Zeit in der Form: 20230504-190002-backup.log:
xxxxxxxxxx0 18 * * * rsync -aP /home/test/daten test@192.168.48.196:/media/backup >> /home/test/log/`date +"%Y%m%d-%H%M%S"`-backup.log 2>&1
Beispiel für eine .log
xxxxxxxxxxsending incremental file list./beispiel.zip32.768 4% 0,00kB/s 0:00:00747.854 100% 29,65MB/s 0:00:00 (xfr#1, ir-chk=1035/1037)archiv/sending incremental file listtest/log/backup.log807 100% 0,00kB/s 0:00:00807 100% 0,00kB/s 0:00:00 (xfr#1, ir-chk=1000/4250)
Normalerweise werden die .log unter /var/log abgelegt. Da hier nicht immer die notwendigen Rechte eingerichtet sind, erscheint es sinnvoller, einen Ordner im Home-Verzeichnis anzulegen und die .log dort zu speichern.
Mo-So Backup/Datensicherung um 18:00 Uhr
Syntax:
xxxxxxxxxx# .---------------- minute (0 - 59)# | .------------- hour (0 - 23)# | | .---------- day of month (1 - 31)# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat# | | | | |# * * * * * user-name command to be executed0 0 * * 0 root /bin/rsync -a Backup every Day at 06:00 PM
Nach der durchgeführten Änderung ist crontab zu starten:
xxxxxxxxxxtest@geraet:~$ sudo service cron start
oder neu zu laden
xxxxxxxxxxtest@geraet:~$ systemctl restart cron
Will man den Cronjob stoppen, dann erfolgt dies mit:
xxxxxxxxxxtest@geraet:~$ sudo service cron stop
Die Automatisierung funktioniert nur, wenn Quelle und Ziel als (Client-Server) gestartet sind. Wenn ein Gerät darüber hinaus noch zu einem bestimmten Zeitpunkt gestartet und beendet werden soll, dann ist dies auf dem betreffenden Gerät im BIOS und als Programm einzustellen (wakeonlan). Hinweise hierzu im Blogbeitrag Automatischer Start und Shutdown.
Das Programm rsync ist auch für MacOS und Windows verfügbar, allerdings eingeschränkt:
- rsyncOSX: https://github.com/rsyncOSX/RsyncOSX
- Windows: Windows Subsystem Linux
Aussagen zur Funktionalität können im Internet recherchiert werden.
Die hier vorgestellten Hinweise lassen sich nicht konkreten geistigen Eigentümern zuordnen. Deshalb wird hier dankend auf die Bereitstellung von Informationen in der Community hingewiesen.
Mit einem überschaubaren zeitlichen Aufwand in die Einrichtung sind die Ergebnisse einer zeitgesteuerten Automatisierung von Backup und Datensicherung durchaus überzeugend, zumal diese Alternative ohne zusätzliche Kosten für Closed-Source-Programme in Anspruch genommen werden kann. Die vorgestellten Programme sind darüber hinaus leicht nachträglich zu installieren.
Allerdings sind hierfür auch manuelle Eingriffe in das System erforderlich, die bei unsachgemäßer Anwendung das System schwer beeinträchtigen können. Das setzt eine gewisse Erfahrung und Affinität zum Soft- und Hardwareeinsatz gerade bei linux-basierten Systemen voraus.
Die vorgestellten Hilfsmittel und Vorgehensweisen zur regelmäßigen Datensicherung bieten auch dem insoweit ungeübten Nutzerkreis eine sichere Alternative, im eigenen Netzwerk und auch mit Fremddiensten wie GitHub oder GitLab ohne nicht gewollte Offenlegung die Daten auszutauschen.
Wenn das System steht, profitiert man von der eingestellten Sicherung der Daten.
1. Speicherbedarf für Backup und Datensicherung ermitteln
- was ist zu sichern: Audio, Video, Bilder und Text
- Festlegung der Größe des Speichers: Audio, Video benötigen ein vielfaches an Platz
- 3-fach-Regel: 1. Backup, 2. Datensicherung, 3. externe Aufbewahrung
- Berechnungsmöglichkeiten im Internet recherchieren
2. Installation der Software
- rsync, ssh, grsync, net-tools
- die Manual Pages der Hilfsprogramme nutzen
3. Automatisierung einrichten
- Schlüsselpaar erstellen
- öffentlichen Schlüssel auf Remote Server dauerhaft zur Authentifizierung vermerken
- Sicherung mit rsync via ssh testen
- eigene Crontab erstellen/ergänzen
- .log: eventuelle Fehlermeldungen prüfen
Kirk, Wolfgang: Good Practice - 41: Einstieg in die Langzeit-Archivierung
Kirk, Wolfgang: Github via SSH
Kirk, Wolfgang: Installation Ubuntu-Server 22.04 mit Software-Raid 1 auf einem Tablet-PC
Avi: How to Exchange SSH Key for Password-less Authentication between Linux Servers? - Beitrag vom 30.11.2022 auf geekflare.com (https://geekflare.com/linux-ssh-key-exchange/)
Manuthamutu, Magesh: Four Simple Steps to Sync Your Backup to a Remote Server Using the rsync Command (https://www.2daygeek.com/bash-script-remote-backup-replication-using-rsync-command/)
rsync https://manpages.ubuntu.com/manpages/kinetic/man1/rsync.1.html
Grsync: https://www.opbyte.it/grsync/
net-tools https://www.mankier.com/package/net-tools
ssh: https://www.openssh.com/manual.html
Wolfgang Kirk

Veröffentlicht: 2022-05-04 aktualisiert: 2025-07-28, 20:00 Uhr
