Ich habe zwar von Strato die Synology-NAS, dennoch nutze ich meine QNAP-NAS als zentrale Speichereinheit. Nennt mich Paranoid, aber die Synology-NAS ist rein als Backup der QNAP-NAS gedacht. Man weiß ja nie 😉
Zunächst etwas Theorie: Ich will ein Backup meiner QNAP-NAS auf eine Synology-NAS und nach Strato-Hidrive. Das ganze Jobgesteuert, z.B. täglich…
SSH oder rsync ohne Passwort
Zunächst ist es wichtig, dass man Passwörter nicht unbedingt als Klartext ins Dateisystem ablegt. Dafür gibt es die Möglichkeit mit Schlüsseln zu arbeiten, einen Privaten und einen Öffentlichen. Das theoretische Verfahren möchte ich nicht intensiv erklären, deshalb Wikipedia für mehr Infos dazu…
Nun zum praktischen, die Generierung eines Schlüssels… Dafür müsst Ihr auf die Shell Eures Linux-Systems, bei mir die QNAP-NAS. Wichtig ist, dass Ihr nun mit einem User den Schlüssel erstellt, der auf die Daten die gesichert werden sollen zugreifen kann und die Sicherung durchführen soll. Im Zweifelsfall nehmt den root oder admin. In der Shell führt Ihr den Befehl
ssh-keygen -t rsa
aus. Bei der Frage nach einer Passphrase könnt Ihr einfach zwei mal Enter drücken. Das war es im Endeffekt fast, der öffentliche Schlüssel wurde erstellt und liegt im Pfad
~/.ssh/id_rsa.pub
Dabei gilt ~ als das Home-Verzeichnis des angemeldeten Benutzers… Diesen Key müsst Ihr auf das Zielsystem kopieren oder Strato übermitteln. Bei Strato ist das echt simpel in der Weboberfläche realisiert.
Ihr habt den Key von oben kopiert, z.B. nach /tmp/id_rsa.pub auf dem System, wo Ihr hin sichern wollt. In meinem Beispiel halt die Synology-NAS. Jetzt meldet Ihr Euch auch auf diesem System in der Shell an. Bitte unter dem User, der entsprechende Schreibrechte hat, wo Eure Daten abgelegt werden sollen. Im Zweifelsfall wieder root oder admin…
Jetzt ist es total simpel, gebt einfach den Befehl
cat /tmp/id_rsa.pub >>~/.ssh/authorized_keys chmod 700 ~/.ssh/authorized_keys
ein. Damit wird der öffentliche Schlüssel dem System für diesen User bekannt gemacht. Es ist Euch möglich ohne Eingabe eines Passwortes die Anmeldung an das Zielsystem per rsync oder ssh durchzuführen.
rsync zum sichern
Sowohl nach Strato, als auch nach meiner Synology-NAS sichere ich per rsync. Das ganze ist total easy, ich habe dafür ein Script erstellt:
SCRIPTPATH="/pfad/zum/script" SERVER="IP oder FQDN" USER="der Benutzer, der den öffentlichen RSA-Key bekommen hat" TARGET="/wo/wird/auf/dem/Zielsystem/hingesichert" # bei Strato sieht das in etwa so aus TARGET="/users/"$USER"/Ziel/wo/hin/gesichert/werden/soll" ERROR=${SCRIPTPATH}"/error.log" INCLUDE=${SCRIPTPATH}"/include" EXCLUDE=${SCRIPTPATH}"/exclude" RSYNC=/usr/bin/rsync RSYNC_OPTIONS="-avrz --delete --ignore-errors --log-file=${ERROR} -e ssh" CAT=/bin/cat CHECK_REMOTE=`ping -c 1 $SERVER | grep packet | awk '{print $4}'` SOURCE="/Pfad/der/gesichert/werden/soll" if [ $CHECK_REMOTE == 1 ]; then ${RSYNC} ${RSYNC_OPTIONS} ${SOURCE} ${USER}@${SERVER}:${TARGET} --files-from=${INCLUDE} --exclude-from=${EXCLUDE} if [`cat ${ERROR} | grep 'error' | wc -c` -gt 1 ] then echo "Verarbeitung erfolgreich beendet" else echo "Verarbeitung fehlerhaft beendet (siehe Log: ${ERROR})" fi else echo "Server nicht erreichbar..." fi
Include und Exclude sind somit Liste, wo Ihr bestimme Verzeichnisse inkludieren oder exkludieren könnt (ach, was ne schöne Erklärung, aber mir fällt gerade nix besseres ein…). Dabei ist wichtig, dass die Pfadangaben ausgehend von dem Pfad unter Source gelten… Wenn Ihr z.B. /Sicherung/ sichern wollt, aber das Unterverzeichnis /Sicherung/nichtsichern/ nicht sichern wollt, dann ist „SOURCE=/Sicherung“ und in dem File exclude muss eine Zeile „/nichtsichern“ stehen.
Das Script ist ansonsten relativ selbsterklärend. OK, der rsync-Aufruf ist durch die vielen Variablen etwas kryptisch, aber vom Prinzip her ist das echt simpel. Anstatt der Rückmeldung habe ich eine Mailbenachrichtigung bei Fehlern. Das Script kann z.B. täglich als Cronjob aktiviert werden.