====== Script de sauvegarde sur un serveur avec BorgBackup en SSH ====== #!/bin/bash # *************************************************************************** # ** FICHIER : borg_abeilles_SAVDOC_SSH.sh # ** TYPE : Shell linux # ** LOCALISATION : Poste utilisateur # ** ORGANISATION : Centre social des Abeilles # ** AUTEUR : RB # ** DATE : 05/12/2020 # ** DATE maj : 30/8/2021 # ** OBJET : Sauvegarde du profil utilisateur # ** des postes sur le serveur local avec BorgBackup en SSH # ** Préalables : avoir créé les clés publique et privée ssh # ** et avoir envoyé la clé publique sur le serveur # ** Initialiser BorgBackup et renseigner dans ce script la BORG_PASSPHRASE # **************************************************************************** # initialisation à faire une fois # borg init --encryption=repokey-blake2 ssh://$HOSTNAME@192.168.1.116/home/sauvegardes/$HOSTNAME/borg # changement de phrase de passe # borg key change-passphrase -v ssh://$HOSTNAME@192.168.1.116/home/sauvegardes/$HOSTNAME/borg # problème de version entre local et serveur à faire une fois # borg upgrade --disable-tam ssh://$HOSTNAME@109.190.1.205:5022/home/sauvegardes/borgbackup/$HOSTNAME HOSTNAME=$(hostname) SERVEUR="$HOSTNAME@Adresse-serveur" PORT="" # port du serveur pour le ssh soit rien pour 22 SOURCE="$HOME" # Chemin du répertoire à sauvegarder DESTI="/home/sauvegardes/$HOSTNAME/borg" # Chemin du répertoire de destination sur le serveur MOUNT="/mnt/borg_archive" # chemin de montage de l'archive sur le PC TEMPS=$(date '+%Y%m%d%H%M%S') JOUR=$(date '+%Y%m%d') LOG="$HOME/log/$HOSTNAME-$LOGNAME-$TEMPS.log" # Chemin du journal log sur le PC ERR="$HOME/log/$HOSTNAME-$LOGNAME-$TEMPS.err" # Chemin du journal err sur le PC # echo $LOG OPTIONSprune=" --keep-within=10d --keep-weekly=4 --keep-monthly=-1 --stats --list --verbose " OPTIONScreate="-v --stats --progress --exclude-caches --exclude $HOME/.cache " # --compression : absent Super fast, low compression (lz4, default) # --keep-within=10d : garde les sauvegardes des 10 derniers jours # --keep-weekly=4 : garde 4 sauvegardes additionelles de fin de semaine # --keep-monthly=-1 : garde toutes les sauvegardes mensuelles # --exclude-caches : exclure les répertoires contenant un fichier cache # --exclude : exclusions # --verbose : mode verbeux # --stats : affiche quelques statistiques de transfert de fichiers # --prefix PREFIX : ne considère que les noms d'archive commençant par ce préfixe. export BORG_PASSPHRASE='xxxxxxxxxxxxxxxx' # phrase de passe pour le référentiel chiffré echo =============================================================== >$LOG 2>$ERR echo "Sauvegarde des données de $LOGNAME@$HOSTNAME" >>$LOG 2>>$ERR echo "Options create $OPTIONScreate" >>$LOG 2>>$ERR echo "Options prune $OPTIONSprune" >>$LOG 2>>$ERR echo =============================================================== >>$LOG 2>>$ERR echo >>$LOG 2>>$ERR echo --------------------------------------------------------------- >>$LOG 2>>$ERR echo $(date +%d\/%m\/%Y\ %H\:%M) - Début de la sauvegarde : $LOGNAME@$HOSTNAME >>$LOG 2>>$ERR echo --------------------------------------------------------------- >>$LOG 2>>$ERR zenity --width=550 --info --text " La sauvegarde automatique vers le serveur sera plus ou moins longue suivant le nombre et le poids de vos fichiers " 2>/dev/null & echo "**************" >>$LOG 2>>$ERR echo "Création d une archive appelée $HOSTNAME-`date +%Y%m%d`" >>$LOG 2>>$ERR echo "**************" >>$LOG 2>>$ERR echo /usr/bin/borg create $OPTIONScreate ssh://$SERVEUR$PORT$DESTI::$HOSTNAME-$LOGNAME-`date +%Y%m%d` $SOURCE >>$LOG 2>>$ERR /usr/bin/borg create $OPTIONScreate ssh://$SERVEUR$PORT$DESTI::$HOSTNAME-$LOGNAME-`date +%Y%m%d` $SOURCE >>$LOG 2>>$ERR # nettoyage du référentiel en supprimant toutes les archives ne correspondant à aucune des options spécifiées echo "**************" >>$LOG 2>>$ERR echo "Nettoyage du référentiel en supprimant toutes les archives ne correspondant aux options spécifiées" >>$LOG 2>>$ERR echo "**************" >>$LOG 2>>$ERR echo /usr/bin/borg prune $OPTIONSprune --prefix $HOSTNAME-$LOGNAME ssh://$SERVEUR$PORT$DESTI >>$LOG 2>>$ERR /usr/bin/borg prune $OPTIONSprune --prefix $HOSTNAME-$LOGNAME ssh://$SERVEUR$PORT$DESTI 2>>$LOG 2>>$ERR # zenity --width=550 --info --text " # Fin de la sauvegarde # Début du controle de l'intégrité de la sauvegarde # " 2>/dev/null & echo "**************" >>$LOG 2>>$ERR echo --------------------------------------------------------------- >>$LOG 2>>$ERR echo $(date +%d\/%m\/%Y\ %H\:%M) - Fin de sauvegarde >>$LOG 2>>$ERR echo --------------------------------------------------------------- >>$LOG 2>>$ERR echo "**************" >>$LOG 2>>$ERR echo " " >>$LOG 2>>$ERR echo "Vérification de la sauvegarde ssh://$SERVEUR$PORT$DESTI : $(date)" >>$LOG 2>>$ERR echo "**************" >>$LOG 2>>$ERR NOPB="no problems found" # phrase se retrouvant dans le fichier log indiquant qu'il n'y a pas de pb après vérification echo Vérification uniquement du référentiel >>$LOG 2>>$ERR FICHIER=$ERR /usr/bin/borg -v check --repository-only ssh://$SERVEUR$PORT$DESTI >>$LOG 2>>$ERR # echo Vérification uniquement des archives >>$LOG 2>>$ERR # FICHIER=$LOG # /usr/bin/borg -v check --archives-only ssh://$SERVEUR$PORT$DESTI >>$LOG 2>>$LOG # echo Vérification de l intégrité des données des archives >>$LOG 2>>$ERR # /usr/bin/borg -v check --verify-data ssh://$SERVEUR$PORT$DESTI >>$LOG 2>>$LOG echo "$NOPB dans $FICHIER " >>$LOG 2>>$ERR echo "Vérification terminée de la sauvegarde ssh://$SERVEUR$PORT$DESTI : $(date)" >>$LOG 2>>$ERR echo "**************" >>$LOG 2>>$ERR echo " " >>$ERR echo "Vérification terminée de la sauvegarde ssh://$SERVEUR$PORT$DESTI : $(date)" >>$ERR echo "**************" >>$ERR # echo if grep -q "$NOPB" "$FICHIER" if grep -q "$NOPB" $FICHIER then # echo "trouvé" echo " " >>$LOG 2>>$ERR echo "Montage de ssh://$SERVEUR$PORT$DESTI sur $MOUNT" >>$LOG 2>>$ERR echo "**************" >>$LOG 2>>$ERR # borg mount ssh://$SERVEUR$PORT$DESTI $MOUNT >>$LOG 2>>$ERR zenity --width=550 --info --text " Sauveagrde terminée " 2>/dev/null & # Elle est accessible sur $MOUNT else # echo "pas trouvé" zenity --width=550 --info --text " ATTENTION IL Y A DES PROBLÈMES DANS LA SAUVEGARDE Voir les fichiers $LOG et $ERR " 2>/dev/null & exit 1 fi echo "**************" >>$LOG 2>>$ERR echo "transfert du fichier log vers le serveur - peut-être à annuler une fois que tout sera ok" >>$LOG 2>>$ERR /usr/bin/scp $LOG $SERVEUR:$DESTI >>$LOG 2>>$ERR # /usr/bin/scp -P 5022 $LOG $SERVEUR:$DESTI >>$LOG 2>>$ERR echo "**************" >>$LOG 2>>$ERR echo " " >>$LOG 2>>$ERR echo " " >>$LOG 2>>$ERR echo " " >>$LOG 2>>$ERR echo " " >>$LOG 2>>$ERR exit 0