= backup, encriptado y copia a remoto
== 2.2
* 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)
== v2.1
* sustitución **GPG** por **[[software:utils:enchive|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!
#!/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
== v2
* 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 ''
* volcado ficheros en $HOME para que "otro" los recoja <- declarados ARRAY
* volcado BBDD **mysqldump** con usuario poco privilegiado (SELECT) <- declaradas ARRAY
#!/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
-----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-----
== v1
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 ''