backup, encriptado y copia a remoto

  • disociar parámetros de script en 2 ficheros
    • usar source para incluir las variables necesarias
    • o volver a mirar opciones de usar otro tipo de fichero (INI,JSON)
  • sustitución GPG por ENCHIVE
  • valorando cambio de cálculo de hash
    • sha1 → md5 (la mitad de tiempo) : las colisiones no son importantes
    • meow hash (por valorar)
  • pte: cambiar el nombre del script!
backup_fs_gpg.sh
#!/bin/bash
 
#
#	FUNCIONES
#
 
function calcula_checksum() {
# calcula el SHA1 de los ficheros contenidos en el directorio pasado por parámetro
 
	TMP=$(find "$DIR_ORIGEN/$1" -type f -print0 | xargs -0 sha1sum | sort | cut -d " " -f 1 | sha1sum)
	CHEKSUM_ACT=$(echo $TMP | cut -d " " -f1)
	unset TMP
}
 
 
#
#	VARIABLES
#
 
FICHERO="diezminutos_com"
DIR_ORIGEN="/home/diezminutos"
CHEKSUM_ACT=""
CAMBIOS="NO"
DBB_HOST="mysql.10minutosaldia.com"
DBB_USER="mate_backup"
DBB_PASSWORD="ot3trecfe4y5fxx722xekngf"
BACKUP_PATH="${DIR_ORIGEN}/backup"
ENCHIVE_PATH="${BACKUP_PATH}/enchive"
ENCHIVE_PUBKEY="mate_es.pub"
 
FECHA=`eval date +%y%m%d`
 
DIRECTORIOS_TAR=""
 
# backup BBDD
declare -a BBDD=("10minutos" "10minutosbeta")
for BDD in "${BBDD[@]}"; do
	/usr/bin/mysqldump --opt --user=${DBB_USER} --password=${DBB_PASSWORD} --host=${DBB_HOST} ${BDD} > ${DIR_ORIGEN}/mysqldump/${BDD}.sql
	${ENCHIVE_PATH} --pub-key=${BACKUP_PATH}/${ENCHIVE_PUBKEY} archive ${DIR_ORIGEN}/mysqldump/${BDD}.sql
	rm ${DIR_ORIGEN}/mysqldump/${BDD}.sql
done
 
# calcula SHA1 directorios
declare -a DIRECTORIOS=("app.10minutos" "appb.10minutos" "public" "beta" "backup" "system-3.1.11" "mysqldump")
 
for directorio in "${DIRECTORIOS[@]}"; do
 
	DIRECTORIOS_TAR="${DIRECTORIOS_TAR} ${directorio}"
 
	## leer checksum anterior, si existe
	CHEKSUM_ANT=""
	if [ -e "$DIR_ORIGEN/$directorio.checksum" ]; then
		CHEKSUM_ANT=$(cat "$DIR_ORIGEN/$directorio.checksum")
	fi
 
	calcula_checksum $directorio
 
 
	if [ "$CHEKSUM_ANT" != "$CHEKSUM_ACT" ]; then
		CAMBIOS="SI"
		echo -e "$CHEKSUM_ACT" > $DIR_ORIGEN/$directorio.checksum
	fi
 
done
 
 
if [ "$CAMBIOS" == "SI" ]; then
	# compresión
	tar zvcpf $DIR_ORIGEN/$FICHERO.tar.gz --exclude-tag-all=.nobackup ${DIRECTORIOS_TAR} $DIR_ORIGEN/*.sh 
 
	#encriptación
	${ENCHIVE_PATH} --pub-key=${BACKUP_PATH}/${ENCHIVE_PUBKEY} archive ~/$FICHERO.tar.gz
 
	# borrado fichero original
	rm -f ~/$FICHERO.tar.gz
 
	# renombrado
	mv $FICHERO.tar.gz.enchive $FECHA-$FICHERO.tar.gz.enchive
 
else
	touch $DIR_ORIGEN/$FECHA-SINCAMBIOS.TXT
fi
  • instalar llave pública contraseña GPG para encriptado fichero TAR (mover entre servidores sin problema)
    • Para desencriptar, solo hace falta la clave secreta y el comando: $ gpg –decrypt <fichero>
  • volcado ficheros en $HOME para que «otro» los recoja ← declarados ARRAY
  • volcado BBDD mysqldump con usuario poco privilegiado (SELECT) ← declaradas ARRAY
backup_fs_gpg.sh
#!/bin/bash
 
#
#       FUNCIONES
#
 
function calcula_checksum() {
# calcula el SHA1 de los ficheros contenidos en el directorio pasado por parámetroe
 
        TMP=$(find "$DIR_ORIGEN/$1" -type f -print0 | xargs -0 sha1sum | sort | cut -d " " -f 1 | sha1sum)
        CHEKSUM_ACT=$(echo $TMP | cut -d " " -f1)
        unset TMP
}
 
 
 
#
#       VARIABLES
#
 
FICHERO="fruitsmontmany_es"
DIR_ORIGEN="/home/vividumcodex"
FECHA=`eval date +%y%m%d`
CAMBIOS="NO"
DBB_HOST="mysql.vividumcodex.com"
DBB_USER="mate_backup"
DBB_PASSWORD="xxx"
DIRECTORIOS_TAR=""
 
# backup BBDD
declare -a BBDD=("fruitsmontmany_es")
for BDD in "${BBDD[@]}"; do
	/usr/bin/mysqldump --opt --user=${DBB_USER} --password=${DBB_PASSWORD} --host=${DBB_HOST} ${BDD} > ${DIR_ORIGEN}/mysqldump/${BDD}.sql
done
 
 
 
# calcula SHA1 directorios
declare -a DIRECTORIOS=("fruitsmontmany.es" "mysqldump")
 
for directorio in "${DIRECTORIOS[@]}"; do
 
	DIRECTORIOS_TAR="${DIRECTORIOS_TAR} ${directorio}"
 
        ## leer checksum anterior, si existe
        CHEKSUM_ANT=""
        if [ -e "$DIR_ORIGEN/$directorio.checksum" ]; then
                CHEKSUM_ANT=$(cat "$DIR_ORIGEN/$directorio.checksum")
        fi          
 
        calcula_checksum $directorio
 
 
        if [ "$CHEKSUM_ANT" != "$CHEKSUM_ACT" ]; then
                CAMBIOS="SI"
                echo -e "$CHEKSUM_ACT" > $DIR_ORIGEN/$directorio.checksum
        fi          
 
done
 
 
if [ "$CAMBIOS" == "SI" ]; then
 
	# compresi�n
	tar zvcpf ~/$FICHERO.tar.gz --exclude-tag-all=.nobackup ${DIRECTORIOS_TAR} ~/*.sh
 
	#encriptaci�n
	gpg --trust-model always -r "Miguel Angel Torres Egea (backups)" --encrypt ~/$FICHERO.tar.gz
 
	# borrado fichero original
	rm -f ~/$FICHERO.tar.gz
 
	# renombrado
	mv $FICHERO.tar.gz.gpg $FECHA-$FICHERO.tar.gz.gpg
 
	# copia
##	scp -i ~/.ssh/backups\@seedbox.torresegea.es $FECHA-$FICHERO.tar.gz.gpg backups@seedbox.torresegea.es:~/miguelangel.torresegea.es
 
	# borrado fichero encriptado
##	rm -f $FECHA-$FICHERO.tar.gz.gpg
else
        touch $DIR_ORIGEN/$FECHA-SINCAMBIOS.TXT
##        scp -i ~/.ssh/backups\@seedbox.torresegea.es $FECHA-SINCAMBIOS.* backups@seedbox.torresegea.es:~/miguelangel.torresegea.es
##        rm -f $DIR_ORIGEN/$FECHA-SINCAMBIOS.TXT
 
fi
Llave pública
-----BEGIN PGP PUBLIC KEY BLOCK-----
 
mQENBFWTLEsBCADPGYcDAMfzYLivjin9FgFGS3xQOmV4YAmN2poNkfUFSnUHgAZo
6Kte1cXBN7TSoCMq7ExXE8xwTAHyMIuOGUfmuLHg/c1Hxfm7fxGd1pRkYXvxNQ3F
8kliCpBq4/Y/7Syeq3rARBX6esyBaLfERrmxoUh01oBr7E8nn52Qmu+k1Xn7ZZYA
8LMpnPR92tEvtSnpUMkk71AaHKEBWd+XOWywMddz0us/8qRkuQ5NsOhIi7T2pMKt
mSJKGmZVE5MAetJgBQ1Fy8Wak7VTwsxx33E0zAYzZjW6PfUecA67dy/cERnzWy5g
c3oQt9RoLGWQYMBWi2dmTC1dWbBwUIxhwl73ABEBAAG0Nk1pZ3VlbCBBbmdlbCBU
b3JyZXMgRWdlYSAoYmFja3VwcykgPG1hdGViY25AZ21haWwuY29tPokBOAQTAQIA
IgUCVZMsSwIbAwYLCQgHAwIGFQgCCQoLBBYCAwECHgECF4AACgkQaInNFkRv/buM
twf+LFrq4kR2LTG6G6lE+NUIV5vPB9UZ6QNnhn/J5/F709IQWWWxzIy7Nk3LKrRN
QkHl+BLs5nswdUnEhNGah3Eg6eEzQijwsHr7FDr/5cu1zDZdZHrP6CpGo1nqAxUf
qoRTgt00l5793U/uPcE6woRcc6vtMx0vOm8dWRvBNmNd+jLabpuRQ5DSNfYfF4BM
hXOKyBiFvdAHVc6Lz5vhEDzDbnRH5Q+A/loNGPu7vg5tHfQbEIcVEssTIy9BoxLJ
FfH/Y3q9htzL7tOdZjosxuTTnwoC5FWUMBAQAoY9njPE+w3OZ4H2cwWg/jciQJx+
ZejRkKGuZIQzs3ibc1W/2SV5arkBDQRVkyxLAQgA9xihCUbQdVlo6f3LGM3gf5/6
qbhv9J1RYM/59XMcVBt055CgMUiXok1eKeZLpliN7tfuz3VL61aw6zkk/b2PCbQF
9nzmaSX7B6lPOximCNCN6qYpABPPfLv0mVx/sNQv7AQERo2+2YX3YcMmiJuVXNVk
CD3i1VVPJ+YVWBH8A10EjH3eb8KLKG9R0gO2ru5UiBK8W48UQlh5XUWQr2oPvU4U
z+wAFyEHr18sMFnimzL1IERmZ2EBrWl7p9u/rJVy07E8rLtXQrbOV0ZLuAyUlZXe
UIDkNI1UIeX3DJXvoGlwVm/w+44oPOLna2DYZuiHGaB3MX+Oo40M4BX3yZCxRwAR
AQABiQEfBBgBAgAJBQJVkyxLAhsMAAoJEGiJzRZEb/27lhoIAKVDqPOK5zc4/zKh
bKbuFyLdlqBnlT2w49tgTRRimOfKpZBpQ4xVAtC/Vf5WMXn+DJVGPAAOlXRR7BBN
85+sXUfputCXRTCYk0da4fvi424gmFl2/kWYktTFAbFwH6G1X3I1cB2Pjt25rxKf
2P0K51hOSQ9YR7O2g561Aw3tMmylA9sWYoDXXUO+MK5Fx1OzGAo6PKqavp+QvEHQ
HZhNeqYVHfYabPtWgW3RpwKgFDyCGwZ9BYrukq4ReubicyIsthxLhAXK6qUT4hVz
2ZQZ7Tvsoe6Qv2WBT0e7KPmuhe1n8jrxqD2DFYfrbwN6n/RdWZW6pwL3Uk7lH9Ze
s4ItKkM=
=PS0g
-----END PGP PUBLIC KEY BLOCK-----

Instalando GPG y tu clave pública, encriptas el contenido del TAR poniéndote a tí como destinatario, y será el único en poder abrir el fichero. No hace falta poner contraseñas, ni si quiera en el script

#!/bin/bash
FICHERO="miguelangel_torresega_es"
FECHA=`eval date +%y%m%d`
 
# compresión
tar zvcpf ~/$FICHERO.tar.gz ~/miguelangel.torresegea.es
 
#encriptación
gpg --trust-model always -r "Miguel Angel Torres" --encrypt ~/$FICHERO.tar.gz
 
# borrado fichero original
rm -f ~/$FICHERO.tar.gz
 
# renombrado
mv $FICHERO.tar.gz.gpg $FECHA-$FICHERO.tar.gz.gpg
 
# copia
scp -i ~/.ssh/b230993\@hanjin.dreamhost.com $FECHA-$FICHERO.tar.gz.gpg b230993@hanjin.dreamhost.com:~/matez
 
# borrado fichero encriptado
rm -f $FECHA-$FICHERO.tar.gz.gpg

Para desencriptar, solo hace falta la clave secreta y el comando: $ gpgp –decrypt <fichero>

  • linux/scripts/backupgpg.txt
  • Darrera modificació: 22/03/2020 11:52
  • per mate