Restic mit Hetzner Storagebox nutzen

Die flexiblen und günstigen Storage Boxes von Hetzner eigenen sich wunderbar für Backups von Servern und Desktoprechnern. Ich nutze sie, um verschlüsselte Sicherungen meiner Server geografisch getrennt und sicher aufzubewahren. Das Backup-Tool Restic spielt dabei über das SFTP-Protokoll wunderbar mit dem Cloudspeicher zusammen.

Bevor die StorageBox mit Restic verknüpft werden kann, muss die Box zunächst vorbereitet werden, sodass auf sie via SFTP zugegriffen werden kann. In den StorageBox Einstellungen muss das SSH-Protokoll zur Datenübertragung aktiviert sein. Alle anderen Zugriffsmethoden wie z.B. Samba können deaktiviert bleiben.

Danach wird die StorageBox lokal gemoutet, um alle weiteren Vorbereitungen zu treffen.

mkdir /mnt/storagebox
sshfs u123456@u123456.your-storagebox.de: /mnt/storagebox/

(u123456 muss hier und in den folgenden Kommandos durch die eigene Userkennung ersetzt werden!)

Gebt das Passwort für die StorageBox ein. Das Passwort kann in den Einstellungen der StorageBox eingesehen bzw. geändert werden.

Für eine Authentifizierung des Servers an der StorageBox soll ein SSH-Key genutzt werden. Damit der passende Public Key an der StorageBox registriert werden kann, muss ein .ssh Verzeichnis und die authorized_keys Datei angelegt werden.

mkdir /mnt/storagebox/.ssh
touch /mnt/storagebox/.ssh/authorized_keys

Einen neuen Host registrieren

Nun wird auf dem zu sichernden Server ein neuer SSH-Key für den root-User generiert. Achtet darauf, für den Key kein Passwort anzulegen - schließlich soll der Key einmal während des Backupprozesses automatisch und ohne Passworteingabe verwendet werden.

ssh-keygen -t ed25519

In der SSH-Konfigurationsdatei /root/.ssh/config des Servers wird folgende Konfiguration hinterlegt:

Host u123456.your-storagebox.de
        User u123456
        Port 23

Die Konfiguration wird später einen konfortableren Zugriff ermöglichen, weil alle nötigen Verbindunsparameter aus der Konfiguration gelesen werden können.

Der Public Key des neu generierten SSH-Schlüsselpaars wird nun an der StorageBox registriert:

cat ~/.ssh/id_ed25519.pub >> /mnt/storagebox/.ssh/authorized_keys

Für die Backups dieses Hosts wird ein neues Verzeichnis angelegt, welches das Backuparchiv enthalten soll:

mkdir /mnt/storagebox/host1

Die StorageBox kann nun wieder unmounted werden:

fusermount -u /mnt/storagebox

Backupscript erstellen

Das Backupscript soll die Informationen über den Speicherort aus Umgebungsvariablen lesen, die in einer Datei namens resticenv.sh gelesen werden. Die Definition der Umgebungsvariablen ließen sich zwar auch direkt in dem Backupscript definieren, doch die getrennte Definitionsdatei ermöglicht einen bequemeren Umgang mit Restic, falls einmal manuelle Eingriffe oder ein Restore nötig sein sollten.

resticenv.sh

#!/bin/bash

export RESTIC_REPOSITORY="sftp:u123456.your-storagebox.de:host1"
export RESTIC_PASSWORD="meinbackuparchivpassword"

Ein Backupscript backup.sh für Restic könnte beispielsweise so aussehen:

#!/bin/bash

### Restic Passwort und Speicherort einlesen
source resticenv.sh

### Restic ausführen
restic backup \
        /var/www \
        /home \
        /etc \
        /root

Bevor Restic / backup.sh erstmalig ausgeführt werden kann, muss das Backuparchiv in der StorageBox initialisiert werden. Dazu werden die Verbindungsparameter zum Archiv via source eingelesen und ein restic init ausgeführt:

source resticenv.sh
restic init

Das Restic-Archiv ist nun einsatzbereit und backup.sh kann regelmäßig ausgeführt werden.