informatica:ciberseguridad:cursos:curso_ansible_automatizacion_it:conceptos_fundamentales
Diferencias
Muestra las diferencias entre dos versiones de la página.
| Ambos lados, revisión anteriorRevisión previaPróxima revisión | Revisión previa | ||
| informatica:ciberseguridad:cursos:curso_ansible_automatizacion_it:conceptos_fundamentales [2023/05/04 19:37] – tempwin | informatica:ciberseguridad:cursos:curso_ansible_automatizacion_it:conceptos_fundamentales [2023/05/05 16:50] (actual) – [Inventarios estáticos] tempwin | ||
|---|---|---|---|
| Línea 14: | Línea 14: | ||
| - Instalar Ansible | - Instalar Ansible | ||
| + | Si estamos en una Debian, para instalar el módulo de Python que nos permite crear entornos virtuales: | ||
| + | |||
| + | < | ||
| + | apt install python3-venv | ||
| + | </ | ||
| + | |||
| + | Crearemos un directorio para crear nuestro entorno virtual, por ejemplo: | ||
| + | |||
| + | < | ||
| + | mkdir / | ||
| + | </ | ||
| + | |||
| + | Ahora creamos el entorno virtual en ese directorio: | ||
| + | |||
| + | < | ||
| + | python3 -m venv / | ||
| + | </ | ||
| + | |||
| + | Si ahora miramos el contenido del directorio ''/ | ||
| + | |||
| + | < | ||
| + | bin include | ||
| + | </ | ||
| + | |||
| + | Lo que nos falta es activar este nuevo entorno virtual: | ||
| + | |||
| + | < | ||
| + | source / | ||
| + | </ | ||
| + | |||
| + | Sabremos que estamos en el nuevo entorno si en el prompt aparece primero el nombre de dicho entorno: | ||
| + | |||
| + | < | ||
| + | (test_venv) pepito@box:/ | ||
| + | </ | ||
| + | |||
| + | Para instalar Ansible solo para este entorno virtual: | ||
| + | |||
| + | < | ||
| + | pip3 install ansible | ||
| + | </ | ||
| + | |||
| + | Si miramos dónde está este nuevo binario: | ||
| + | |||
| + | < | ||
| + | which ansible | ||
| + | </ | ||
| + | |||
| + | Cuando ejecutemos '' | ||
| + | |||
| + | Para salir del entorno virtual, ejecutamos '' | ||
| + | |||
| + | Si no quisiésemos usar más ese entorno virtual, podemos borrarlo. Al fin y al cabo no es más que un directorio en el sistema: | ||
| + | |||
| + | < | ||
| + | rm -rf / | ||
| + | </ | ||
| + | |||
| + | ===== Introducción a los módulos en Ansible ===== | ||
| + | |||
| + | Los módulos son trozos de código escrito en Python que realizan una determinada tarea. | ||
| + | |||
| + | * [[https:// | ||
| + | |||
| + | Si no existe ningún módulo que cumpla nuestras necesidades, | ||
| + | |||
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | |||
| + | <WRAP center round info 60%> | ||
| + | Los módulos ofrecen // | ||
| + | </ | ||
| + | |||
| + | ===== Ejecutando módulos de forma standalone ===== | ||
| + | |||
| + | Empezamos con el módulo '' | ||
| + | |||
| + | < | ||
| + | ansible localhost -m ping | ||
| + | </ | ||
| + | |||
| + | <WRAP center round tip 60%> | ||
| + | Podemos ver información sobre un módulo desde línea de comandos: '' | ||
| + | </ | ||
| + | |||
| + | < | ||
| + | ansible localhost -m ping -a " | ||
| + | </ | ||
| + | |||
| + | <WRAP center round todo 60%> | ||
| + | Poner la salida de los comandos anteriores | ||
| + | </ | ||
| + | |||
| + | Ejemplo con el módulo '' | ||
| + | |||
| + | < | ||
| + | ansible localhost -m script -a "/ | ||
| + | </ | ||
| + | |||
| + | Contenido de '' | ||
| + | |||
| + | <code bash> | ||
| + | #!/bin/bash | ||
| + | |||
| + | echo "Hola, mundo!" | ||
| + | </ | ||
| + | |||
| + | <WRAP center round todo 60%> | ||
| + | Poner ejemplo de salida | ||
| + | </ | ||
| + | |||
| + | Si queremos cambiar la //shell// a usar: | ||
| + | |||
| + | < | ||
| + | ansible localhost -m script -a "/ | ||
| + | </ | ||
| + | |||
| + | ===== Preparando las máquinas a gestionar con usuario y contraseña ===== | ||
| + | |||
| + | En la realidad lo que queremos en configurar una o varias máquinas remotas. | ||
| + | |||
| + | ==== Equipo a gestionar ==== | ||
| + | |||
| + | * Crear un usuario para Ansible | ||
| + | * Verificar que el servicio SSH está funcionando | ||
| + | |||
| + | Para crear usuario desde línea de comandos: | ||
| + | |||
| + | < | ||
| + | adduser ansible | ||
| + | </ | ||
| + | |||
| + | Verificamos si el servicio SSH está corriendo: | ||
| + | |||
| + | < | ||
| + | systemctl status sshd | ||
| + | </ | ||
| + | |||
| + | Podríamos verificar también si tenemos conectividad a nivel de red entre los equipos a gestionar y el equipo que hace de nodo de gestión: | ||
| + | |||
| + | < | ||
| + | ping ip.equipo.destino.1 | ||
| + | ping ip.equipo.destino.2 | ||
| + | ping ip.equipo.destino.X | ||
| + | </ | ||
| + | |||
| + | ==== Nodo de gestión ==== | ||
| + | |||
| + | * Confiar en la clave SSH del equipo destino | ||
| + | * Especificar el usuario y contraseña a utilizar para realizar la gestión | ||
| + | |||
| + | Para usar ansible desde el nodo de gestión: | ||
| + | |||
| + | < | ||
| + | ansible dir.ip.maquina.destino --user=ansible -k -m ping | ||
| + | </ | ||
| + | |||
| + | * '' | ||
| + | |||
| + | De esta manera habríamos validado que Ansible puede conectarse al equipo remoto y recuperar información (en este caso usando el módulo '' | ||
| + | |||
| + | ===== Preparando las máquinas a gestionar con clave pública ===== | ||
| + | |||
| + | Para evitar dejar las credenciales en algún sitio accesible, usaremos la criptografía de clave pública. La privada nos la quedamos y la pública se la pasamos a los sistemas que queremos gestionar con Ansible. | ||
| + | |||
| + | <WRAP center round tip 60%> | ||
| + | Esta es la manera recomendable de realizar las conexiones a otros equipos | ||
| + | </ | ||
| + | |||
| + | ==== Equipo a gestionar ==== | ||
| + | |||
| + | * Disponer de un usuario para Ansible | ||
| + | * Verificar que el servicio SSH está funcionando. | ||
| + | * Configurar las claves SSH autorizadas. | ||
| + | |||
| + | ==== Nodo de gestión ==== | ||
| + | |||
| + | * Generar clave SSH para la autenticación | ||
| + | * Configuar en la clave SSH del equipo destino | ||
| + | * Indicar a Ansible la ubicación de la clave | ||
| + | * Especificar el usuario a utilizar para realizar la conexión. | ||
| + | |||
| + | Creamos el par de claves pública y privada: | ||
| + | |||
| + | < | ||
| + | ssh-keygen -N "" | ||
| + | </ | ||
| + | |||
| + | Por defecto, las claves se generan en ''/ | ||
| + | |||
| + | Ahora tendríamos que llevar la clave pública a los equipos a gestionar. Para ello, se puede copiar y pegar el contenido del fichero '' | ||
| + | |||
| + | < | ||
| + | ssh-copy-id usuarioremoto@equiporemoto | ||
| + | </ | ||
| + | |||
| + | Finalmente, para probar a conectarnos con claves: | ||
| + | |||
| + | < | ||
| + | ansible dir.ip.equipo.remoto --user=ansible --key-file / | ||
| + | </ | ||
| + | |||
| + | * '' | ||
| + | |||
| + | ===== Inventarios estáticos ===== | ||
| + | |||
| + | Fichero con la lista de los sistemas que queremos configurar. En los estáticos no son más que un fichero de texto con información de los equipos. | ||
| + | |||
| + | Ejemplo: | ||
| + | |||
| + | < | ||
| + | 10.0.65.40 | ||
| + | 10.0.65.42 | ||
| + | 10.0.65.50 | ||
| + | host.example.com | ||
| + | </ | ||
| + | |||
| + | También son válidos: | ||
| + | |||
| + | < | ||
| + | [control] | ||
| + | control ansible_host=10.0.42.10 | ||
| + | |||
| + | [web] | ||
| + | node-[1:3] ansible_host=10.0.42.[5: | ||
| + | </ | ||
| + | |||
| + | < | ||
| + | ansible ip.dir.equipo.remoto -u ansible --key-file / | ||
| + | </ | ||
| + | |||
| + | Ansible crea por defecto un inventario estático en ''/ | ||
| + | |||
| + | <WRAP center round important 60%> | ||
| + | Añadir ejemplos de lo anterior. | ||
| + | </ | ||
| + | |||
| + | Para crear nuestro propio inventario estático, creamos un fichero de texto con el siguiente contenido: | ||
| + | |||
| + | < | ||
| + | 10.0.40.10 | ||
| + | 10.0.40.20 | ||
| + | </ | ||
| + | |||
| + | Para ejecutar Ansible sobre ese inventario: | ||
| + | |||
| + | < | ||
| + | ansible all -i / | ||
| + | </ | ||
| + | |||
| + | Podríamos " | ||
| + | |||
| + | < | ||
| + | [servidor_web] | ||
| + | 10.0.40.10 | ||
| + | |||
| + | [bbdd] | ||
| + | 10.0.40.20 | ||
| + | </ | ||
| + | |||
| + | < | ||
| + | ansible all -i / | ||
| + | </ | ||
| + | |||
| + | De esa manera, solo se ejecutará el módulo '' | ||
| + | |||
| + | Si queremos agrupar máquinas: | ||
| + | |||
| + | < | ||
| + | [servidor_web] | ||
| + | 10.0.40.10 | ||
| + | |||
| + | [bbdd] | ||
| + | 10.0.40.20 | ||
| + | |||
| + | [aplicacion: | ||
| + | servidor_web | ||
| + | bbdd | ||
| + | </ | ||
| + | |||
| + | < | ||
| + | ansible all -i / | ||
| + | </ | ||
| + | |||
| + | Más cosas, añadiendo alias: | ||
| + | |||
| + | < | ||
| + | [servidor_web] | ||
| + | 10.0.40.10 | ||
| + | |||
| + | [bbdd] | ||
| + | bbdd1 ansible_host=10.0.40.20 | ||
| + | </ | ||
| + | |||
| + | Y llamamos a Ansible sobre el equipo con la etiqueta que creamos anteriormente: | ||
| + | |||
| + | < | ||
| + | ansible bbdd1 -i / | ||
| + | </ | ||
| + | |||
| + | ===== Qué son los facts en Ansible ===== | ||
| + | |||
| + | Los //facts// permiten recoger información sobre los sistemas objetivo y realizar así ciertas modificaciones en función de esa información recogida. | ||
| + | |||
| + | < | ||
| + | ansible servidor_web -i / | ||
| + | </ | ||
| + | |||
| + | * El módulo '' | ||
| + | |||
| + | <WRAP center round todo 60%> | ||
| + | Poner salida del comando anterior | ||
| + | </ | ||
| + | |||
| + | Podríamos filtrar (mirar documentación oficial del módulo '' | ||
| + | |||
| + | < | ||
| + | ansible servidor_web -i / | ||
| + | </ | ||
| + | |||
| + | Cuando usemos Playbooks, por defecto Ansible recoge todos los //facts//. | ||
| ===== Recursos ===== | ===== Recursos ===== | ||
| * [[https:// | * [[https:// | ||
| * [[https:// | * [[https:// | ||
informatica/ciberseguridad/cursos/curso_ansible_automatizacion_it/conceptos_fundamentales.1683221851.txt.gz · Última modificación: por tempwin
