Skip to main content

Automatiser la Synchronisation entre Deux Serveurs avec rsync et SSH AVEC VERSIONING

Voici un tuto complet, clair et corrigé, intégrant toutes les leçons tirées de ton expérience : pas d’accents, chemin de clef SSH précisé, création automatique des dossiers, rotation quotidienne/hebdo/mensuelle.


1️⃣ Objectif

Ce guide explique pas à pas comment synchroniser automatiquement le contenu d’un dossier entresur deuxune machines (Machine A → Machine B) en utilisant rsync viavers une connexionMachine sécuriséeB SSH.avec :


    Étape
  • 1

    Versioning : Générerdaily une/ paireweekly de/ clésmonthly

  • Rotation : suppression automatique des anciennes versions

  • Connexion SSH sur la Machine A

  • On crée une paire de clés (privée/publique) qui permettra à la Machine A de se connecter à la Machine B sans mot de passe.passe

    Commande

Exemple : copier /srv/Files/ de générationMachine A vers /srv/Backup/Shuttle/ sur Machine B.


2️⃣ Prérequis

  • Machine A et Machine B accessibles via SSH

  • Rsync installé sur Machine A et Machine B

  • Clé SSH configurée pour un accès sans mot de passe


3️⃣ Etape 1 : Generer une clé SSH sur Machine A

  1. Sur Machine A, genere une clé SSH (sans mot de passe pour l’automatisation) :

ssh-keygen -t rsa -b 4096 -C "votre_email@example.com"
  • -t rsa → type de clé RSA.

  • -b 4096 → longueur de clé (4096 bits, sécurisé).

  • -C → commentaire associé à la clé (souvent l’email).

Où sont créés les fichiers ?

  • Quand la commande te demande :

    Enter file in which to save the key (/home/user/.ssh/id_rsa):
    • Si tu appuies Entrée → les fichiers sont créés dans le chemin indiqué entre parenthèses (par défaut ~/.ssh/id_rsa et ~/.ssh/id_rsa.pub).

    • Si tu entres juste un nom (ex. ma-cle) → les fichiers seront créés dans le dossier courant (./ma-cle et ./ma-cle.pub).

    • Si tu donnes un chemin complet (~/.ssh/serveurX) → ils seront créés exactement là (~/.ssh/serveurX et ~/.ssh/serveurX.pub).

👉 Bonne pratique : indiquer directement un chemin clair, par exemple :

ssh-keygen -t rsa -b 4096 -C "votre_email@example.com" -f ~/.ssh/machineBshuttle_key -C "backup"

Tu auras alors :

    1. clé privée → ~/.ssh/machineB (à garder secrète, chmod 600).

    2. clé publique → ~/.ssh/machineB.pub (celle à partager).


Étape 2 : Copier la clé publique sur la Machine B

La clé publique doit être ajoutée dans le fichier ~/.ssh/authorized_keys de l’utilisateur cible sur la Machine B.
La commande la plus simple est :

ssh-copy-id -i ~/.ssh/machineB.pubshuttle_key user@100.100.10.100root@IP_MACHINE_B

Explications

    1. -iTester ~/.ssh/machineB.publa connexion précise explicitement quelle clé publique copier (important si tu en as plusieurs).:

    2. user@100.100.10.100 → utilisateur et IP/nom de la Machine B.

    3. Cette commande va :

      • ouvrir une connexion SSH (tu devras saisir ton mot de passe une dernière fois)

      • créer ~/.ssh/authorized_keys si besoin

      • ajouter la clé publique à ce fichier.

Après ça, la Machine A pourra se connecter sans mot de passe.

Vérifier la connexion

Teste immédiatement :

ssh -i ~/.ssh/machineBshuttle_key user@100.100.10.100

Si tout est correct, tu entres directement sans mot de passe.

👉 Si tu as plusieurs clés sur ta Machine A, il est recommandé de préciser laquelle utiliser, soit avec -i, soit en configurant ~/.ssh/config :

Host machineB
  HostName 100.100.10.100
  User user
  IdentityFile ~/.ssh/machineB
  IdentitiesOnly yes

Tu pourras ensuite faire simplement :

ssh machineB

Étape 3 : Programmer la synchronisation avec cron et rsync

rsync permet de synchroniser efficacement un dossier d’une machine vers une autre.

Test manuel avant tout

rsync -avz --progress /srv/path/to/folder/ user@100.100.10.100:/srv/Folder/root@IP_MACHINE_B
  • -Tu ne dois plus avoir de demande de mot de passe.


4️⃣ Etape 2 : Préparer les dossiers sur Machine B

  • Rsync a besoin modeque archiveles (préservedossiers permissions,parents liens,existent etc.).pour créer les sous-dossiers datés.

  • -vSur Machine verbose,B, affichecrée les fichiersdossiers transférés.

  • -z → compresse les données pendant le transfert.

  • --progress → montre l’avancement.:

⚠️

ssh Vérifie-i bien~/.ssh/shuttle_key queroot@IP_MACHINE_B la"mkdir commande-p fonctionne/srv/Backup/Shuttle/daily manuellement/srv/Backup/Shuttle/weekly avant/srv/Backup/Shuttle/monthly"

5️⃣ Etape 3 : Script de l’automatiser.

backup

Planificationautomatisé

avec

Crée un fichier cron/home/scripts/backup/backup_rsync_to_alphavps.sh

Ouvre l’éditeur de tâches planifiées sur la Machine A :

crontab#!/bin/bash
# Backup rsync avec rotation journaliere, hebdo, mensuelle
# Source : /srv/Files/ (Machine A)
# Destination : /srv/Backup/Shuttle/ (Machine B)

export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

SRC="/srv/Files/"
DEST="root@IP_MACHINE_B:/srv/Backup/Shuttle"
SSH_KEY="$HOME/.ssh/shuttle_key"

TODAY=$(date +%Y-%m-%d)
WEEK=$(date +%Y-%V)
MONTH=$(date +%Y-%m)

create_remote_dirs() {
    /usr/bin/ssh -e
i

Ajoute"$SSH_KEY" laroot@IP_MACHINE_B ligne\ suivante"mkdir pour-p exécuter/srv/Backup/Shuttle/daily la/srv/Backup/Shuttle/weekly synchro/srv/Backup/Shuttle/monthly" chaque} dimanchebackup() à{ 2hlocal duTYPE=$1 matinlocal :

DEST_DIR="$DEST/$TYPE/$2"
0echo 2"Backup *$TYPE *vers 0$DEST_DIR..."
    /usr/bin/rsync -avz -e "ssh -i $SSH_KEY" --delete "$SRC" "$DEST_DIR"
}

rotate() {
    local TYPE=$1
    local KEEP=$2
    local PATH="$DEST/$TYPE"

    VERSIONS=$(/srv/path/to/folder/usr/bin/ssh user@100.100.10.100:-i "$SSH_KEY" root@IP_MACHINE_B "ls -1 $PATH 2>/srv/Folder/dev/null | sort")
    COUNT=$(/usr/bin/echo "$VERSIONS" | /usr/bin/wc -l)
    if [ "$COUNT" -gt "$KEEP" ]; then
        REMOVE=$(/usr/bin/echo "$VERSIONS" | /usr/bin/head -n $(($COUNT - $KEEP)))
        for OLD in $REMOVE; do
            echo "Suppression ancienne version $TYPE : $OLD"
            /usr/bin/ssh -i "$SSH_KEY" root@IP_MACHINE_B "rm -rf $PATH/$OLD"
        done
    fi
}

# Création des dossiers parents si besoin
create_remote_dirs

# Backup quotidien
backup "daily" "$TODAY"

# Backup hebdomadaire (dimanche)
if [ "$(date +%u)" -eq 7 ]; then
    backup "weekly" "$WEEK"
fi

# Backup mensuel (1er du mois)
if [ "$(date +%d)" -eq 1 ]; then
    backup "monthly" "$MONTH"
fi

# Rotation : garder 7 derniers jours, 4 dernieres semaines, 3 derniers mois
rotate "daily" 7
rotate "weekly" 4
rotate "monthly" 3

echo "Backup termine."
  • Remplace 0 2 * * 0IP_MACHINE_B par tousl’IP lesréelle dimanchesde la machine B.

  • Vérifie que le chemin de la clé SSH correspond à 2h.celui généré (~/.ssh/shuttle_key).

  • Le cheminscript /srv/path/to/folder/supprime automatiquement sourceles surversions Machinedépassant A.le quota.


6️⃣ Etape 4 : Rendre le script exécutable

chmod +x /home/scripts/backup/backup_rsync_to_alphavps.sh

7️⃣ Etape 5 : Test manuel

/bin/bash /home/scripts/backup/backup_rsync_to_alphavps.sh
  • LeVérifie cheminque user@100.100.10.100:/srv/Folder/les dossiers destinationdatés sont créés sur Machine B.

  • Aucun mot de passe ne doit être demandé.


Étape8️⃣ 4Etape 6 : VérificationAutomatisation avec cron

  • ListerExemple : lancer le script tous les tâchesjours cronà actives3h :

crontab0 -l3 * * * /bin/bash /home/scripts/backup/backup_rsync_to_alphavps.sh
  • VérifierAvec lescette logs (/var/log/syslog ou journalctl -u cron) si la tâche ne tourne pas.

  • Tester à la main :

rsync -avz --progress /srv/path/to/folder/ user@100.100.10.100:/srv/Folder/

✅ Résumé des bonnes pratiques

  • Toujours savoir où la clé est enregistrée lors de ssh-keygen.

  • Utiliser -i avec ssh-copy-id si tu as plusieurs clés.

  • Vérifier les permissionsconfiguration :

    • ~/.sshBackup quotidienchmod 700daily/YYYY-MM-DD

    • cléBackup privéehebdochmod 600weekly/YYYY-WW

    • cléBackup publiquemensuelchmod 644monthly/YYYY-MM

    • authorized_keysRotation surautomatique Machinedes Banciennes chmod 600versions

  • Toujours tester manuellement rsync avant de l’ajouter à cron.


👉 AvecRésultat cette:

méthode,
    ta
  • Machine

    Copie Aincrémentielle synchroniseraavec automatiquementrsync

    son
  • dossier
  • vers

    Versioning ladaily/weekly/monthly

    Machine
  • B
  • chaque

    Rotation semaine,automatique

    de
  • manière
  • Script robuste pour cron, sans accents ni caracteres spéciaux

  • Connexion SSH sécurisée et sans mot de passe.passe