Copias de Seguridad Profesionales (PARTE 2): Automatización en Servidores HeadLess

La ruta del SysAdmin 18 de jul. de 2026

Backups automatizados con Borg

En la primera parte de nuestra guía vimos cómo proteger nuestros datos en el escritorio usando BorgBackup y la comodidad de la interfaz Vorta.

Pero seamos sinceros: la verdadera magia de un SysAdmin ocurre en el sótano, en esos servidores sin monitor, sin teclado, sin ratón (headless) donde la única ventana al mundo es una sesión SSH.

Hoy vamos a subir el nivel. Aprenderás a configurar BorgBackup en un servidor Debian mediante terminal, a crear un script de copia de seguridad profesional, a proteger tu contraseña y a automatizar el proceso utilizando Systemd Timers (el sustituto moderno y robusto del clásico cron).

1. El escenario: ¿Dónde guardamos el backup?

Para esta guía, asumiremos que estás en tu servidor Debian principal (producción) y quieres enviar las copias de seguridad a un servidor de almacenamiento externo (el destino) a través de SSH.

Lo primero que necesitamos es garantizar que nuestro servidor de producción pueda conectar con el servidor de destino de forma segura y sin pedir contraseña interactivamente.

Paso 1.1: Configurar llaves SSH (sin frase de paso para automatizar)

Si aún no lo has hecho, genera un par de claves SSH en tu servidor de producción:

ssh-keygen -t ed25519 -f ~/.ssh/id_borg

(Cuando te pida contraseña, déjala en blanco pulsando Enter. El cifrado del backup lo gestionará Borg, no la conexión SSH).

Copia la clave pública al servidor de almacenamiento:

ssh-copy-id -i ~/.ssh/id_borg.pub usuario@servidor_destino

2. Inicializar el Repositorio desde la Terminal

Instalamos Borg en ambos servidores (tanto en origen como en destino deben tener Borg instalado para que la comunicación sea ultraeficiente):

sudo apt update && sudo apt install borgbackup -y

Ahora, inicializamos el repositorio cifrado de Borg en el servidor remoto desde nuestra terminal de producción:

borg init --encryption=repokey usuario@servidor_destino:/ruta/al/repositorio

¡MUY IMPORTANTE! Borg te pedirá una frase de paso (passphrase). Escríbela y guárdala en un gestor de contraseñas. Si pierdes esta frase, perderás el acceso a tus copias de seguridad para siempre.

3. El Script de Backup Profesional

No queremos ejecutar comandos kilométricos a mano cada noche. Vamos a crear un script robusto en /usr/local/bin/backup-borg.sh que se encargue de todo: definir qué guardar, excluir basura, cifrar el contenido, podar los backups antiguos y notificarnos si algo falla.

Crea el archivo:

sudo vi /usr/local/bin/backup-borg.sh

Y pega el siguiente código adaptando las variables a tu entorno:

#!/bin/bash

# --- CONFIGURACIÓN ---
export BORG_PASSPHRASE="TU_CONTRASEÑA_SUPER_SECRETA_AQUÍ"
export BORG_REPO="usuario@servidor_destino:/ruta/al/repositorio"

# Nombre del backup (usamos el nombre del host y la fecha actual)
ARCHIVE_NAME="$(hostname)-$(date +%Y-%m-%d_%H-%M)"

# Directorios a respaldar (separados por espacio)
SOURCES="/var/www /etc /home/usuario/datos"

# Exclusiones (carpetas temporales, cachés, etc.)
EXCLUDES="--exclude '*/.cache' --exclude '*/tmp'"

# --- EJECUCIÓN ---
echo "==> Iniciando copia de seguridad: $ARCHIVE_NAME"

borg create --show-rc --stats --compression lz4 \
    $EXCLUDES \
    ::"$ARCHIVE_NAME" \
    $SOURCES

STATUS=$?

if [ $STATUS -eq 0 ]; then
    echo "==> Backup completado con éxito."
else
    echo "==> [ERROR] El backup ha fallado con código: $STATUS" >&2
fi

# --- POLÍTICA DE RETENCIÓN (PRUNING) ---
# Mantener copia más reciente de últimos 7 días, de últimas 4 semanas y de últimos 6 meses
echo "==> Limpiando copias de seguridad antiguas..."
borg prune --list --show-rc --keep-daily=7 --keep-weekly=4 --keep-monthly=6

# --- LIBERAR VARIABLES ---
unset BORG_PASSPHRASE
unset BORG_REPO

exit $STATUS

Asegurando el Script

Este script contiene la contraseña en texto plano, por lo que debemos restringir sus permisos para que únicamente el usuario root pueda leerlo y ejecutarlo:

sudo chmod 700 /usr/local/bin/backup-borg.sh
sudo chown root:root /usr/local/bin/backup-borg.sh

4. Automatización con Systemd Timers (Adiós Cron)

Aunque cron sigue siendo útil, los Systemd Timers son el estándar moderno en Debian. Nos permiten monitorizar fácilmente si la tarea ha fallado mediante systemctl status, ver los logs directamente en journalctl y asegurar que la tarea no se ejecute si el servidor se está apagando.

Necesitamos crear dos archivos en el directorio del sistema.

Paso 4.1: El Servicio Systemd

Crea el archivo del servicio que ejecutará nuestro script:

sudo vi /etc/systemd/system/borg-backup.service

Añade la siguiente configuración:

[Unit]
Description=Servicio de Copias de Seguridad con BorgBackup
After=network-online.target
Wants=network-online.target

[Service]
Type=oneshot
ExecStart=/usr/local/bin/backup-borg.sh
User=root

Paso 4.2: El Timer Systemd

Ahora crea el temporizador que le dirá al sistema cuándo ejecutar el servicio anterior:

sudo vi /etc/systemd/system/borg-backup.timer

Añade el disparador (por ejemplo, todos los días a las 03:00 AM):

[Unit]
Description=Ejecutar Borg-Backup diariamente a las 3 AM

[Timer]
OnCalendar=*-*-* 03:00:00
Persistent=true

[Install]
WantedBy=timers.target

(La opción Persistent=true asegura que si el servidor estaba apagado a las 03:00 AM, el backup se ejecutará inmediatamente después de que vuelva a encenderse).

Paso 4.3: Activar y Probar el Timer

Recarga la configuración de Systemd para que detecte los nuevos archivos:

sudo systemctl daemon-reload

Activa e inicia el temporizador:

sudo systemctl enable --now borg-backup.timer

Para comprobar que el timer está activo y ver cuándo será la próxima ejecución:

systemctl list-timers --all | grep borg

Si quieres realizar una prueba de fuego y ejecutar el backup ahora mismo para ver si todo funciona bien:

sudo systemctl start borg-backup.service

Y puedes seguir el log en tiempo real de lo que está ocurriendo con:

sudo journalctl -u borg-backup.service -f


Conclusión

Automatizar tus copias de seguridad en un servidor Linux con Debian sin entorno gráfico no requiere de software privativo ni de scripts incomprensibles de miles de líneas.

Con el potencial de BorgBackup y la precisión de Systemd Timers, tienes en tu poder una solución de nivel empresarial, cifrada de extremo a extremo, eficiente con el almacenamiento y 100% bajo tu control.

Etiquetas

Luis GuLo

🐧 SysAdmin GNU/Linux - 🐳 Docker - 🖥️ Bash Scripting - 🐪 Perl - 🐬 MySQL - 👥 Formador de TI - 👥 Formador de SysAdmin's - 💢 Ansible - ☁️ Cloud Computing - ❤️ Debian GNU/Linux