User Tools

Site Tools


procedures_ansible_migracion_con_rsync

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, playbooks y estructura del proyecto.

Escenario típico:

  • Servidor origen con Ansible instalado bajo /root/ansible
  • Servidor destino con Ansible bajo /server/ansible
  • 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:

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:

apt update
apt install rsync -y

Verificar nuevamente:

rsync --version

Problema encontrado

Al intentar ejecutar rsync directamente como root vía SSH:

rsync -avz root@10.28.64.28:/root/ansible/inventory/ /server/ansible/inventory/

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 “clean” (sin banners, echoes, motd)

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

rsync -avz --progress \
  --rsync-path="sudo rsync" \
  user@10.28.64.28:/root/ansible/inventory/ \
  /server/ansible/inventory/

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:

ls -lah /server/ansible/inventory/

Migrar TODO el proyecto Ansible

Para copiar el proyecto completo (inventory, playbooks, roles, backups, etc.):

rsync -avz --progress \
  --rsync-path="sudo rsync" \
  user@10.28.64.28:/root/ansible/ \
  /server/ansible/

Clonado exacto (modo espejo)

ATENCIÓN: elimina en destino lo que no exista en origen.

rsync -avz --progress --delete \
  --rsync-path="sudo rsync" \
  user@10.28.64.28:/root/ansible/ \
  /server/ansible/

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:

visudo

Agregar al final:

user ALL=(root) NOPASSWD: /usr/bin/rsync

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.txt · Last modified: by aperez

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki