Para que cualquier herramienta de Infraestructura como Código (IaC) o de gestión de configuraciones (Ansible, Puppet, Vagrant, etc.) pueda tomar el control de un sistema operativo recién instalado, se requiere un canal de comunicación remoto y un nivel de privilegios elevado.
El problema radica en que, por defecto, un sistema operativo recién instalado es un entorno cerrado, seguro y aislado. Si analizamos una instalación estándar y manual (como la de un Debian Server), el asistente solo nos guía para configurar los parámetros esenciales de supervivencia de la máquina:
root.Fuera de eso, el sistema no expone servicios automatizados ni permite accesos externos. Las herramientas de automatización no pueden "adivinar" cómo entrar ni tienen permisos para realizar cambios estructurales (como instalar paquetes o modificar servicios) a menos que preparemos un entorno mínimo de bootstrap (arranque inicial).
Para resolver esto, el instalador del sistema (mediante preseed, autoinstall o imágenes base modificadas) debe preconfigurar de forma obligatoria dos pilares fundamentales:
Si tuviéramos que preparar este punto de entrada de forma manual (que es exactamente lo que automatizamos luego en el preseed o en la ISO), estos son los comandos y configuraciones esenciales que se deben aplicar en la máquina destino:
El usuario utilizado por la herramienta de IaC necesita ejecutar comandos como root. Dado que no hay un humano detrás de la pantalla para escribir la contraseña cada vez que se ejecuta sudo, se debe configurar una regla NOPASSWD.
# 1. Crear el usuario dedicado al aprovisionamiento
useradd -m -s /bin/bash provision
# 2. Asegurar que sudo está instalado (esencial en Debian base)
apt-get update && apt-get install -y sudo
# 3. Permitir al usuario ejecutar sudo sin contraseña
# Se recomienda crear un archivo propio en sudoers.d en lugar de modificar /etc/sudoers directamente
echo "provision ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/provision
# 4. Asignar los permisos correctos al archivo de configuración
chmod 440 /etc/sudoers.d/provision
Para evitar el uso de contraseñas de texto plano en los scripts, se fuerza el uso de autenticación por llave pública.
En la máquina cliente (tu equipo o el servidor de CI/CD):
Se genera un par de claves temporal o específico para esta infraestructura: