Duplicity est un script Python pour automatiser une sauvegarde sélective, sécurisée et différentielle, utilisant l’algorithme de rsync.
Je l’utilise déjà pour faire une sauvegarde automatique sur une carte SD, toutes les cinq minutes, de mon travail, en plaçant une commande dans mon crontab.
Pour effectuer l’opération sur une machine distante à laquelle j’ai accès par SSH, je peux utiliser duplicity avec une copie scp.
Pour cela, je configure d’abord mon compte ssh pour utiliser une clé privée locale pour m’autentifier sans avoir besoin de saisir mon mot de passe à chaque fois.
1/ Sur ma machine locale, je crée une paire clé privée/clé publique :
ssh-keygen -b 2048 -t rsa
openssh me demande le nom du fichier qui contiendra la clé, et un mot de passe pour protéger la clé. Je donne un mot de passe long, je n’aurais qu’à le saisir une fois par session, il restera en cache.
2/ Sur ma machine distante, je crée un répertoire ~/.ssh s’il n’existe pas déjà
3/ je copie la clé publique sur le serveur :
scp ma_cle.pub rudi@mon_serveur:.ssh/authorized_keys
Ensuite, il ne me reste plus qu’à adapter duplicity. Pour cela, il faut créer une clé PGP pour chiffrer les sauvegardes :
gpg --gen-key
Lorsque la clé est créée, avec un mot de passe, reprenons les informations de la clé :
gpg --list-key
et utilisons l’information pour duplicity :
duplicity --encrypt-key "numéro de la clé publique" --sign-key "numéro de la clé publique" /mon_repertoire_a_sauvegarder/ scp://user@server//home/user/backup/
Ensuite, je l’automatise dans un script bash :
#!/bin/bash
# -- internet --
if eval "ping -c 1 monserveur.com"; then
export PASSPHRASE=mot de passe gpg
duplicity --encrypt-key "0F000000" --sign-key "0F000000" --include "/home/rudi/**.od?" --exclude "/home/rudi/" scp://moi@monserveur.com//home/moi/backup/
export PASSPHRASE=
else
echo pas connecté à internet !
fi
Puis je le mets dans mon crontab pour exécution toutes les cinq minutes :
crontab -e
où je tape :
*/5 * * * * /home/moi/Scripts/backup-duplicity > /home/moi/Scripts/logs/backup-duplicity.log