procedures_ansible_migracion_con_rsync
Differences
This shows you the differences between two versions of the page.
| procedures_ansible_migracion_con_rsync [2026/01/05 19:32] – created aperez | procedures_ansible_migracion_con_rsync [2026/01/19 05:58] (current) – removed aperez | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| - | ====== Migración de proyecto Ansible entre servidores Debian con rsync ====== | ||
| - | |||
| - | ===== Contexto ===== | ||
| - | Este procedimiento documenta la migración de un proyecto Ansible desde un servidor existente hacia un servidor nuevo en Debian, manteniendo integridad de inventarios, | ||
| - | |||
| - | Escenario típico: | ||
| - | * Servidor origen con Ansible instalado bajo / | ||
| - | * Servidor destino con Ansible bajo / | ||
| - | * Acceso SSH disponible con un usuario no-root | ||
| - | * Acceso a root local mediante su -, pero root por SSH deshabilitado (por seguridad) | ||
| - | |||
| - | ===== Infraestructura ===== | ||
| - | ^ Rol ^ Host ^ | ||
| - | | Servidor origen | 10.28.64.28 | | ||
| - | | Servidor destino | 3av-iac | | ||
| - | | Sistema operativo | Debian | | ||
| - | | Usuario SSH | user | | ||
| - | | Proyecto | Ansible | | ||
| - | |||
| - | ===== Requisito de software ===== | ||
| - | El programa **rsync** debe estar instalado **en ambos servidores**: | ||
| - | * servidor origen (envía datos) | ||
| - | * servidor destino (recibe datos) | ||
| - | |||
| - | Si rsync no está instalado en alguno de los dos, la transferencia fallará. | ||
| - | |||
| - | ===== Verificación de rsync ===== | ||
| - | Ejecutar en **ambos servidores**: | ||
| - | |||
| - | <code bash> | ||
| - | rsync --version | ||
| - | </ | ||
| - | |||
| - | Salida esperada: | ||
| - | < | ||
| - | rsync version 3.x.x | ||
| - | </ | ||
| - | |||
| - | ===== Instalación de rsync (si no está presente) ===== | ||
| - | |||
| - | ==== En Debian / Ubuntu ==== | ||
| - | Ejecutar como root o con sudo: | ||
| - | |||
| - | <code bash> | ||
| - | apt update | ||
| - | apt install rsync -y | ||
| - | </ | ||
| - | |||
| - | Verificar nuevamente: | ||
| - | <code bash> | ||
| - | rsync --version | ||
| - | </ | ||
| - | |||
| - | ===== Problema encontrado ===== | ||
| - | Al intentar ejecutar rsync directamente como root vía SSH: | ||
| - | |||
| - | <code bash> | ||
| - | rsync -avz root@10.28.64.28:/ | ||
| - | </ | ||
| - | |||
| - | Se obtiene: | ||
| - | * Permission denied | ||
| - | * Authentication failed | ||
| - | * root login por SSH bloqueado | ||
| - | |||
| - | ===== Causa raíz ===== | ||
| - | * root login por SSH está deshabilitado (PermitRootLogin no) | ||
| - | * sudo requiere TTY para leer la contraseña | ||
| - | * el uso de ssh -tt introduce salida adicional que rompe el protocolo rsync | ||
| - | * rsync necesita una shell " | ||
| - | |||
| - | ===== Solución aplicada (recomendada) ===== | ||
| - | Ejecutar rsync como usuario normal vía SSH y elevar privilegios en el servidor remoto usando sudo, sin forzar TTY. | ||
| - | |||
| - | ===== Comando funcional validado ===== | ||
| - | |||
| - | <code bash> | ||
| - | rsync -avz --progress \ | ||
| - | --rsync-path=" | ||
| - | user@10.28.64.28:/ | ||
| - | / | ||
| - | </ | ||
| - | |||
| - | Resultado: | ||
| - | * Transferencia exitosa | ||
| - | * Inventarios copiados correctamente | ||
| - | * Sin errores de protocolo | ||
| - | |||
| - | ===== Archivos migrados ===== | ||
| - | Ejemplo de salida esperada: | ||
| - | |||
| - | < | ||
| - | hosts_north | ||
| - | hosts_north_1 | ||
| - | hosts_south | ||
| - | hosts_south_1 | ||
| - | </ | ||
| - | |||
| - | ===== Verificación post-migración ===== | ||
| - | En el servidor destino: | ||
| - | |||
| - | <code bash> | ||
| - | ls -lah / | ||
| - | </ | ||
| - | |||
| - | ===== Migrar TODO el proyecto Ansible ===== | ||
| - | Para copiar el proyecto completo (inventory, playbooks, roles, backups, etc.): | ||
| - | |||
| - | <code bash> | ||
| - | rsync -avz --progress \ | ||
| - | --rsync-path=" | ||
| - | user@10.28.64.28:/ | ||
| - | / | ||
| - | </ | ||
| - | |||
| - | ===== Clonado exacto (modo espejo) ===== | ||
| - | ATENCIÓN: elimina en destino lo que no exista en origen. | ||
| - | |||
| - | <code bash> | ||
| - | rsync -avz --progress --delete \ | ||
| - | --rsync-path=" | ||
| - | user@10.28.64.28:/ | ||
| - | / | ||
| - | </ | ||
| - | |||
| - | ===== Errores comunes y explicación ===== | ||
| - | |||
| - | ==== sudo: a terminal is required ==== | ||
| - | Causa: | ||
| - | * sudo espera una TTY para leer la contraseña | ||
| - | |||
| - | Solución: | ||
| - | * evitar ssh -tt | ||
| - | * permitir NOPASSWD para rsync | ||
| - | |||
| - | ==== protocol version mismatch ==== | ||
| - | Causa: | ||
| - | * salida adicional en la shell (banner, echo, motd, sudo prompt) | ||
| - | * uso de ssh -tt rompe el protocolo rsync | ||
| - | |||
| - | Solución: | ||
| - | * usar shell no-interactiva | ||
| - | * mantener entorno limpio | ||
| - | |||
| - | ===== Mejora recomendada (automatización) ===== | ||
| - | Permitir que el usuario ejecute rsync como root sin password. | ||
| - | |||
| - | En el servidor origen: | ||
| - | |||
| - | <code bash> | ||
| - | visudo | ||
| - | </ | ||
| - | |||
| - | Agregar al final: | ||
| - | |||
| - | < | ||
| - | user ALL=(root) NOPASSWD: / | ||
| - | </ | ||
| - | |||
| - | ===== Buenas prácticas ===== | ||
| - | * rsync debe existir en ambos extremos | ||
| - | * No habilitar root por SSH salvo casos excepcionales | ||
| - | * Usar sudo controlado por comando | ||
| - | * Evitar banners en .bashrc para usuarios técnicos | ||
| - | * Probar siempre con --dry-run antes de --delete | ||
| - | |||
| - | ===== Referencias ===== | ||
| - | * man rsync | ||
| - | * man sudo | ||
| - | * man ssh | ||
| - | * Debian Security Hardening Guide | ||
| - | |||
| - | ===== Estado ===== | ||
| - | ✔ Procedimiento validado en producción | ||
| - | ✔ rsync verificado en ambos servidores | ||
| - | ✔ Inventarios y proyecto Ansible migrados correctamente | ||
| - | ✔ Documento base para futuras migraciones | ||
procedures_ansible_migracion_con_rsync.1767641521.txt.gz · Last modified: by aperez
