Script de sauvegarde en SSH

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

Une personne qui n'a jamais commis d'erreurs n'a jamais tenté d'innover. Albert Einstein

Accueil du site > Astuces > Unix > Script de sauvegarde en SSH

Backup / FreeBSD 8

Objectif : sauvegarder un répertoire de travail sur un serveur distant via ssh.

Le plus simple est de prendre le ou les répertoires concernés, de les archiver en un fichier plat, de le compresser et d’envoyer le tout sur l’entrée standard de ssh qui recopie ce résultat dans le fichier de destination.

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

Seul contrainte : créer une clé publique afin d’éviter à 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.

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

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

  • Le répertoire que vous désirez sauvegarder : TARGET_FOLDER
  • L’identifiant nécessaire à la connexion : BACKUP_MACHINE
  • Et le répertoire de destination : BACKUP_FOLDER
#!/bin/sh

# Script pour backup sur serveur distant via ssh

# (c) 2011: cpaulus at quesaco.org
# Licence MIT + GNU GPL, etc.
# http://www.quesaco.org/Script-de-sauvegarde-en-SSH
# @version: Tue Jan 25 11:32:15 CET 2011

# Le repertoire a sauvegarder :
TARGET_FOLDER="/usr/local/www"

# 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/"

# tester si le repertoire distant existe
RES=`ssh "$BACKUP_MACHINE" "if [ -d $BACKUP_FOLDER ]; then echo OK; fi"`
if [ $? -eq 0 ]
then
   if [ "$RES" != "OK" ]
   then
       echo "Dossier de reception manquant !"
       exit
   fi
else
   exit
fi

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

# Aller dans le repertoire cible
cd "$TARGET_FOLDER"

for ii in *
do

# Ne prendre en compte
# que les dossiers
if [ -d $ii ]
then

 # Construire le nom du fichier de destination
 DEST="$BACKUP_FOLDER$ii-$TODAY.tgz"
 echo "Backuping $ii -> $DEST"

 # archiver le fichier (tar) compresse'
 # envoyer le resultat sur la sortie standard
 # le pipe ssh recopie STDOUT dans sa destination
 tar czf - "$ii" | ssh "$BACKUP_MACHINE" "cat > $DEST"
fi

# Testez votre configuration.
# si test OK, placer le exit suivant en commentaire
# pour activer la copie complete du repertoire
exit 0

done

Plussoyez !

Les forums sont fermés.