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.
Excluir archivos y directorios
Usa --exclude para omitir archivos que no quieres en el backup — cachés, temporales, directorios de control de versiones:
rsync -avz --delete \
--exclude='*.tmp' \
--exclude='.git/' \
--exclude='node_modules/' \
-e ssh usuario@servidor-origen:/ruta/de/datos/ $HOME/backup/
Puedes apilar tantos patrones --exclude como necesites. Los patrones se aplican relativos a la ruta de origen.
Limitar el ancho de banda
En una conexión compartida, rsync puede saturar el enlace. Usa --bwlimit para limitar el caudal en KB/s:
rsync -avz --delete --bwlimit=5000 -e ssh usuario@servidor-origen:/ruta/de/datos/ $HOME/backup/
5000 KB/s ≈ 5 MB/s. Ajústalo según tu conexión y la ventana de tiempo disponible para el backup.
Enviar en lugar de recibir
Todos los ejemplos anteriores descargan datos desde el servidor remoto a la máquina local. El mismo comando funciona en sentido inverso — enviar desde local a remoto:
rsync -avz --delete -e ssh /datos/locales/ usuario@servidor-backup:/home/usuario/backup/
Elige la dirección que mejor se adapte a tu topología de red y a dónde tienes configurado el acceso SSH.
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/