HomeStart / GuidesAnleitungen / A restic backup target on a VPS/ Ein restic-Backup-Ziel auf einem VPS

A restic backup target on a VPS: a chrooted SFTP user and a repository that outlives the clientEin restic-Backup-Ziel auf einem VPS: ein gechrooteter SFTP-Nutzer und ein Repository, das den Client überlebt

Every self-hosting guide on this site ends the same way: copy it off the box. This one is about the box on the other end of that copy — a second, cheap VPS whose only job is to hold restic repositories that a client somewhere else writes to, and to make sure that client can write but never get a shell.Jede Selfhosting-Anleitung auf dieser Seite endet auf dieselbe Weise: kopiere sie von der Maschine herunter. Diese hier handelt von der Maschine am anderen Ende dieser Kopie — einem zweiten, günstigen VPS, dessen einzige Aufgabe es ist, restic-Repositories zu halten, in die ein Client irgendwo anders hineinschreibt, und sicherzustellen, dass dieser Client zwar schreiben, aber niemals eine Shell bekommen kann.

Why the off-site copy is the point, not an afterthoughtWarum die Off-Site-Kopie der Punkt ist, kein Nachgedanke

A snapshot on the same disk as the thing it protects survives a bad update and nothing else. It does not survive a failed disk, a provider account problem, or a mistake that touches the whole filesystem. The only backup that answers "what if this machine disappears entirely" is one stored on a genuinely separate machine, with its own separate failure domain. That is what a second VPS is good for here: not more compute, just somewhere else to put data.Ein Snapshot auf derselben Platte wie das, was er schützen soll, übersteht ein missglücktes Update und sonst nichts. Er übersteht keinen ausgefallenen Datenträger, kein Problem mit dem Provider-Konto und keinen Fehler, der das gesamte Dateisystem betrifft. Das einzige Backup, das die Frage „Was, wenn diese Maschine komplett verschwindet?“ beantwortet, ist eines, das auf einer wirklich separaten Maschine liegt, mit ihrer eigenen, getrennten Fehlerdomäne. Genau dafür ist hier ein zweiter VPS gut: nicht für mehr Rechenleistung, sondern nur als ein weiterer Ort, an dem Daten liegen können.

restic fits this well because it does the three things that matter — it encrypts before anything leaves the source machine, deduplicates so repeated backups of mostly-unchanged data stay small, and treats an SFTP server as a first-class storage backend with nothing else required on the target beyond sshd. The target VPS in this guide never runs restic itself; it is a plain Ubuntu machine with one extra user account.restic passt hier gut, weil es die drei Dinge tut, auf die es ankommt — es verschlüsselt, bevor irgendetwas die Quellmaschine verlässt, dedupliziert, sodass wiederholte Backups von größtenteils unveränderten Daten klein bleiben, und behandelt einen SFTP-Server als vollwertiges Storage-Backend, ohne dass auf dem Ziel etwas außer sshd nötig wäre. Der Ziel-VPS in dieser Anleitung führt restic selbst nie aus; er ist eine schlichte Ubuntu-Maschine mit einem zusätzlichen Benutzerkonto.

A dedicated, chrooted SFTP userEin dedizierter, gechrooteter SFTP-Nutzer

Create a system account on the target purely to receive backups, with no password and no ordinary shell:Lege auf dem Ziel ein Systemkonto an, das ausschließlich Backups entgegennimmt, ohne Passwort und ohne gewöhnliche Shell:

sudo useradd --system --create-home --shell /usr/sbin/nologin restic
sudo mkdir -p /home/restic/.ssh /home/restic/repos
sudo chown root:root /home/restic
sudo chmod 755 /home/restic
sudo chown restic:restic /home/restic/.ssh /home/restic/repos
sudo chmod 700 /home/restic/.ssh /home/restic/repos
sudo touch /home/restic/.ssh/authorized_keys
sudo chmod 600 /home/restic/.ssh/authorized_keys
sudo chown restic:restic /home/restic/.ssh/authorized_keys

The ownership split is the part people get wrong first: ChrootDirectory refuses to chroot into a directory unless that directory, and everything above it, is owned by root and writable by no one else. /home/restic has to stay root:root mode 755 for that reason — the restic user cannot own its own home directory once it doubles as a chroot root. repos, where backups actually land, is a subdirectory owned by restic instead, which is exactly what the client needs to write into.Die Aufteilung der Besitzrechte ist der Teil, den die meisten zuerst falsch machen: ChrootDirectory weigert sich, in ein Verzeichnis zu chrooten, wenn dieses Verzeichnis und alles darüber nicht root gehören und für niemand sonst beschreibbar sind. /home/restic muss deshalb root:root mit Modus 755 bleiben — der Nutzer restic kann sein eigenes Home-Verzeichnis nicht besitzen, sobald es zugleich als Chroot-Wurzel dient. repos, wo die Backups tatsächlich landen, ist stattdessen ein Unterverzeichnis, das restic gehört — genau das, in das der Client schreiben muss.

Generate a keypair on the client, not the server, and put only the public half on the target. Every VPS on this site listens for SSH on a dedicated, non-standard port rather than 22 — the next section explains why — so include it here too, or the connection just times out against the wrong port:Erzeuge das Schlüsselpaar auf dem Client, nicht auf dem Server, und lege nur die öffentliche Hälfte auf dem Ziel ab. Jeder VPS auf dieser Seite nimmt SSH auf einem dedizierten, nicht standardmäßigen Port entgegen, nicht auf 22 — der nächste Abschnitt erklärt, warum —, gib ihn also auch hier an, sonst läuft die Verbindung schlicht gegen den falschen Port ins Leere:

ssh-keygen -t ed25519 -f ~/.ssh/restic-vps -C "restic backup client"
cat ~/.ssh/restic-vps.pub | ssh -p 2222 youruser@target-vps 'sudo tee -a /home/restic/.ssh/authorized_keys'

Then add a Match block at the end of /etc/ssh/sshd_config on the target:Füge dann auf dem Ziel am Ende von /etc/ssh/sshd_config einen Match-Block hinzu:

Match User restic
    ChrootDirectory /home/restic
    ForceCommand internal-sftp
    AllowTcpForwarding no
    X11Forwarding no
    PermitTunnel no

ForceCommand internal-sftp replaces whatever the client asks for with SFTP handled inside sshd itself — a plain ssh restic@target-vps connects and is handed an SFTP session with no shell to drop into. ChrootDirectory confines that session to paths under /home/restic, so the account cannot see the rest of the filesystem, including its own authorized_keys file (chrooting happens after key authentication, so that read already happened). AllowTcpForwarding no and PermitTunnel no close off using this login as a tunnel into the rest of the network.ForceCommand internal-sftp ersetzt alles, was der Client anfragt, durch SFTP, das direkt in sshd selbst abgewickelt wird — ein einfaches ssh restic@target-vps verbindet sich und bekommt eine SFTP-Sitzung, ohne dass es eine Shell gäbe, in die man wechseln könnte. ChrootDirectory beschränkt diese Sitzung auf Pfade unterhalb von /home/restic, sodass das Konto den Rest des Dateisystems nicht sehen kann, einschließlich seiner eigenen authorized_keys-Datei (das Chrooten passiert erst nach der Schlüssel-Authentifizierung, dieser Lesezugriff hat also schon stattgefunden). AllowTcpForwarding no und PermitTunnel no verhindern, dass dieser Login als Tunnel in den Rest des Netzwerks missbraucht wird.

Test the syntax before reloading, since a broken sshd_config locks out every account, not just this one:Prüfe die Syntax, bevor du neu lädst, denn eine kaputte sshd_config sperrt jedes Konto aus, nicht nur dieses eine:

sudo sshd -t
sudo systemctl reload sshd

Connect once by hand to confirm the shape of it. sftp takes an uppercase -P for the port, not the lowercase -p you just used with ssh — an easy slip to make right after typing the other one. You should land at what looks like /, actually /home/restic, with repos as the one writable directory:Verbinde dich einmal von Hand, um die Form zu prüfen. sftp nimmt für den Port ein großes -P, nicht das kleine -p, das du gerade eben bei ssh verwendet hast — ein Ausrutscher, der leicht passiert, direkt nachdem man das andere getippt hat. Du solltest bei dem landen, was wie / aussieht, tatsächlich aber /home/restic ist, mit repos als dem einen beschreibbaren Verzeichnis:

sftp -i ~/.ssh/restic-vps -P 2222 restic@target-vps

The dedicated port, and why the NAT catch does not applyDer dedizierte Port, und warum die NAT-Falle hier nicht greift

Every VPS on this site reaches SSH on a dedicated, non-standard port by default, and the restic account rides that exact same port and the exact same sshd — there is nothing extra to open or forward. Put the port in the client's own ~/.ssh/config rather than typing -p into every command:Jeder VPS auf dieser Seite erreicht SSH standardmäßig über einen dedizierten, nicht standardmäßigen Port, und das Konto restic nutzt genau denselben Port und denselben sshd mit — es gibt nichts Zusätzliches zu öffnen oder weiterzuleiten. Trag den Port in die eigene ~/.ssh/config des Clients ein, statt ihn bei jedem Befehl mit -p neu einzutippen:

Host restic-target
    HostName target-vps.example.com
    User restic
    Port 2222
    IdentityFile ~/.ssh/restic-vps
    IdentitiesOnly yes

Match Port to your target VPS's actual dedicated SSH port, not the 2222 above. A lot of self-hosting on a VPS runs into NAT IPv4 — a shared address with a short, fixed list of forwarded ports — the moment something needs to accept an inbound connection on a specific new port, the way a website needs 443. This is not that situation: SFTP is not a separate service on its own port, it is a subsystem inside the same sshd that already answers on your dedicated SSH port. The client's connection to it looks, at the network level, like an ordinary SSH login. Nothing new needs forwarding, and a dedicated IPv4 buys nothing here that the existing SSH port does not already cover. Read NAT IPv4 vs a dedicated IP for the fuller picture of where the catch does bite.Passe Port an den tatsächlichen dedizierten SSH-Port deines Ziel-VPS an, nicht an das 2222 oben. Viel Selfhosting auf einem VPS läuft in NAT-IPv4 hinein — eine geteilte Adresse mit einer kurzen, festen Liste weitergeleiteter Ports —, sobald etwas eine eingehende Verbindung auf einem bestimmten neuen Port entgegennehmen muss, so wie eine Website Port 443 braucht. Das hier ist nicht diese Situation: SFTP ist kein eigener Dienst auf einem eigenen Port, sondern ein Subsystem innerhalb desselben sshd, der bereits auf deinem dedizierten SSH-Port antwortet. Die Verbindung des Clients dorthin sieht auf Netzwerkebene aus wie ein ganz gewöhnlicher SSH-Login. Nichts Neues muss weitergeleitet werden, und eine dedizierte IPv4 bringt hier nichts, was der vorhandene SSH-Port nicht schon abdeckt. Lies NAT IPv4 vs. dedizierte IP für das vollständigere Bild davon, wo die Falle tatsächlich zuschnappt.

Initialising the repository and the password fileDas Repository und die Passwortdatei initialisieren

Whatever password restic is given the moment a repository is created is the one that repository stays locked to, permanently — so settle it before running init, not by typing something at an interactive prompt in the moment. Generate a proper random password, write it to a file only the client's own user can read, and export both RESTIC_PASSWORD_FILE and RESTIC_REPOSITORY first:Welches Passwort restic in dem Moment bekommt, in dem ein Repository erstellt wird, ist das, an das dieses Repository für immer gebunden bleibt — leg es also fest, bevor du init ausführst, nicht indem du im Moment etwas an einen interaktiven Prompt tippst. Erzeuge ein richtiges Zufallspasswort, schreib es in eine Datei, die nur der eigene Benutzer des Clients lesen kann, und exportiere zuerst sowohl RESTIC_PASSWORD_FILE als auch RESTIC_REPOSITORY:

mkdir -p ~/.config/restic
( umask 077; openssl rand -base64 48 > ~/.config/restic/repo-password )
export RESTIC_PASSWORD_FILE=~/.config/restic/repo-password
export RESTIC_REPOSITORY=sftp:restic-target:repos/home-server

With the ~/.ssh/config alias, the password file, and RESTIC_REPOSITORY all in place, initialise the repository from the client:Sind der Alias in ~/.ssh/config, die Passwortdatei und RESTIC_REPOSITORY alle vorhanden, initialisiere das Repository vom Client aus:

restic init

restic reads the encryption password straight from RESTIC_PASSWORD_FILE, so nothing is ever typed at a prompt where it would land in shell history or process listings, and the repository ends up encrypted with exactly the password that file holds — not some other one you typed by hand and then have to remember matched. With both variables exported, every command below can drop -r and needs no password prompt of its own. Lose this file with no other copy and the repository is unrecoverable by design — restic's encryption has no back door, so keep the password file itself backed up somewhere other than only this one client.restic liest das Verschlüsselungspasswort direkt aus RESTIC_PASSWORD_FILE, sodass niemals etwas an einem Prompt eingetippt wird, wo es in der Shell-History oder Prozesslisten landen könnte, und das Repository am Ende genau mit dem Passwort verschlüsselt ist, das diese Datei enthält — nicht mit einem anderen, das du von Hand eingetippt hast und dir dann merken musst, ob es übereinstimmte. Mit beiden exportierten Variablen kann jeder Befehl weiter unten -r weglassen und braucht keinen eigenen Passwort-Prompt. Verlierst du diese Datei ohne weitere Kopie, ist das Repository per Design unwiederbringlich — restics Verschlüsselung hat keine Hintertür, sichere die Passwortdatei selbst also irgendwo außer nur auf diesem einen Client.

Backups, excludes, and a retention policyBackups, Ausschlüsse und eine Aufbewahrungsrichtlinie

restic backup /srv/data /etc \
  --exclude-file=/etc/restic/excludes.txt \
  --tag home-server

A short excludes file keeps the repository from filling up with things not worth restoring:Eine kurze Ausschlussdatei bewahrt das Repository davor, sich mit Dingen zu füllen, die eine Wiederherstellung nicht wert sind:

/srv/data/cache
/srv/data/**/*.tmp
/srv/data/**/node_modules

--tag makes snapshots and forget filterable later, once a few months of runs have piled up. Run it on a schedule with a systemd timer rather than trusting yourself to remember, and prune in the same run. The unit runs as root, so give it its own root-only copy of the two settings: put RESTIC_REPOSITORY=… and RESTIC_PASSWORD_FILE=/etc/restic/repo-password (a root-owned, mode 600 copy of the password file) into /etc/restic/env, mode 600, and make sure root's ~/.ssh/config carries the same Host restic-target block and key:--tag macht snapshots und forget später filterbar, sobald sich ein paar Monate an Läufen angesammelt haben. Führe es mit einem systemd-Timer nach Zeitplan aus, statt dich selbst darauf zu verlassen, dass du dich erinnerst, und prune im selben Lauf gleich mit. Die Unit läuft als root, also gib ihr eine eigene, nur für root lesbare Kopie der zwei Einstellungen: Schreibe RESTIC_REPOSITORY=… und RESTIC_PASSWORD_FILE=/etc/restic/repo-password (eine root-eigene Kopie der Passwortdatei mit Modus 600) in /etc/restic/env, Modus 600, und sorge dafür, dass roots ~/.ssh/config denselben Host restic-target-Block und Schlüssel trägt:

[Unit]
Description=restic backup to target-vps

[Service]
Type=oneshot
EnvironmentFile=/etc/restic/env
ExecStart=/usr/bin/restic backup /srv/data /etc --exclude-file=/etc/restic/excludes.txt --tag home-server
ExecStartPost=/usr/bin/restic forget --prune --keep-daily 7 --keep-weekly 4 --keep-monthly 6
[Timer]
OnCalendar=daily
Persistent=true

[Install]
WantedBy=timers.target

forget alone only removes index entries for snapshots outside that keep policy; --prune walks the repository and reclaims the now-unreferenced data on disk, which is what actually keeps the target's disk use bounded rather than only growing. Persistent=true catches a run the machine missed while powered off, and runs it once at the next boot instead of silently skipping a day.forget allein entfernt nur Indexeinträge für Snapshots außerhalb dieser Aufbewahrungsrichtlinie; --prune durchläuft das Repository und gibt die jetzt nicht mehr referenzierten Daten auf der Platte frei — das ist es, was den Plattenverbrauch des Ziels tatsächlich begrenzt, statt ihn nur wachsen zu lassen. Persistent=true fängt einen Lauf ab, den die Maschine verpasst hat, während sie ausgeschaltet war, und holt ihn beim nächsten Boot einmal nach, statt einen Tag stillschweigend ausfallen zu lassen.

Check the repository's own integrity occasionally, separately from the backup schedule — monthly is reasonable for a personal setup:Prüfe die Integrität des Repositorys selbst gelegentlich, getrennt vom Backup-Zeitplan — monatlich ist für ein privates Setup angemessen:

restic check

check reads back metadata and, with --read-data-subset, a sample of the actual stored data — the only way to notice quiet corruption before the day you need a restore.check liest Metadaten zurück und, mit --read-data-subset, eine Stichprobe der tatsächlich gespeicherten Daten — der einzige Weg, stille Korruption zu bemerken, bevor der Tag kommt, an dem du eine Wiederherstellung brauchst.

Sizing: RAM barely matters, disk is the whole budgetDimensionierung: RAM spielt kaum eine Rolle, Speicherplatz ist das ganze Budget

The target VPS does almost no work. sshd handling an SFTP session and writing bytes to disk is not CPU- or memory-bound in any way worth planning around — restic itself, encrypting, deduplicating and chunking, runs entirely on the client. A Starter-tier target would hold up computationally without strain; the number that actually decides the tier is disk.Der Ziel-VPS verrichtet fast keine Arbeit. sshd, das eine SFTP-Sitzung bearbeitet und Bytes auf die Platte schreibt, ist weder CPU- noch speicherlastig in einer Weise, mit der sich eine Planung lohnt — restic selbst, das Verschlüsseln, Deduplizieren und Chunking, läuft vollständig auf dem Client. Ein Ziel im Starter-Tarif würde das rechnerisch mühelos stemmen; die Zahl, die den Tarif tatsächlich bestimmt, ist der Speicherplatz.

Because restic deduplicates against everything already in the repository and compresses what it stores, the repository is usually smaller than a naive sum of your backed-up data over time — a week of daily snapshots of a mostly-static tree can cost barely more than one full copy. Size the tier by your uncompressed data set, not by guesswork: a modest source tree — a home server's configs, a few databases, a modest document or media set — under Standard's 80 GB with a --keep-daily 7 --keep-weekly 4 --keep-monthly 6 policy has real room to spare. A larger set, more source machines, or a longer retention window pushes you to Pro's 120 GB, or to adding storage instead through add extra storage to your VPS, arranged after ordering rather than picked at checkout.Weil restic gegen alles dedupliziert, was bereits im Repository liegt, und komprimiert, was es speichert, ist das Repository über die Zeit meist kleiner als eine naive Summe deiner gesicherten Daten — eine Woche täglicher Snapshots eines größtenteils statischen Baums kann kaum mehr kosten als eine einzige vollständige Kopie. Dimensioniere den Tarif nach deinem unkomprimierten Datenbestand, nicht nach Bauchgefühl: Ein bescheidener Quellbaum — die Konfigurationen eines Heimservers, ein paar Datenbanken, ein überschaubarer Dokumenten- oder Medienbestand — hat unter Standards 80 GB mit einer Richtlinie von --keep-daily 7 --keep-weekly 4 --keep-monthly 6 noch echten Spielraum. Ein größerer Bestand, mehr Quellmaschinen oder ein längeres Aufbewahrungsfenster treiben dich zu Pros 120 GB oder stattdessen dazu, über zusätzlichen Speicher zu deinem VPS hinzufügen Speicherplatz zu ergänzen — das wird nach der Bestellung eingerichtet, nicht schon beim Checkout ausgewählt.

Restoring, which is the only test that countsWiederherstellen, der einzige Test, der zählt

A backup nobody has restored is a theory.Ein Backup, das niemand wiederhergestellt hat, ist eine Theorie.

restic snapshots
restic restore latest --target /tmp/restore-test

--target is mandatory and deliberately never defaults to overwriting the original paths — restic will not silently clobber /srv/data in place. Restore to a scratch directory, diff what came back against what you expect, and only then restore over a real path if that is genuinely what you need:--target ist Pflicht und weicht absichtlich niemals standardmäßig auf ein Überschreiben der ursprünglichen Pfade aus — restic wird /srv/data nicht stillschweigend an Ort und Stelle überschreiben. Stelle in ein Scratch-Verzeichnis wieder her, diffe, was zurückkommt, gegen das, was du erwartest, und stelle erst dann über einen echten Pfad wieder her, wenn das wirklich das ist, was du brauchst:

restic restore latest --target / --include /srv/data

--include narrows a full-tree restore to one subtree, which is almost always what an actual incident calls for rather than putting everything back at once.--include grenzt eine vollständige Baum-Wiederherstellung auf einen Teilbaum ein, was fast immer das ist, was ein echter Vorfall erfordert, statt alles auf einmal zurückzuspielen.

The append-only caveat, honestlyDie Append-Only-Einschränkung, ehrlich gesagt

This setup has one real weakness: the restic account's SSH key, if a compromised client leaks it, can delete or overwrite snapshots on the target just as freely as it can write new ones. Nothing about ChrootDirectory or ForceCommand internal-sftp stops that, because from the target's point of view a delete request signed with that key is indistinguishable from a legitimate forget --prune. For a single personal machine backing up to its own target, that risk is usually acceptable — the attacker already has to compromise the one machine you are protecting. If it is not acceptable for your situation, restic's own rest-server supports a genuine append-only mode, where the server refuses delete and overwrite requests regardless of what the client asks for, and pruning requires an operator to restart the server without --append-only — a server-side maintenance step, not something the backup client's own credential can trigger. That is a real next step, not a small tweak to what is set up here — it trades the plain-sshd simplicity above for running and maintaining another service.Dieses Setup hat eine echte Schwäche: Der SSH-Key des restic-Kontos kann, falls ein kompromittierter Client ihn preisgibt, Snapshots auf dem Ziel genauso frei löschen oder überschreiben, wie er neue schreiben kann. Weder ChrootDirectory noch ForceCommand internal-sftp verhindern das, denn aus Sicht des Ziels ist eine mit diesem Key signierte Löschanfrage nicht von einem legitimen forget --prune zu unterscheiden. Für eine einzelne private Maschine, die auf ihr eigenes Ziel sichert, ist dieses Risiko meist akzeptabel — der Angreifer muss dafür ohnehin schon genau die eine Maschine kompromittiert haben, die du schützt. Ist das für deine Situation nicht akzeptabel, unterstützt restics eigener rest-server einen echten Append-Only-Modus, in dem der Server Lösch- und Überschreibanfragen unabhängig davon ablehnt, was der Client verlangt, und Pruning erfordert, dass ein Operator den Server ohne --append-only neu startet — ein serverseitiger Wartungsschritt, den die Zugangsdaten des Backup-Clients selbst nicht auslösen können. Das ist ein echter nächster Schritt, keine kleine Anpassung an dem, was hier eingerichtet ist — er tauscht die Einfachheit des reinen sshd oben gegen den Betrieb und die Pflege eines weiteren Dienstes.

On overnight.hostBei overnight.host

Full disclosure: this is what we sell. Standard (2 vCPU / 4 GiB / 80 GB) holds a modest set of deduplicated, compressed repositories comfortably; a larger source tree or a longer retention policy is a reason to move to Pro or add storage, not more RAM.Zur vollen Transparenz: Das ist, was wir verkaufen. Standard (2 vCPU / 4 GiB / 80 GB) hält einen bescheidenen Satz deduplizierter, komprimierter Repositories bequem; ein größerer Quellbaum oder eine längere Aufbewahrungsrichtlinie ist ein Grund, zu Pro zu wechseln oder Speicherplatz hinzuzufügen — nicht mehr RAM.

Linux KVM VPS — EUR 4.99 to EUR 59.99 a month, on our own single-tenant bare metal in Dallas, TX and Charlotte, NC. Full hardware virtualisation (KVM), your own kernel, full root. Six tiers, vps-starter to vps-ultra. Starter is 1 vCPU, 1 GiB RAM, 25 GB disk.Linux-KVM-VPS — 4,99 bis 59,99 EUR im Monat, auf unserer eigenen Single-Tenant-Bare-Metal-Hardware in Dallas, TX und Charlotte, NC. Vollständige Hardware-Virtualisierung (KVM), eigener Kernel, volles Root. Sechs Tarife, vps-starter bis vps-ultra. Starter hat 1 vCPU, 1 GiB RAM, 25 GB Speicher.

You order in the shop, pay by card (Stripe) or SEPA bank transfer, and your login details are e-mailed to you once the service is set up. Support is e-mail, run by one person, with no guaranteed response time. All prices are final totals under the German small-business rule (§19 UStG); no VAT is added or shown.Du bestellst im Shop, zahlst per Karte (Stripe) oder SEPA-Überweisung, und deine Zugangsdaten werden dir per E-Mail zugeschickt, sobald der Dienst eingerichtet ist. Support läuft per E-Mail, von einer einzelnen Person betrieben, ohne garantierte Reaktionszeit. Alle Preise sind Endpreise. Gemäß § 19 UStG wird keine Umsatzsteuer ausgewiesen.

Order vps-standard → · Linux KVM VPS overviewvps-standard bestellen → · Übersicht Linux-KVM-VPS

Written by the person who runs overnight.host: a small, honest hosting company on dedicated bare metal — Linux VPS, game servers, web hosting. Live status at up.overnight.host.Geschrieben von der Person, die overnight.host betreibt: ein kleines, ehrliches Hosting-Unternehmen auf dedizierter Bare-Metal-Hardware — Linux-VPS, Gameserver, Webhosting. Live-Status unter up.overnight.host.

Technical guidance is informational. Plans, specifications and final prices are listed in the shop and can be ordered directly; VPS, game server, web hosting, one-click app and automation plans are provisioned automatically after payment. Custom configurations are still arranged by e-mail.Technische Hinweise dienen der Information. Pläne, Spezifikationen und Endpreise stehen im Shop und können direkt bestellt werden; VPS-, Gameserver-, Webhosting-, One-Click-App- und Automatisierungs-Pläne werden nach der Zahlung automatisch bereitgestellt. Sonderkonfigurationen werden weiterhin per E-Mail vereinbart.

FAQFAQ

Does the target VPS need restic installed at all?Braucht der Ziel-VPS überhaupt restic installiert?

No. The target only needs sshd and the chrooted account described above; restic itself only has to exist on whichever machine is being backed up. The target's job is to hold bytes, not to run backup software.Nein. Das Ziel braucht nur sshd und das oben beschriebene gechrootete Konto; restic selbst muss nur auf der Maschine existieren, die gesichert wird. Die Aufgabe des Ziels ist es, Bytes zu halten, nicht Backup-Software auszuführen.

Why chroot to the home directory instead of straight to the repos folder?Warum ins Home-Verzeichnis chrooten statt direkt in den repos-Ordner?

Because ChrootDirectory requires the chroot root, and everything above it, to be owned by root and not writable by anyone but root — a folder the restic user needs to write into can never satisfy that. Chrooting to /home/restic (root-owned) and making repos a writable subdirectory inside it satisfies both requirements at once.Weil ChrootDirectory verlangt, dass die Chroot-Wurzel und alles darüber root gehören und für niemand außer root beschreibbar sind — ein Ordner, in den der Nutzer restic schreiben muss, kann das nie erfüllen. Nach /home/restic (root-eigen) zu chrooten und repos darin zu einem beschreibbaren Unterverzeichnis zu machen, erfüllt beide Anforderungen gleichzeitig.

Do I need a dedicated IPv4 or an extra forwarded port for this?Brauche ich dafür eine dedizierte IPv4 oder einen zusätzlichen weitergeleiteten Port?

No. SFTP runs as a subsystem of the same sshd that already answers on your VPS's dedicated SSH port, so the connection needs nothing beyond what already works for a normal SSH login.Nein. SFTP läuft als Subsystem desselben sshd, der bereits auf dem dedizierten SSH-Port deines VPS antwortet, sodass die Verbindung nichts außer dem braucht, was für einen normalen SSH-Login ohnehin schon funktioniert.

What actually decides which tier to put the target on?Was entscheidet eigentlich, welchen Tarif das Ziel bekommt?

Disk, almost entirely. RAM and CPU barely register because the client does the encryption and deduplication work, not the target. Size by your source data's uncompressed volume and how long a retention policy you want to keep, remembering that restic's deduplication and compression usually keep the repository well under a naive per-snapshot sum.Fast ausschließlich der Speicherplatz. RAM und CPU fallen kaum ins Gewicht, weil der Client die Verschlüsselungs- und Deduplizierungsarbeit übernimmt, nicht das Ziel. Dimensioniere nach dem unkomprimierten Volumen deiner Quelldaten und danach, wie lange du eine Aufbewahrungsrichtlinie einhalten willst, und denk daran, dass restics Deduplizierung und Kompression das Repository meist deutlich unter einer naiven Summe pro Snapshot halten.

What happens if I lose the repository password?Was passiert, wenn ich das Repository-Passwort verliere?

The repository becomes permanently unreadable — restic's encryption has no recovery mechanism and no back door, by design. Keep the password file backed up somewhere other than only the one client machine that normally reads it, and never rely on memory alone.Das Repository wird dauerhaft unlesbar — restics Verschlüsselung hat absichtlich keinen Wiederherstellungsmechanismus und keine Hintertür. Sichere die Passwortdatei irgendwo außer nur auf der einen Client-Maschine, die sie normalerweise liest, und verlass dich niemals allein auf dein Gedächtnis.

Ready to order?Bereit zu bestellen?

Prices are final totals; no VAT is shown (§19 UStG). Need something the shop does not list? Email us for a written offer.Alle Preise sind Endpreise ohne ausgewiesene USt. (§19 UStG). Du brauchst etwas, das nicht im Shop steht? Schreib uns für ein schriftliches Angebot.

Order now →Jetzt bestellen → Request a custom configIndividuelle Konfiguration anfragen