Als Gedankenstütze nachfolgend einige Lösungen für Probleme, die sich mir in den Weg stellten:
Mac OS X
$ ssh-keygen -t rsa -b 2048 -f id_rsa_dashboard_vault
Die Aufforderung, ein Passwort für den Private Key zu generieren, bestätigt man mit ENTER — der Private Key wird so nicht zusätzlich mit einem Passwort geschützt, weil dies den automatisierten Login von Raspberry Pi auf die DiskStation verhindern würde.
Der Befehl erstellt zwei Dateien:
- id_rsa_dashboard_vault
- id_rsa_dashboard_vault.pub
Synology DiskStation
Als erstes richtet man sich über die Web-Oberfläche einen normalen Benutzer dashboard ein, in dessen Home-Verzeichnis die Backup-Daten geschrieben werden.
Hierzu müssen dem Benutzer Schreibrechte auf /homes gegeben werden. Ansonsten sieht man sich beim Starten des Backup-Scripts (s. unten) mit folgender Fehlermeldung gegenüber:
ERROR: module is read only
Quelle: Rsync over ssh: “ERROR: module is read only” suddenly appeared
Wichtig ist weiter, dass der SSH-Zugang über die Web-Oberfläche aktiviert wurde.
/etc/passwd
Dem neu erstellten Benutzer müssen wir nun eine gültige Login-Shell zuweisen:
... dashboard:x:1029:100::/var/services/homes/dashboard:/bin/ash
Erfasst man hier ein nicht existierendes Login-Shell, kriegt man beim Debugging des publickey SSH-Logins folgende komische Infos ans Gesicht geworfen:
... Authentication succeeded ... Permission denied ...
Um sicher zu gehen, dass die Login-Shell richtig konfiguriert ist, macht man als auf der DiskStation eingeloggter User root folgendes:
# su dashboard
Wechselt man in ein neues Shell, ist /etc/passwd korrekt konfiguriert.
/var/services/homes/dashboard/.ssh/authorized_keys
In dieser Datei legen wir den Public Key ab (id_rsa_dashboard_vault.pub).
/etc/ssh/sshd_config
Wahrscheinlich müsste man hier gar nichts anpassen, beim Debugging habe ich es dann doch getan (wohl unnötigerweise):
$ cat sshd_config | grep -v "^#" | sort AllowTcpForwarding no AuthorizedKeysFile .ssh/authorized_keys ChallengeResponseAuthentication no ChrootDirectory none HostKey /etc/ssh/ssh_host_dsa_key HostKey /etc/ssh/ssh_host_ecdsa_key HostKey /etc/ssh/ssh_host_rsa_key LogLevel INFO Match User root AllowTcpForwarding yes Protocol 2 PubkeyAuthentication yes Subsystem sftp internal-sftp -f DAEMON -u 000 SyslogFacility AUTH UseDNS no UsePAM yes
Raspberry Pi
/root/.ssh/config
Host vault Hostname 10.0.44.44 User dashboard IdentityFile ~/.ssh/id_rsa_dashboard_vault
In der Datei ~/.ssh/id_rsa_dashboard_vault legt man den Private Key ab.
Login überprüfen
Dies sollte nun ohne Eingabe eines Passwortes möglich sein:
$ ssh vault
Bei einer Fehlermeldung helfen die Optionen -v, -vv und -vvv weiter:
$ ssh -v vault
/usr/local/bin/backup.sh
Folgendes Script sichert / (root) des Raspberry Pis auf den Host vault in den Pfad /volume1/homes/dashboard/backups/. Auf dem Raspberry Pi nicht mehr vorhandene Dateien werden auf der DiskStation gelöscht.
#!/bin/sh RSYNC=`which rsync` if [ ! -e "$RSYNC" ] then echo "rsync binary not found: '$RSYNC'" exit 1 fi TODAY=`date +"%F_%T"` SNAPSHOTFILE="/var/log/rsync/$TODAY.snapshot.txt" #touch "$SNAPSHOTFILE" echo "$TODAY" > "$SNAPSHOTFILE" if [ ! -f "$SNAPSHOTFILE" ] then echo "Could not create snapshotfile '$SNAPSHOTFILE'" else echo "Snapshotfile created at:" ls -l "$SNAPSHOTFILE" fi LOGFILE="/var/log/rsync/$TODAY.log.txt" EXCLUDEFILE="/usr/local/bin/backup-exclude.txt" SOURCE="/" DEST="vault:/volume1/homes/dashboard/backups/" echo "Running rsync ..." $RSYNC -avz --log-file="$LOGFILE" --exclude-from="$EXCLUDEFILE" --delete -e ssh "$SOURCE" "$DEST" echo "Backup complete." exit 0
/usr/local/bin/backup-exclude.txt
proc/* sys/* dev/* tmp/* run/* mnt/*
Quelle: Can a Raspberry Pi be used to create a backup of itself?
/etc/crontab
... 4 0 * * * root /usr/local/bin/backup.sh
Hiermit wird das Backup-Script täglich um 4 Uhr morgens ausgeführt.