Relayium

Sauvegarder des fichiers sur son propre serveur via SSH avec la CLI Relayium

Dernière mise à jour: 2026-09-01

Si vous avez déjà un accès SSH à une machine — un VPS, un serveur personnel, un NAS, un poste de travail —, vous pouvez y sauvegarder des fichiers avec la CLI Relayium sans mettre en place un service de synchronisation ni de compte. Le transfert passe par votre connexion SSH existante, si bien que les octets vont directement à votre serveur et ne transitent jamais par Relayium.

Ce guide couvre le push et le pull de répertoires, ce que la vérification d'intégrité couvre et ne couvre pas, pourquoi push refuse de s'exécuter deux fois vers la même destination, et comment le planifier avec cron.

Avant de commencer

Tout ci-dessous passe par la CLI relayium, alors installez-la d'abord si ce n'est pas fait. Sous macOS ou Linux, une commande place un binaire précompilé dans votre PATH :

curl -fsSL https://relayium.com/install.sh | sh
  • Vous préférez choisir le fichier vous-même, ou sous Windows ? Récupérez un binaire depuis la page des releases — relayium.com/cli liste toutes les options (avec Go, go build ./cmd/relayium).
  • relayium --version confirme l'installation. Sans cela, les commandes ci-dessous affichent seulement « command not found ».

Pousser (push) un répertoire vers votre serveur

Ce qu'il vous faut

  • L'accès SSH que vous utilisez déjà. ssh user@your-server true doit revenir en silence — push réutilise exactement cette connexion et ne configure rien de son côté.
  • Une destination inscriptible sur le serveur. Le répertoire parent du chemin de destination doit exister et être inscriptible par cet utilisateur SSH.
  • Éventuellement relayium sur le serveur, car c'est lui qui apporte le contrôle de collision en amont et le SHA-256 par fichier. Sans lui, push fonctionne quand même, via un simple flux tar qui ne vérifie rien.
  • Aucun compte Relayium et aucun démon d'un côté ou de l'autre. Rien ici ne parle aux serveurs de Relayium.

push prend une ou plusieurs sources et une destination de style scp. Relayium se connecte en SSH avec vos clés et votre configuration habituelles, puis diffuse les fichiers vers le répertoire de destination :

  1. Confirmez l'accès SSH que push va réutiliser. Un retour silencieux signifie que vos clés, votre alias d'hôte et votre port sont déjà bons.

    ssh user@your-server true
  2. Déterminez le protocole que vous obtiendrez. Un chemin annonce le protocole natif — contrôle de collision en amont et SHA-256 par fichier ; aucune sortie annonce le flux tar, qui ne vérifie rien fichier par fichier.

    ssh user@your-server command -v relayium
  3. Poussez le répertoire. La destination est de style scp, et la barre oblique finale signifie « à l'intérieur de ce répertoire ».

    relayium push ./photos user@your-server:backups/
  4. Indiquez la clé ou le port pour cette seule commande si votre configuration ssh ne couvre pas encore cet hôte.

    relayium push -i ~/.ssh/id_ed25519 -p 2222 ./photos user@your-server:backups/
  5. Vérifiez ce qui est arrivé. push ./photos recrée photos/ sous la destination, le nom du dossier suit donc.

    ssh user@your-server ls backups/photos

À quoi ressemble une exécution réussie

Sur le protocole natif, push affiche une ligne par fichier terminé et se termine par 0. Face à un serveur nu, il affiche une seule ligne de résumé — c'est la voie tar, et c'est aussi une réussite.

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)
  • Il réutilise votre ~/.ssh/config, donc les alias d'hôtes, les clés et les ports déjà configurés fonctionnent tels quels.
  • Si relayium est installé sur le serveur, il utilise le protocole natif : tout le lot est contrôlé pour les collisions avant le moindre octet, et chaque fichier transféré est vérifié par SHA-256 puis mis en place.
  • Sinon, il bascule sur l'envoi d'un flux tar par tube vers la machine distante, si bien qu'un serveur nu sans relayium fonctionne quand même.

Récupérer les fichiers avec pull

La restauration est la même commande en sens inverse : indiquez une source distante et un répertoire de destination local. C'est ainsi que vous récupérez une sauvegarde, ou que vous synchronisez la sortie d'un serveur vers votre portable :

relayium pull user@your-server:backups/ ./restore
  • Contrairement à push, pull a toujours besoin de relayium déjà installé côté distant — il n'a pas de repli tar, installez-le donc là-bas d'abord s'il manque.

L'intégrité est intégrée d'office — la reprise, non

Quand relayium est présent des deux côtés, chaque fichier que push transfère est vérifié de bout en bout par un hachage SHA-256 et placé en zone d'attente avant d'être installé — ce qui arrive sur le serveur est identique octet pour octet à ce que vous avez envoyé. Cela, c'est réel, et c'est la raison d'installer relayium sur la destination.

Ce que push ne fait pas, c'est reprendre. Les fichiers sont installés un à un au fur et à mesure, donc une coupure en cours de route laisse en place ceux qui sont déjà arrivés — et comme ils existent désormais, relancer le même push est refusé par le contrôle de collision au lieu de continuer. Poussez explicitement les chemins manquants, ou utilisez relayium sync, le mode qui saute ce qui correspond déjà et qui, lui, poursuit un fichier partiel lors d'une exécution ultérieure.

--no-resume est accepté par push et pull et n'y fait rien. Il est réel sur un processus serve à l'écoute qui reçoit un sync — c'est le seul endroit où un fichier partiel peut exister.

  • Ni push ni pull ne reprend, dans aucun des deux protocoles. Utilisez sync pour un répertoire que vous vous attendez à voir interrompu ; le repli tar, lui, ne reprend rien et ne vérifie rien fichier par fichier.
  • La vérification SHA-256 s'exécute automatiquement ; une divergence est signalée et le fichier est marqué en échec.

Le planifier avec cron

Planifiez sync, pas push. push refuse une destination qui existe déjà, donc un push nocturne vers le même répertoire réussit une fois et est refusé toutes les nuits suivantes. sync est le mode conçu pour une exécution répétée : il saute les fichiers dont la taille et la date de modification n'ont pas changé, n'envoie que ce qui a changé, et poursuit un fichier partiel laissé par une exécution interrompue. C'est une commande unique et non interactive qui utilise vos clés SSH, donc elle s'intègre directement dans cron. Pointez-la vers une clé sans phrase de passe (ou vers un agent), et journalisez la sortie pour repérer les échecs :

# sauvegarde chaque nuit à 2 h — à ajouter dans votre crontab (crontab -e)
0 2 * * * relayium sync -i ~/.ssh/backup_key ~/documents user@your-server:backups/ >> ~/relayium-backup.log 2>&1
  • Un sync nocturne interrompu continue simplement la nuit suivante : ce qui correspond déjà est sauté, et un fichier partiel est poursuivi plutôt que repris de zéro.
  • La commande se termine avec un code non nul si un fichier échoue à sa vérification d'intégrité, si bien que la notification par e-mail en cas d'échec de cron détecte les problèmes.

Quand une sauvegarde n'arrive pas

Une sauvegarde planifiée échoue par nature en silence, puisque personne ne regarde le terminal. Ces quatre cas couvrent presque tout, et chacun se tranche par une commande que vous pouvez lancer tout de suite.

Symptôme, vérification, correction

La tâche cron reste bloquée, ou le journal s'arrête sur une demande de mot de passe.
ssh -i ~/.ssh/backup_key -o BatchMode=yes user@your-server true
# Permission denied (publickey).

BatchMode=yes refuse de demander quoi que ce soit et échoue, ce qui transforme un blocage muet en cette ligne. Ajoutez la partie publique de cette clé au fichier ~/.ssh/authorized_keys du serveur, ou pointez la tâche sur une clé que l'agent détient déjà.

La ligne de crontab s'exécute mais le journal reste vide.
command -v relayium
# /usr/local/bin/relayium

cron tourne avec un PATH minimal qui n'inclut généralement pas /usr/local/bin, donc la ligne échoue avant même que relayium démarre. Écrivez dans l'entrée crontab le chemin absolu que la vérification vient d'afficher, et gardez la redirection >> ~/relayium-backup.log 2>&1 pour que la prochaine panne soit visible.

Un sync nocturne interrompu repart de zéro à l'exécution suivante.
ssh user@your-server command -v relayium
# (n'affiche rien)

relayium manque en face. sync n'a aucun repli et ne démarre donc pas du tout, et push retombe sur le flux tar, qui ne vérifie rien et renvoie toujours chaque fichier en entier. Installez-le sur le serveur. Seul sync poursuit un fichier partiel à l'exécution suivante : ni push ni pull ne reprend, dans aucun des deux protocoles. Si vous utilisez déjà sync, vérifiez aussi que vous ne passez pas --no-resume, qui désactive volontairement cette reprise côté processus à l'écoute.

« N file(s) could not be verified or saved » et un code de sortie non nul.
relayium push ./photos user@your-server:backups/
# 1 file(s) could not be verified or saved: [photos/IMG_0413.jpg]
# exit status 1
echo $?
# 1

Soit le SHA-256 calculé à l'arrivée ne correspondait pas à celui envoyé, soit relayium sur le serveur n'a pas pu enregistrer ou installer le fichier (plus d'espace libre, pas de permission, ou un chemin de destination où il ne peut pas écrire) ; le message ne dit pas lequel. La première ligne est affichée par relayium sur le serveur et relayée par SSH, et exit status 1 est le code de sortie de ce processus distant. Dans les deux cas, le protocole natif place chaque fichier en zone d'attente puis ne l'installe que si le hachage concorde et que l'enregistrement a réussi — ce transfert n'a donc pas installé ce chemin. Cela ne prouve pas qu'il n'y a rien à destination (un autre programme a pu le créer entre-temps) : ne supprimez pas un fichier déjà présent sur le récepteur à cause de ce seul message. Si d'autres fichiers de ce lot sont déjà arrivés, relancer tout le lot est refusé par le contrôle de collision : relancez donc le push sur ce seul chemin, vers la même destination prévue. S'il échoue de nouveau, ce n'est pas une erreur de transit ponctuelle : vérifiez l'espace libre, les permissions et le chemin de destination sur le serveur, et regardez le fichier source (quelque chose y écrit-il pendant qu'il est lu).

Questions fréquentes

Les fichiers passent-ils par les serveurs de Relayium ?

Non. push et pull s'exécutent entièrement sur votre propre connexion SSH. Les serveurs de Relayium ne sont jamais impliqués et aucun compte n'est nécessaire.

Le serveur a-t-il besoin de relayium installé ?

Cela dépend du sens. Pour push, c'est optionnel : avec relayium côté distant, vous obtenez le protocole natif — un contrôle de collision en amont et des vérifications SHA-256 par fichier sur tout ce qu'il transfère — et sans cela, push bascule sur un flux tar via SSH, qui fonctionne toujours mais ne vérifie rien fichier par fichier. Pour pull, c'est requis : pull a toujours besoin de relayium côté distant (aucun repli tar), installez-le donc là-bas au préalable.

Comment choisit-il quelle clé SSH et quel port utiliser ?

Il lit votre ~/.ssh/config comme le fait ssh, si bien que les alias d'hôtes, les clés et les ports sont repris automatiquement. Vous pouvez aussi les surcharger par commande avec -i pour le fichier d'identité et -p pour le port.

Est-ce plus rapide que rsync ?

Pour pousser vers votre propre serveur, c'est dans le même ordre de grandeur que rsync via SSH ; l'objectif n'est pas de battre rsync mais de vous offrir un seul outil qui gère aussi les transferts entre réseaux et de serveur à serveur, avec la même vérification d'intégrité fichier par fichier.

Sauvegardez votre prochain répertoire de la manière la plus directe — via votre propre SSH, avec l'intégrité vérifiée fichier par fichier, et gratuit.

Obtenir la CLI

À lire ensuite