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 :
-
1Versioning :
Générerdailyune/paireweeklyde/clésmonthly -
Rotation : suppression automatique des anciennes versions
-
Connexion SSH
sur la Machine AOn crée une paire de clés (privée/publique) qui permettra à la Machine A de se connecter à la Machine Bsans mot depasse.passeCommande
Étape
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
-
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 appuiesEntrée→ les fichiers sont créés dans le chemin indiqué entre parenthèses (par défaut~/.ssh/id_rsaet~/.ssh/id_rsa.pub).Si tu entres juste un nom (ex.ma-cle) → les fichiers seront créésdans le dossier courant(./ma-cleet./ma-cle.pub).Si tu donnes un chemin complet (~/.ssh/serveurX) → ils seront créés exactement là (~/.ssh/serveurXet~/.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 :
-
clé privée →~/.ssh/machineB(à garder secrète, chmod 600). 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
-
la-iTester~/.ssh/machineB.pub→connexionprécise explicitement quelle clé publique copier (important si tu en as plusieurs).: user@100.100.10.100→ utilisateur et IP/nom de la Machine B.Cette commande va :ouvrir une connexion SSH (tu devras saisir ton mot de passeune dernière fois)créer~/.ssh/authorized_keyssi besoinajouter 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
→besoinmodequearchiveles(préservedossierspermissions,parentsliens,existentetc.).pour créer les sous-dossiers datés. -
Sur-v→Machineverbose,B,affichecrée lesfichiersdossierstransfé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é
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 :
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→partousl’IPlesréelledimanchesde la machine B. -
Vérifie que le chemin de la clé SSH correspond à
2h.celui généré (~/.ssh/shuttle_key
). -
Le
cheminscript
supprime/srv/path/to/folder/→automatiquementsourcelessurversionsMachinedépassantA.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érifiecheminque
lesuser@100.100.10.100:/srv/Folder/→dossiersdestinationdaté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 lestâchesjourscronàactives3h :
crontab0 -l3 * * * /bin/bash /home/scripts/backup/backup_rsync_to_alphavps.sh
-
VérifierAveclescettelogs (/var/log/syslogoujournalctl -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 savoiroù la clé est enregistréelors dessh-keygen.Utiliser-iavecssh-copy-idsi tu as plusieurs clés.Vérifier les permissionsconfiguration :-
Backup quotidien →~/.sshchmod 700daily/YYYY-MM-DD -
cléBackupprivéehebdo →chmod 600weekly/YYYY-WW -
cléBackuppubliquemensuel →chmod 644monthly/YYYY-MM -
Rotationauthorized_keyssurautomatiqueMachinedesBanciennes→
versionschmod 600
-
Toujours tester manuellementrsyncavant de l’ajouter àcron.
👉✅ AvecRésultat cette:
-
MachineCopie
Aincrémentiellesynchroniseraavecautomatiquementrsyncson -
versVersioning
ladaily/weekly/monthlyMachine -
chaqueRotation
semaine,automatiquede -
Script robuste pour cron, sans accents ni caracteres spéciaux
-
Connexion SSH sécurisée et sans mot de
passe.passe