Backups mit Borg auf eine Hetzner Storage Box

Anleitung: verschlüsselte Server-Backups mit BorgBackup auf eine Hetzner Storage Box, abgesichert über einen append-only Sub-Account.

27.04.2026

Ich hoste zu Hause einen eigenen Server, auf diesem speichere ich einige Daten und es laufen verschiedene Dienste. Nun habe ich mich in das Thema Backups eingelesen und möchte hier berichten, wie ich Backups von meinem Server zu einer Hetzner Storage Box mache.

Als erstes musste ich mir einen Account bei Hetzner anlegen und anschließend habe ich eine Storage Box gebucht. In der Oberfläche von Hetzner muss man zunächst ein neues Passwort erstellen, dafür klickt man im Reiter "Storage Box Daten" auf den Button "Neues Passwort erstellen".

Sub-Account erstellen

Um einen "Sub-Account" zu erstellen, muss man zunächst einen Unterordner anlegen, da der Account immer an einen Unterordner gebunden ist und ohne diesen nicht existieren kann.

Dieser Ordner kann folgendermaßen angelegt werden:

ssh -p 23 uxxxxxx@uxxxxxx.your-storagebox.de mkdir unteraccount

Standardmäßig läuft SSH unter dem Port 22, bei Hetzner ist es jedoch der Port 23.

Nach der Eingabe des Passworts wird der Ordner angelegt. Anschließend kann man den Nutzer im Reiter "Sub-Account" anlegen. Dort wird dann der Benutzername und das Passwort ausgegeben, mit dem man sich in den Unteraccount einloggen kann.

Generieren eines SSH-Keys

Um sichere Backups zu machen, wird ein SSH-Key auf der Maschine benötigt, auf der wir die Backups machen wollen. Diesen generiert man mit folgendem Kommando:

ssh-keygen -f pfad/zum/key -t ED25519

Der Public Key muss jetzt auf die Storage Box übertragen werden. Normalerweise benutzt man dafür das Kommando ssh-copy-id. Das würde dem Nutzer jedoch erlauben, beliebige Kommandos auszuführen — z.B. könnte er alle Backups löschen. Wenn im schlimmsten Fall jemand den Server übernimmt, könnte er die Backups löschen. Um das zu vermeiden, wird dem Nutzer nur das Kommando borg serve --append-only erlaubt. Dieses startet den Borg-Repository-Dienst im Append-Only-Modus, das bedeutet: Der Dienst löscht keine Daten, sondern Daten können nur angehängt oder als gelöscht markiert werden. Das heißt: Wenn jemand den Server übernimmt, kann er zwar alle Daten als gelöscht markieren, aber nicht die eigentlichen Daten löschen.

Um die Kommandos einzuschränken, muss die Datei authorized_keys auf der Storage Box angelegt werden. Dazu muss man die Datei zunächst lokal anlegen:

echo "command=\"borg serve --append-only\" $(cat pfad/zum/key.pub)" > authorized_keys

Anschließend muss man den passenden Ordner erstellen und die Datei hochladen:

ssh -p 23 subuser@subuser.your-storagebox.de mkdir .ssh
scp -P 23 authorized_keys subuser@subuser.your-storagebox.de:.ssh/authorized_keys

Initialisieren des Repositories

Wenn der Key kopiert wurde, sollte man sich ein Passwort überlegen, mit dem das Backup verschlüsselt werden soll. Das Passwort ist sehr wichtig — ohne ist es nicht möglich, das Backup wiederherzustellen.

export BORG_RSH='ssh -i pfad/zum/key'
export BORG_PASSPHRASE="geheime-passphrase"
borg init --encryption=repokey --make-parent-dirs ssh://subuser@subuser.your-storagebox.de:23/./backups/name-des-repo

Erstes Backup

Anschließend kann man folgendes Skript nutzen, um ein Backup zu erstellen:

#!/usr/bin/env bash

##
## Setzen von Umgebungsvariablen
##

## falls nicht der Standard-SSH-Key verwendet wird, können
## Sie hier den Pfad zu Ihrem Private Key angeben
export BORG_RSH='ssh -i pfad/zum/key'

## Damit das Passwort vom Repository nicht eingegeben werden muss,
## kann es in der Umgebungsvariable gesetzt werden
export BORG_PASSPHRASE="geheime-passphrase"

##
## Setzen von Variablen
##

LOG='/var/log/borg/backup.log'
export BACKUP_USER='nutzer'
export REPOSITORY_DIR='name-des-repo'

## Hinweis: Für die Verwendung mit einem Backup-Account muss
## 'your-storagebox.de' in 'your-backup.de' geändert werden.

export REPOSITORY="ssh://${BACKUP_USER}@${BACKUP_USER}.your-storagebox.de:23/./backups/${REPOSITORY_DIR}"

##
## Ausgabe in Logdatei schreiben
##

exec > >(tee -i ${LOG})
exec 2>&1

echo "###### Backup gestartet: $(date) ######"

##
## An dieser Stelle können verschiedene Aufgaben vor der
## Übertragung der Dateien ausgeführt werden, wie z.B.
##
## - Liste der installierten Software erstellen
## - Datenbank-Dump erstellen
##

##
## Dateien ins Repository übertragen
## Gesichert werden hier beispielsweise die Ordner root, etc,
## var/www und home.
## Außerdem finden Sie hier gleich noch eine Liste Excludes,
## die in kein Backup sollten und somit per Default ausgeschlossen
## werden.
##

echo "Übertrage Dateien ..."
borg create -v --stats                   \
    $REPOSITORY::'{now:%Y-%m-%d_%H:%M}'  \
    /home/nutzer \
    /mnt/platte1 \
    /mnt/platte2

echo "###### Backup beendet: $(date) ######"

Für das erste Backup kann man --progress an das borg create-Kommando anhängen. Außerdem sollte man den Log-Ordner erstellen (mkdir /var/log/borg) und einen Cronjob anlegen. Auf meinem Server mache ich einmal die Woche, am Montag um 03:00 Uhr, ein Backup.

0 3  *   *   1   /root/backup.sh

Aufruf: crontab -e

Wenn man mit Cron nicht so viel anfangen kann, ist diese Seite sehr nützlich: https://crontab.guru/

Backup anschauen

Um sich ein Backup anzuschauen, kann man ein Repository folgendermaßen einbinden:

borg mount ssh://subuser@subuser.your-storagebox.de:23/./backups/name-des-repo /mnt/backup
ls -la /mnt/backup