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 comment synchroniser automatiquement le contenu d’un dossier sur une Machine A vers une Machine B avec :
-
Versioning : daily / weekly / monthly
-
Rotation : suppression automatique des anciennes versions
-
Connexion SSH sans mot de passe
Exemple : copier /srv/Files/
de Machine 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 -f ~/.ssh/shuttle_key -C "backup"
-
Copier la clé publique sur Machine B :
ssh-copy-id -i ~/.ssh/shuttle_key root@IP_MACHINE_B
-
Tester la connexion :
ssh -i ~/.ssh/shuttle_key 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 que les dossiers parents existent pour créer les sous-dossiers datés.
-
Sur Machine B, crée les dossiers :
ssh -i ~/.ssh/shuttle_key root@IP_MACHINE_B "mkdir -p /srv/Backup/Shuttle/daily /srv/Backup/Shuttle/weekly /srv/Backup/Shuttle/monthly"
5️⃣ Etape 3 : Script de backup automatisé
Crée un fichier /home/scripts/backup/backup_rsync_to_alphavps.sh
sur Machine A :
#!/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 -i "$SSH_KEY" root@IP_MACHINE_B \
"mkdir -p /srv/Backup/Shuttle/daily /srv/Backup/Shuttle/weekly /srv/Backup/Shuttle/monthly"
}
backup() {
local TYPE=$1
local DEST_DIR="$DEST/$TYPE/$2"
echo "Backup $TYPE vers $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=$(/usr/bin/ssh -i "$SSH_KEY" root@IP_MACHINE_B "ls -1 $PATH 2>/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
IP_MACHINE_B
par l’IP réelle de la machine B. -
Vérifie que le chemin de la clé SSH correspond à celui généré (
~/.ssh/shuttle_key
). -
Le script supprime automatiquement les versions dépassant 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
-
Vérifie que les dossiers datés sont créés sur Machine B.
-
Aucun mot de passe ne doit être demandé.
8️⃣ Etape 6 : Automatisation avec cron
-
Exemple : lancer le script tous les jours à 3h :
0 3 * * * /bin/bash /home/scripts/backup/backup_rsync_to_alphavps.sh
-
Avec cette configuration :
-
Backup quotidien →
daily/YYYY-MM-DD
-
Backup hebdo →
weekly/YYYY-WW
-
Backup mensuel →
monthly/YYYY-MM
-
Rotation automatique des anciennes versions
-
✅ Résultat :
-
Copie incrémentielle avec rsync
-
Versioning daily/weekly/monthly
-
Rotation automatique
-
Script robuste pour cron, sans accents ni caracteres spéciaux
-
Connexion SSH sécurisée et sans mot de passe
No comments to display
No comments to display