Publicado originalmente en go2linux.org en marzo de 2007. Aunque ya no soy dueño de ese dominio, soy el autor original. Esta versión ha sido actualizada para 2026 y republicada aquí en garron.me.
Introducción
Si tienes dos servidores, hacer backups cruzados es una buena red de seguridad: si uno falla, puedes restaurar desde el otro. Esta guía usa rsync sobre SSH para transferir archivos de forma segura y eficiente entre máquinas.
Requisitos
- Acceso SSH a ambas máquinas
rsyncinstalado en ambas
apt install rsync # Debian / Ubuntu
dnf install rsync # Fedora / RHEL
Paso 1 — Configurar SSH sin contraseña
Para que los backups automáticos funcionen sin intervención humana, la máquina de backup necesita conectarse al servidor origen sin escribir contraseña. Esto requiere un par de claves SSH.
En la máquina de backup, genera una clave si no tienes una:
ssh-keygen -t ed25519 -C "backup-key"
Copia la clave pública al servidor origen:
ssh-copy-id usuario@servidor-origen
Verifica que la conexión funciona sin contraseña:
ssh usuario@servidor-origen "echo ok"
Paso 2 — Preparar el directorio de destino
En la máquina de backup, crea el directorio donde se guardarán los archivos:
mkdir -p $HOME/backup
Paso 3 — Ejecutar rsync por SSH
El comando básico para copiar archivos desde el servidor origen a la máquina de backup:
rsync -avz -e ssh usuario@servidor-origen:/ruta/de/datos/ $HOME/backup/
| Opción | Efecto |
|---|---|
-a |
Modo archivo — preserva permisos, fechas y enlaces simbólicos |
-v |
Verbose — muestra los archivos que se transfieren |
-z |
Comprime los datos durante la transferencia |
-e ssh |
Usa SSH como capa de transporte |
Paso 4 — Mantener el backup sincronizado con --delete
Para eliminar del backup los archivos que ya no existen en el origen:
rsync -avz --delete -e ssh usuario@servidor-origen:/ruta/de/datos/ $HOME/backup/
--delete convierte el destino en un espejo exacto del origen. Úsalo con cuidado — los archivos eliminados también desaparecen del backup.
Paso 5 — Crear un script reutilizable
Guarda esto como ~/backup.sh:
#!/bin/bash
rsync -avz --delete \
-e "ssh -i $HOME/.ssh/id_ed25519" \
usuario@servidor-origen:/ruta/de/datos/ \
$HOME/backup/
Dale permisos de ejecución:
chmod +x ~/backup.sh
Antes de ejecutarlo en serio, haz una prueba en seco para ver qué se transferiría sin tocar ningún archivo:
rsync -avz --dry-run -e ssh usuario@servidor-origen:/ruta/de/datos/ $HOME/backup/
Paso 6 — Automatizar con cron
Para ejecutar el backup cada noche a las 2 AM, abre tu crontab:
crontab -e
Agrega esta línea:
0 2 * * * /home/usuario/backup.sh >> /home/usuario/backup.log 2>&1
La salida se guarda en backup.log para que puedas revisar qué se transfirió o detectar errores.
Verificar el backup
Comprueba que los archivos se están copiando correctamente:
ls -lh $HOME/backup/
Para ver cuánto espacio está usando el backup:
du -sh $HOME/backup/