Dateien über SSH auf dem eigenen Server sichern mit der Relayium CLI
Zuletzt aktualisiert: 2026-09-01
Wenn du bereits SSH-Zugriff auf eine Maschine hast — einen VPS, einen Heimserver, ein NAS, eine Workstation —, kannst du Dateien mit der Relayium CLI dorthin sichern, ohne einen Sync-Dienst einzurichten oder ein Konto zu brauchen. Die Übertragung läuft über deine bestehende SSH-Verbindung, sodass die Bytes direkt zu deinem Server gehen und Relayium nie passieren.
Diese Anleitung behandelt das push und pull von Verzeichnissen, was die Integritätsprüfung abdeckt und was nicht, warum push ein zweites Mal in dasselbe Ziel verweigert, und wie du das Ganze mit cron nach Zeitplan laufen lässt.
Bevor du loslegst
Alles unten ist die relayium-CLI, installiere sie also zuerst, falls noch nicht geschehen. Unter macOS oder Linux legt ein Befehl ein vorgebautes Binary in deinen PATH:
curl -fsSL https://relayium.com/install.sh | sh
- Willst du die Datei lieber selbst wählen, oder unter Windows? Hol dir ein Binary von der Releases-Seite — relayium.com/cli listet alle Installationswege (mit Go auch go build ./cmd/relayium).
- relayium --version bestätigt die Installation. Ohne das geben die Befehle unten nur „command not found“ aus.
Ein Verzeichnis auf deinen Server pushen
Was du brauchst
- SSH-Zugang, den du ohnehin nutzt. ssh user@your-server true muss stumm zurückkehren — push verwendet genau diese Verbindung wieder und richtet nichts Eigenes ein.
- Ein beschreibbares Ziel auf dem Server. Das übergeordnete Verzeichnis des Zielpfads muss existieren und für diesen SSH-Benutzer beschreibbar sein.
- Optional relayium auf dem Server — das ist es, was die Kollisionsprüfung vorab und dateiweises SHA-256 einbringt. Ohne läuft push trotzdem, über einen schlichten tar-Stream, der nichts prüft.
- Kein Relayium-Konto und kein Daemon auf einer der beiden Seiten. Nichts davon spricht mit den Servern von Relayium.
push nimmt eine oder mehrere Quellen und ein Ziel im scp-Stil entgegen. Relayium verbindet sich per SSH mit deinen üblichen Schlüsseln und deiner Konfiguration und streamt die Dateien dann in das Zielverzeichnis:
Bestätige den SSH-Zugang, den push wiederverwendet. Kehrt er stumm zurück, stimmen Schlüssel, Host-Alias und Port bereits.
ssh user@your-server trueFinde heraus, welches Protokoll du bekommst. Ein Pfad heißt natives Protokoll — Kollisionsprüfung vorab und dateiweises SHA-256; keine Ausgabe heißt tar-Stream, der je Datei nichts prüft.
ssh user@your-server command -v relayiumPush das Verzeichnis. Das Ziel steht im scp-Stil, und der Schrägstrich am Ende heißt „in dieses Verzeichnis hinein“.
relayium push ./photos user@your-server:backups/Gib Schlüssel oder Port nur für diesen einen Befehl an, falls deine ssh-Konfiguration den Host noch nicht abdeckt.
relayium push -i ~/.ssh/id_ed25519 -p 2222 ./photos user@your-server:backups/Prüf, was gelandet ist. push ./photos legt photos/ unter dem Ziel wieder an, der Ordnername kommt also mit.
ssh user@your-server ls backups/photos
So sieht ein erfolgreicher Lauf aus
Auf dem nativen Protokoll gibt push eine Zeile pro fertiger Datei aus und endet mit 0. Gegen einen nackten Server erscheint stattdessen eine einzelne Zusammenfassungszeile — das ist der tar-Weg, und auch das ist Erfolg.
relayium push ./photos user@your-server:backups/
photos/IMG_0413.jpg (2314518 bytes)
photos/IMG_0414.jpg (1998233 bytes)
# against a server with no relayium installed, one summary line instead:
sent 2 file(s) (zero-dependency mode)- Es verwendet deine ~/.ssh/config wieder, sodass bereits eingerichtete Host-Aliase, Schlüssel und Ports einfach funktionieren.
- Ist relayium auf dem Server installiert, nutzt es das native Protokoll: Der ganze Stapel wird auf Kollisionen geprüft, bevor ein Byte fließt, und jede übertragene Datei wird per SHA-256 verifiziert und erst danach an ihren Platz gelegt.
- Ist es das nicht, weicht es darauf aus, einen tar-Stream in die Gegenstelle zu pipen, sodass auch ein nackter Server ohne relayium funktioniert.
Dateien mit pull zurückholen
Das Wiederherstellen ist derselbe Befehl umgekehrt: Gib eine Remote-Quelle und ein lokales Zielverzeichnis an. So stellst du ein Backup wieder her oder synchronisierst die Ausgabe eines Servers auf deinen Laptop herunter:
relayium pull user@your-server:backups/ ./restore
- Anders als push braucht pull immer bereits installiertes relayium auf der Gegenseite — es gibt keinen tar-Fallback, installiere es also dort zuerst, falls es fehlt.
Integrität ist eingebaut — Fortsetzen nicht
Ist relayium auf beiden Seiten vorhanden, wird jede Datei, die push überträgt, Ende-zu-Ende mit einem SHA-256-Hash geprüft und erst nach der Prüfung an ihren Platz gelegt — was auf dem Server landet, entspricht Byte für Byte dem, was du gesendet hast. So weit ist das real, und es ist der Grund, relayium auf dem Ziel zu installieren.
Was push nicht tut, ist fortsetzen. Dateien werden einzeln installiert, sobald sie durch sind, sodass ein Abbruch mittendrin die bereits gelandeten Dateien liegen lässt — und weil sie nun existieren, wird derselbe push beim nächsten Versuch von der Kollisionsprüfung abgelehnt statt fortgesetzt. Push die fehlenden Pfade einzeln, oder nimm relayium sync: das ist der Modus, der überspringt, was schon passt, und eine Teildatei in einem späteren Lauf tatsächlich weiterführt.
--no-resume wird von push und pull zwar angenommen, tut dort aber nichts. Real ist es auf einem serve-Listener, der ein sync empfängt — dort kann überhaupt erst eine Teildatei liegen.
- Weder push noch pull setzt fort, in keinem der beiden Protokolle. Nimm sync für ein Verzeichnis, bei dem du mit Unterbrechungen rechnest. Der tar-Fallback setzt weder fort noch prüft er je Datei etwas.
- Die SHA-256-Prüfung läuft automatisch; bei einer Abweichung wird das gemeldet und die Datei als fehlgeschlagen markiert.
Per cron nach Zeitplan ausführen
Plane sync ein, nicht push. push verweigert ein Ziel, das schon existiert, also gelingt ein nächtlicher push in dasselbe Verzeichnis genau einmal und wird danach jede Nacht abgelehnt. sync ist der Modus für den wiederholten Lauf: Er überspringt Dateien, deren Größe und Änderungszeit gleich geblieben sind, sendet nur das Geänderte und führt eine Teildatei aus einem abgebrochenen Lauf weiter. Es ist ein einzelner, nicht-interaktiver Befehl, der deine SSH-Schlüssel nutzt, und passt damit direkt in cron. Verweise auf einen Schlüssel ohne Passphrase (oder einen Agent) und protokolliere die Ausgabe, damit du Fehlschläge siehst:
# jede Nacht um 2 Uhr sichern — in deine crontab eintragen (crontab -e)
0 2 * * * relayium sync -i ~/.ssh/backup_key ~/documents user@your-server:backups/ >> ~/relayium-backup.log 2>&1
- Ein unterbrochenes nächtliches sync läuft in der folgenden Nacht einfach weiter: Was schon passt, wird übersprungen, und eine Teildatei wird fortgeführt statt neu begonnen.
- Der Befehl endet mit einem Exit-Code ungleich null, wenn eine Datei ihre Integritätsprüfung nicht besteht, sodass crons Mail-bei-Fehlschlag das Problem auffängt.
Wenn ein Backup nicht ankommt
Ein geplantes Backup scheitert von Natur aus leise — niemand schaut aufs Terminal. Diese vier decken fast alles ab, und jedes wird von einem Befehl entschieden, den du sofort ausführen kannst.
Symptom, Prüfung, Lösung
- Der cron-Job hängt, oder das Log endet an einer Passwortabfrage.
ssh -i ~/.ssh/backup_key -o BatchMode=yes user@your-server true # Permission denied (publickey).BatchMode=yes fragt nicht nach, sondern scheitert — aus dem stillen Hängen wird diese eine Zeile. Trag den öffentlichen Teil dieses Schlüssels in ~/.ssh/authorized_keys auf dem Server ein, oder gib dem Job einen Schlüssel, den ein Agent bereits hält.
- Die crontab-Zeile läuft, aber das Log bleibt leer.
command -v relayium # /usr/local/bin/relayiumcron läuft mit einem minimalen PATH, in dem /usr/local/bin meist fehlt, also scheitert die Zeile, bevor relayium überhaupt startet. Schreib den eben ausgegebenen absoluten Pfad in den crontab-Eintrag und behalte die Umleitung >> ~/relayium-backup.log 2>&1, damit der nächste Fehler sichtbar ist.
- Ein abgebrochenes nächtliches sync fängt beim nächsten Lauf wieder bei null an.
ssh user@your-server command -v relayium # (gibt nichts aus)Auf der Gegenseite fehlt relayium. sync hat keinen Fallback und läuft dann gar nicht; push fällt auf den tar-Stream zurück, der nichts prüft und jede Datei immer vollständig überträgt. Installier es auf dem Server. Nur sync führt eine Teildatei im nächsten Lauf weiter — push und pull setzen in keinem der beiden Protokolle fort. Nutzt du bereits sync, prüf außerdem, dass du nicht --no-resume übergibst, das genau dieses Fortsetzen auf dem Listener abschaltet.
- „N file(s) could not be verified or saved“ und ein Exit-Code ungleich null.
relayium push ./photos user@your-server:backups/ # 1 file(s) could not be verified or saved: [photos/IMG_0413.jpg] # exit status 1 echo $? # 1Entweder stimmte der beim Eintreffen berechnete SHA-256 nicht mit dem gesendeten überein, oder relayium auf dem Server konnte die Datei nicht speichern oder installieren – kein freier Speicher, keine Berechtigung oder ein Zielpfad, in den es nicht schreiben kann; die Meldung sagt nicht, welcher Fall vorliegt. Die erste Zeile gibt relayium auf dem Server aus und SSH reicht sie weiter, und exit status 1 ist der Exit-Code dieses entfernten Prozesses. In beiden Fällen legt das native Protokoll jede Datei zuerst in einen Zwischenbereich und installiert sie nur, wenn der Hash passt und sie gespeichert werden konnte — diese Übertragung hat den Pfad also nicht installiert. Das beweist nicht, dass am Ziel nichts liegt (ein anderes Programm kann ihn inzwischen angelegt haben); lösch also keine Datei, die beim Empfänger schon existiert, nur wegen dieser Meldung. Wenn andere Dateien dieses Stapels bereits angekommen sind, lehnt die Kollisionsprüfung einen erneuten Versand des ganzen Stapels ab; wiederhol den push deshalb nur für genau diesen einen Pfad, zum selben vorgesehenen Ziel. Scheitert er erneut, ist es kein einmaliger Übertragungsfehler: Prüf freien Speicher, Berechtigungen und den Zielpfad auf dem Server, und sieh dir die Quelldatei an (schreibt etwas hinein, während sie gelesen wird).
Häufige Fragen
Laufen die Dateien über die Server von Relayium?
Nein. push und pull laufen vollständig über deine eigene SSH-Verbindung. Die Server von Relayium sind nie beteiligt, und du brauchst kein Konto.
Muss auf dem Server relayium installiert sein?
Das hängt von der Richtung ab. Bei push ist es optional: Mit relayium auf der Gegenseite bekommst du das native Protokoll — eine Kollisionsprüfung vorab und SHA-256-Prüfungen je Datei auf allem, was es überträgt —, und ohne das weicht push auf einen tar-Stream über SSH aus, der weiterhin funktioniert, je Datei aber nichts prüft. Bei pull ist es erforderlich: pull braucht immer relayium auf der Gegenseite (keinen tar-Fallback), installiere es dort also zuerst.
Wie wählt es aus, welchen SSH-Schlüssel und welchen Port es nutzt?
Es liest deine ~/.ssh/config genau wie ssh, sodass Host-Aliase, Schlüssel und Ports automatisch übernommen werden. Du kannst sie auch pro Befehl überschreiben, mit -i für die Identitätsdatei und -p für den Port.
Ist das schneller als rsync?
Beim Push auf den eigenen Server liegt es in etwa auf dem Niveau von rsync über SSH; der Punkt ist nicht, rsync zu schlagen, sondern dir ein einziges Werkzeug zu geben, das mit derselben dateiweisen Integritätsprüfung auch netzwerkübergreifende und Server-zu-Server-Übertragungen erledigt.
Sichere dein nächstes Verzeichnis auf dem direkten Weg — über deine eigene SSH-Verbindung, mit Integritätsprüfung je Datei und kostenlos.
CLI holen