Script de sauvegarde et données cryptées en SSH

© Christian PAULUS. Document créé le 5 janvier 2011 , mis à jour le 25 janvier 2011.

L'Homme est une prison où l'Âme reste libre. Victor Hugo

Accueil du site > Astuces > Unix > Script de sauvegarde et données cryptées en SSH

Backup / FreeBSD 8

Objectif : dans la même démarche que Script de sauvegarde en SSH, sauvegarder ses données sur un serveur distant via ssh, mais cette fois-ci, dans un fichier crypté.

Scénario :

  • le répertoire souhaité est archivé dans un fichier plat au format tar, compressé et encrypté via enigma (cryptage réversible).
  • la résultat est envoyé via scp (copie sous ssh) sur le serveur distant

C’est ce que propose le script ci-dessous.

Une copie cryptée de vos données

C’est une version un peu plus sécurisée qu’une simple copie via ssh. Elle conviendra peut-être si vous ne souhaitez pas que les équipes locales (présentes dans la salle serveurs) aient facilement accès à vos sauvegardes. Par exemple, si vous sauvegardez votre environnement système sur une machine louée chez un hébergeur (ne pas oublier que celui qui a physiquement accès à la machine a souvent le dernier mot, sauf dans de très rares cas).

Première contrainte : créer une clé publique afin d’éviter de devoir entrer le mot de passe à la connexion, et permettre l’emploi de ce script via le cron. Lire si besoin le billet Se connecter par SSH sans taper de mot de passe.

Seconde contrainte : conserver en lieu sûr la clé de cryptage. Sans elle, retrouver vos données sauvegardées sera probablement impossible.

Ne pas oublier de créer le dossier de réception, sur la machine distante.

Vous devez enfin, dans ce script, préciser :

  • Le(s) répertoire(s) que vous désirez sauvegarder : voir la boucle for
  • L’identifiant nécessaire à la connexion : BACKUP_MACHINE
  • Et le répertoire de destination : BACKUP_FOLDER

Attention : les crypt/enigma ne sont pas disponibles sur tous les environnements. Testez et validez la solution avant de mettre en production.

#!/bin/sh

# Script pour backup sur serveur distant via ssh
# dans un fichier crypte'

# (c) 2011: cpaulus at quesaco.org
# Licence MIT + GNU GPL, etc.
# http://www.quesaco.org/Script-de-sauvegarde-et-donnees-cryptees-en-SSH
# @version: Tue Jan 25 10:40:16 CET 2011

# Nom de la machine distante
# du style "login@server.exemple.com"
BACKUP_MACHINE="login@server.exemple.com"

# Repertoire de destination
# Attention a creer ce repertoire distant avec les bons droits
BACKUP_FOLDER="backups/"

# la date au format court
# pour completer le nom du fichier
TODAY=`date "+%Y%m%d"`

# le mot de passe pour crypter/decrypter
# le(s) fichier(s) de sauvegarde.
# A conserver en lieu sur
SECRET="vasybonhomme"

# Utiliser un dossier tmp proposant une place
# genereuse pour la copie temporaire
# @TODO: tester si la place necessaire est disponible
MYTMP="/var/tmp/"

if [ ! -d "$MYTMP" ]
then
echo "$MYTMP missing. Abort!"
exit 1
fi

if [ ! -w "$MYTMP" ]
then
echo "$MYTMP no access write. Abort!"
exit 1
fi

# sauvegarder les repertoires
#
for ii in /etc \
       /usr/local/etc \
       /var/named/etc/namedb
do
       # nettoyer le nom de fichier
       DEST=`echo "$ii" | tr -s "/" "_"`

       # completer ce nom par la date du jour
       DEST="$DEST-$TODAY.ctgz"

       echo "Backuping $ii -> $DEST"

       # assembler dans ce fichier, crypter
       tar cfvz - "$ii" | enigma "$SECRET" > "$MYTMP$DEST"

       ZDEST="$BACKUP_MACHINE:$BACKUP_FOLDER"

       echo "Copying $MYTMP$DEST -> $ZDEST"

       # recopier sur le distant via ssh
       scp "$MYTMP$DEST" "$ZDEST"

       # supprimer la sauvegarde temporaire
       rm "$MYTMP$DEST"
done

Décrypter les fichiers sauvegardés

Attention : les commandes suivantes peuvent écraser vos données locales, effacer vos fichiers. Si vous ne comprenez pas les exemples donnés, faites-vous aider. Vous êtes seul responsable de vos actions.

Le fichier archivé est encrypté. Sans le mot de passe, il sera difficile - voire impossible - de retrouver vos données.

De plus, bien souvent, il faudra utiliser un noyau (un Unix, une machine) compatible avec la commande crypt ou enigma utilisée.

Les conditions réunies, pour lister - par exemple - la sauvegarde de vos fichiers de configuration :

crypt vasybonhomme < _etc-20110105.tmp.ctgz | tar -tzvf -

Et son pendant, si vous désirez récupérer votre archive dans le répertoire courant (attention, ça écrase les fichiers présents) :

crypt vasybonhomme < _etc-20110105.tmp.ctgz | tar -xzvf -

Plussoyez !

Les forums sont fermés.