Crear y obtener copias de seguridad de nuestro servidor remoto mediante SSH de una forma sencilla

Tengo un servidor el cual administro de forma remota y estuve buscando una forma sencilla para que el mismo servidor hiciera los backups y mi propio ordenador los descargara de forma automática y segura.

Opté por usar herramientas comunes y sencillas, además preferí usar backups totales y no diferenciales personalizables para cada parte del sistema, ya que por ejemplo no me interesaba hacer un backup diario del directorio "/etc/" pero sí de las bases de datos. A continuación explico cómo lo hice.

Lo primero será crear un usuario para que almacene los backups, usando el programa "adduser" creé el usuario "backup-user".

user add backup-user
mkdir /home/backup-user
mkdir /home/backup-user/last
chown backup-user /home/backup-user -R
chmod o=-rwx,g=-rwx /home/backup-user -R

No se os olvide asignar un password al nuevo usuario con "passwd".

Para empezar con el backup del directorio /home creé el siguiente script de bash:

/usr/local/bin/home-backups

#!/bin/bash
DEST="/home/backup-user/"
ORIG="/home/"

FICH=home-$(date +%Y%m%d).tgz
tar cvvzfP $DEST$FICH $ORIG --exclude=/home/mldonkey/.mldonkey/incoming --exclude=/home/comun --exclude=/home/backup-user

cd /home/backup-user
chown backup-user * -R
ln -sf $DEST$FICH /home/backup-user/last/home-last.tar.gz

Lo que hace básicamente es crear un fichero tar.gz de nombre "home-" seguido de la fecha en la que se creó el archivo. También se puede observar como excluir ciertos directorios que no nos interesan en el backup. A continuación mueve el fichero creado a la carpeta del usuario que creamos antes, "backup-user" y asigna a este último como propietario. Para terminar, vemos que crea un enlaces simbólico a /home/backup-user/last/ del fichero recién creado, ya explicaré luego el por qué.

Con este mismo sistema se pueden crear diferentes scripts para diferentes directorios de los cuales queramos realizar el backup.

Para las bases de datos de MySQL, creé otro script similar:

/usr/local/bin/mysql-backups.sh

#!/bin/bash
DEST="/home/backup-user/"
FICH=mysql-$(date +%Y%m%d).tgz

mysqldump --opt -u root -ptupassword --all-databases | gzip > $DEST$FICH

cd /home/backup-user
chown backup-user * -R
ln -sf $DEST$FICH /home/backup-user/last/mysql-last.tgz

La estructura es similar al script "home-backups". No olvidéis sustituir "tupassword" por el password de vuestra base de datos para el usuario root.

Para terminar, sólo falta añadir dos entradas a CRON para automatizar la ejecución de estos scripts. Yo elegí hacer un backup del home el día 1 de cada mes, y un backup de las bases de datos a diario.

crontab -e

0 4 * * * /usr/local/bin/mysql-backups
0 4 1 * * /usr/local/bin/home-backups

Ya tenemos lista la parte de realizar los backups automáticos en nuestro servidor, ahora sólo falta la parte de automatizar la obtención de ellos.

Para ello tenemos que autorizar el login remoto del usuario backup-user a través de ssh (/etc/ssh/sshd_conf). Una vez autorizado, nos interesa no tener que usar clave para acceder a ese usuario para ello os recomiendo que sigáis el siguiente artículo http://bulma.net/body.phtml?nIdNoticia=2190.

Una vez hemos comprobado que podemos hacer ssh maquina_remota -l backup-user y acceder sin necesidad de clave, sólo nos falta añadir a nuestro CRON la siguiente línea:

00 12 * * * scp -pr "backup-user@maquina_remoto:/home/backup-user/last/" ~/

Con ello descargaremos automáticamente los últimos backups (contenidos en "last", de ahí la anterior creación de este directorio) generados por nuestro servidor a el directorio "~/last" de nuestro "home" todos los días a las 12 de la mañana, conservando la fecha de creación del archivo y sobreescribiendo archivos antiguos.

Ahora sólo nos faltaría una forma automática para deshacernos de los backups antiguos en el servidor, acepto sugerencias :).


Comentarios

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.

Yo lo haria, haciendo un

Yo lo haria, haciendo un script de la siguiente forma:

scp -pr "backup-user@maquina_remoto:/home/backup-user/last/" ~/
ssh backup-user@maquina_remoto "rm -rf /home/backup-user/last/*"

y llamándolo desde el crontab

Saludos

Enviar un comentario nuevo

El contenido de este campo se mantiene como privado y no se muestra públicamente.
CAPTCHA
Esta pregunta sirve para comprobar si usted es un visitante humano y prevenir que máquinas automáticas de publicidad puedan entrar en esta sección.
4 + 5 =
Solve this simple math problem and enter the result. E.g. for 1+3, enter 4.