
Copias de seguridad en Linux con Bash, SSH y cron: ejemplo práctico
22/11/2008Actualización (octubre de 2026): el script mostrado en 2008 es una referencia histórica, no una solución lista para usar en producción. Incluye borrados automáticos y rutas específicas de su entorno original.
Comprobaciones imprescindibles
Antes de utilizar un script de copias, pruébalo con datos no críticos: comprueba el resultado de cada transferencia antes de borrar los temporales, valida la integridad, protege el destino, define una política de retención y realiza periódicamente una prueba real de restauración. Considera set -euo pipefail en scripts Bash nuevos, gestionando expresamente los comandos cuyo error es esperado. No bases la recuperación en una única copia.
Relacionado: acceso SSH con claves públicas y dividir ficheros grandes en Linux.
Generalmente en entornos de producción es necesario hacer copias de seguridad. Para ello se puede utilizar software como Bacula o hacernos nuestro pequeño script si las necesidades no son muchas.
En este caso muestro un ejemplo de script que corre en el cron de un servidor, el cual se conecta a dos máquinas por SSH, comprime ciertos directorios de algunas máquinas y los envía por scp al servidor. Posteriormente borra las copias con 2 días de antigüedad.
Para que las copias de seguridad sean automáticas, sin intervención del usuario, es necesario configurar el acceso SSH sin password.
El script de ejemplo es el siguiente:
#!/bin/bash
#Definir el servidor donde se almacenan las backups.
LOCALHOST="172.26.0.5"
DEST="/home/carlos/disco.sda1/backups"
#Equipo #1 del que hacer copias.
ORIG1="/home/prod/software"
FICH1=prod-$(date +%Y%m%d).tgz
HOST1=172.26.0.4
ORIG2="/home/tibco"
FICH2=tibco-$(date +%Y%m%d).tgz
HOST2=172.26.0.9
#ATENCIÓN: Añadir la clave pública de ssh para que no se pida clave durante el proceso.
#Backup1
#Crear el fichero, enviarlo y borrarlo del host remoto
ssh $HOST1 "tar cvfz /tmp/$FICH1 --exclude="/home/prod/soft/temp" --exclude="/home/prod/soft/logs" /home/prod/soft/"
ssh $HOST1 "scp /tmp/$FICH1 carlos@$LOCALHOST:$DEST"
ssh $HOST1 "rm /tmp/$FICH1"
FICH_ANTERIOR=prod-$(date +%Y%m%d --date '2 days ago').tgz
if [ -f /home/carlos/disco.sda1/backups/$FICH1 ]; then
rm /home/carlos/disco.sda1/backups/$FICH_ANTERIOR
fi
#Backup2
ssh tibco@$HOST2 "tar cvfz /tmp/$FICH2 /home/tibco/"
ssh tibco@$HOST2 "scp /tmp/$FICH2 carlos@$LOCALHOST:$DEST"
ssh tibco@$HOST2 "rm /tmp/$FICH2"
FICH_ANTERIOR=tibco-$(date +%Y%m%d --date '2 days ago').tgz
if [ -f /home/carlos/disco.sda1/backups/$FICH2 ]; then
rm /home/carlos/disco.sda1/backups/$FICH_ANTERIOR
fi
Y es necesario programar en el cron la ejecución de este script:
carlos@shirley:~$ crontab -e
# m h dom mon dow command
00 21 * * * /home/carlos/backups/misBackups.sh
así como darle permiso de ejecución al script:
carlos@shirley:~$ chmod 700 backups/misBackups.sh
Otros artículos relacionados: Configurar claves SSH · Dividir archivos grandes
[…] Relacionado: script de copias de seguridad en Linux. […]
[…] proyectos con software libre « Importar ficheros de correo (Mbox, PST, etc) en Gmail Script sencillo para backups […]
[…] Relacionado: copias de seguridad en Linux. […]
[…] Otros artículos relacionados: Automatizar copias de seguridad con Bash y SSH […]
[…] Relacionado: copias de seguridad verificables en Linux. […]
[…] Relacionado: copias de seguridad con Linux. […]