Blog Digitalgesellschaft Verwaltungsbetrieb Textarchiv Textarchiv Walter Kirk (✝) Impressum
Datensicherung mit Rsync via SSH
VorbemerkungVoraussetzungen HardwareSoftwareSSH einrichtenSchritt 1: Schlüssel erzeugenSchritt 2: Schlüssel austauschenSchritt 3: SSH Konfiguration erstellenSchritt 4: TestrsyncAutomatisierungSkripteRsync und LöschenCrontabLog-DateiWirkungBedingungAndere BetriebssystemeCommunitySchlussbemerkungCheckliste Datensicherung mit Rsync via SSHQuelle:ArtikelManual 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):
xxxxxxxxxx
test@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.
Alternative 1: GitHub und GitLab
xxxxxxxxxx
test@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
xtest@geraet: ~/.ssh$ cd .ssh
test@geraet: ~/.ssh$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/test/.ssh/id_rsa): Test
Enter passphrase (empty for no passphrase): <keine Eingabe>
Enter same passphrase again: <keine Eingabe>
Your identification has been saved in test
Your public key has been saved in test.pub
The key fingerprint is:
SHA256:+KJDtdTgXkh2s4YXdHUMmOzSkIGhN/Jg9ybX1Hq2zgk wolfgang@t460s-lin2
The 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
xxxxxxxxxx
test@geraet: $ cat .ssh/test.pub | ssh test@192.168.48.196 'cat >> .ssh/authorized_keys'
Danach sind noch die Rechte zu vergeben:
xxxxxxxxxx
test@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:
xxxxxxxxxx
test@geraet: $ ssh-copy-id test@192.168.48.196
xxxxxxxxxx
test@geraet: $ sudo nano ~/.ssh/config
xxxxxxxxxx
host datenserver
hostname 192.168.48.196
user test
IdentityFile ~/.ssh/test.pub
Die Angaben sind den eigenen Verhältnissen anzupassen.
xxxxxxxxxx
test@geraet: ~/.ssh$ cd
test@geraet: $ ssh 192.168.48.196
Welcome 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/advantage
System information as of Do 4. Mai 09:31:27 CEST 2023
System load: 0.05
Usage of /: 28.7% of 5.41TB
Memory usage: 7%
Swap usage: 0%
Temperature: 57.0 C
Processes: 264
Users logged in: 1
IPv4 address for enp0s25: 192.168.48.196
IPv6 address for enp0s25: 2003:eb:f3b:122d:e39d:5d67:fb59:7a3a
IPv6 address for enp0s25: 2003:eb:f3b:122d:921b:eff:fe29:2a6
* Strictly confined Kubernetes makes edge and IoT secure. Learn how MicroK8s
just raised the bar for easy, resilient and secure K8s cluster deployment.
https://ubuntu.com/engage/secure-kubernetes-at-the-edge
0 Aktualisierungen können sofort angewendet werden.
Last login: Wed May 3 10:36:34 2023 from 192.168.48.101
test@datenserver:~$
Mit dem folgenden Befehl erhält man die Verbindungsdaten des Remote-Server:
xxxxxxxxxx
test@datenserver:~$ ifconfig
enp0s25: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.48.196 netmask 255.255.255.0 broadcast 192.168.48.255
inet6 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 0
TX packets 400803 bytes 51370248 (51.3 MB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
device interrupt 20 memory 0xf7c00000-f7c20000
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::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 0
TX packets 210 bytes 23082 (23.0 KB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::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 0
TX 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:
xxxxxxxxxx
test@datenserver:~$ exit
Abgemeldet
Connection 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
xxxxxxxxxx
test@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:
xxxxxxxxxx
sending incremental file list
./
032-radio/hoerzu-radio/
032-radio/hoerzu-radio/HZ17_W.pdf
1.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 IP
rserver=192.168.48.196
#Local backup location
lbackuploc=/home/test/dokumente/
#Local backup location
lbackuploc1=/home/test/medien/
#Remote backup location
rbackuploc=/media/daten/dokumente/
#Remote backup location
rbackuploc1=/media/daten/medien/
#rsync command with standard port
rsync -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:
xxxxxxxxxx
test@geraet:~$ crontab -e
no crontab for test - using an empty one
Select an editor. To change later, run 'select-editor'.
1. /bin/nano <---- easiest
2. /usr/bin/vim.tiny
3. /bin/ed
Choose 1-3 [1]: 1
Die Auswahl 1 bestätigen und die folgenden Angaben in die Datei kopieren und die Datei speichern/schließen:
xxxxxxxxxx
0 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:
xxxxxxxxxx
0 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:
xxxxxxxxxx
0 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:
xxxxxxxxxx
0 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
xxxxxxxxxx
sending incremental file list
./
beispiel.zip
32.768 4% 0,00kB/s 0:00:00
747.854 100% 29,65MB/s 0:00:00 (xfr#1, ir-chk=1035/1037)
archiv/
sending incremental file list
test/log/backup.log
807 100% 0,00kB/s 0:00:00
807 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 executed
0 0 * * 0 root /bin/rsync -a Backup every Day at 06:00 PM
Nach der durchgeführten Änderung ist crontab zu starten:
xxxxxxxxxx
test@geraet:~$ sudo service cron start
oder neu zu laden
xxxxxxxxxx
test@geraet:~$ systemctl restart cron
Will man den Cronjob stoppen, dann erfolgt dies mit:
xxxxxxxxxx
test@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: 2024-07-19, 12:00 Uhr