Sauvegarder avec rsync, ssh et cron

20/09/2015

Comment sauvegarder tout le répertoire /home de manière automatique, récurrente et sécurisée avec rsync, ssh et cron ?

Prérequis

S'étaler sur la configuration et les options des outils de base n'est pas l'objet de cette note. Il faut donc être en mesure de connaître un minimum rsync, ssh et cron ; et savoir générer une paire de clés ssh.

Éditer le fichier crontab de root


# crontab -e

Ajouter la commande suivante en adaptant :


@hourly if ! ps -A | grep rsync ; then rsync -rlptz --bwlimit=1m --timeout=60 --log-file=$HOME/.rsync.log --progress --stats --delete --force -e "ssh -p 2222 -i $HOME/.ssh/id_rsa -o StrictHostKeyChecking=no" /home root@rhost:/media/save/backups/$HOSTNAME/ ; fi

Quelques explications :


if ! ps -A | grep rsync

Permet d'exécuter la commande uniquement si aucune autre instance de rsync est en cours. Initialement prévu pour ne pas synchroniser la même chose sur deux instances si cela venait à durer plus d'une heure, cela permet également de ne pas surcharger le réseau si une instance utilisateur est en cours.


--bwlimit=1m

Limitation de l'utilisation de la bande passante à 1 MiB (mebibyte).


-e "ssh -p 2222 -i $HOME/.ssh/id_rsa -o StrictHostKeyChecking=no"

Utilisation d'un shell distant. Dans mon cas, connexion ssh sur le port 2222 en utilisant la clé id_rsa et en omettant la vérification de la clé hôte.

Les autres arguments sont assez classiques.

Au cas-où, penser aux pages de man :


$ man cron
$ man bash
$ man rsync
$ man ssh