Mittwoch, 18. September 2013
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.
Links