Día 03 - Cambiar la configuración default de Ansible para definir un usuario remoto
Problema / Desafío
Modificar la configuración por defecto de Ansible para que el usuario james sea utilizado como remote_user en todos los hosts, sin crear un nuevo archivo de configuración. La idea es localizar el archivo de configuración existente y editarlo directamente.
Conceptos clave
- ansible-config dump: Comando que muestra toda la configuración activa de Ansible, incluyendo valores por defecto y los que fueron modificados. Los valores modificados aparecen en color diferente (verde = default, amarillo = modificado).
- ansible.cfg: Archivo de configuración principal de Ansible. Puede existir en varias ubicaciones con diferente prioridad:
ANSIBLE_CONFIG(variable de entorno)./ansible.cfg(directorio actual)~/.ansible.cfg(home del usuario)/etc/ansible/ansible.cfg(configuración global del sistema)- remote_user: Parámetro en la sección
[defaults]deansible.cfgque define el usuario SSH por defecto para conectarse a los hosts remotos. Si no se define, Ansible usa el usuario actual del sistema. - CONFIG_FILE: Variable que aparece en la salida de
ansible-config dumpindicando la ruta del archivo de configuración que Ansible está usando actualmente.
Pasos
- Ejecutar
ansible-config dumppara listar toda la configuración activa - Buscar la línea
CONFIG_FILEpara identificar la ruta del archivo de configuración en uso - Editar el archivo de configuración con permisos elevados (
sudo) - Agregar
remote_user = jamesen la sección[defaults] - Verificar que el cambio se aplicó correctamente
Comandos / Código
Listar la configuración activa
La salida muestra todas las configuraciones. Buscamos la línea que indica qué archivo de configuración está en uso:
Buscar la ruta del archivo de configuración
Se puede filtrar directamente la línea relevante:
Salida esperada:
Editar la configuración
Con la ruta identificada, editamos el archivo con permisos elevados:
Dentro del archivo, en la sección [defaults], agregar la siguiente línea:
Si la sección [defaults] ya existe con otros parámetros, simplemente agregar la línea remote_user = james dentro de ella.
Verificar el cambio
Salida esperada (el valor debe aparecer como modificado, no como default):
La presencia de la ruta entre paréntesis confirma que el valor fue leído desde el archivo de configuración y no es el valor por defecto.
Otros parámetros útiles de configuración
Además de remote_user, el archivo ansible.cfg permite configurar muchos otros comportamientos. Estos son los más prácticos organizados por sección:
Sección [defaults]
| Parámetro | Ejemplo | Qué hace |
|---|---|---|
remote_user |
james |
Usuario SSH por defecto |
host_key_checking |
False |
Desactiva la verificación de fingerprint SSH (útil en labs) |
inventory |
/etc/ansible/hosts |
Ruta al inventory por defecto, evita usar -i cada vez |
forks |
10 |
Cantidad de hosts que Ansible maneja en paralelo (default: 5) |
timeout |
30 |
Timeout de conexión SSH en segundos |
log_path |
/var/log/ansible.log |
Habilita logging de todas las ejecuciones |
roles_path |
/etc/ansible/roles |
Dónde buscar roles |
retry_files_enabled |
False |
Desactiva la creación de archivos .retry |
gathering |
smart |
Controla cuándo se recopilan facts (implicit, explicit, smart) |
Sección [privilege_escalation]
| Parámetro | Ejemplo | Qué hace |
|---|---|---|
become |
True |
Activa escalación de privilegios por defecto |
become_method |
sudo |
Método de escalación (sudo, su, pbrun, etc.) |
become_user |
root |
Usuario al que se escala |
become_ask_pass |
False |
Si pide contraseña de sudo al ejecutar |
Sección [ssh_connection]
| Parámetro | Ejemplo | Qué hace |
|---|---|---|
pipelining |
True |
Reduce la cantidad de conexiones SSH (mejora rendimiento) |
ssh_args |
-o ControlMaster=auto |
Argumentos extra para SSH |
Comandos útiles para explorar la configuración
# Ver toda la configuración activa
ansible-config dump
# Ver solo los valores que fueron modificados (no default)
ansible-config dump --only-changed
# Ver la configuración en formato de archivo ansible.cfg
ansible-config init
# Ver la configuración de un plugin específico
ansible-config list
El comando ansible-config init es especialmente útil porque genera un ansible.cfg comentado con todos los parámetros disponibles, sirve como referencia completa.
Troubleshooting
| Problema | Solución |
|---|---|
Permission denied al editar /etc/ansible/ansible.cfg |
Usar sudo para editar el archivo, ya que es propiedad de root |
El cambio no se refleja en ansible-config dump |
Verificar que la línea está dentro de la sección [defaults] y no tiene errores de sintaxis |
| Ansible usa otro archivo de configuración | Revisar si existe un ansible.cfg en el directorio actual o en ~/.ansible.cfg que tenga mayor prioridad |
REMOTE_USER sigue mostrando el valor default |
Asegurarse de que no hay espacios extra ni caracteres invisibles en la línea agregada |