Estructura del laboratorio
Tendremos un servidor principal en el cual se instalara “ansible” para controlar los dos clientes.

Ejecutamos el comando sudo apt install ansible para iniciar la instalacion de ansible.

Nos dirigimos a la ruta /etc/ansible/ y crearemos un archivo de configuracion llamado hosts esto para dar de alta un inventario.
Nota: Deberas crear la carpeta ansible en caso de que no este creada
Dentro del archivo colocaremos las siguientes lineas para dar a conocer los clientes que tendremos para ansible.

Realizamos una prueba con el comando ansible all -m ping para mandar un ping y vemos que tenemos una respuesta erronea.

Generamos una llave ssh en nuestro servidor ansible principal.

En los clientes realizaremos la siguiente configuracion para que podamos acceder como el usuario root en el servidor ssh, primero debemos editar el archivo de configuracion sshd_config que se encuentra en la ruta /etc/ssh/sshd_config.
Descomentaremos la linea PermitRootLogin y agregaremos la palabra yes, quedará como se muestra en la imagen.
Tambien buscaremos la linea PasswordAuthentication y la descomentaremos y le pondremos yes quedando como se muestra en la imagen.
Activaremos el servicio ssh al arrancar la maquina con el comando sudo systemctl enable ssh y reiniciaremos el servidor ssh con el comando sudo systemctl restart ssh.
Asignamos una contraseña para el usuario root con el siguiente comando sudo passwd root.

Copiaremos desde el servidor ansible la llave ssh hacia los clientes para poder conectarnos sin la necesidad de proporcionar una contraseña con el comando ssh-copy-id [email protected].
Haremos la prueba para conectarnos mediante ssh y veremos que no nos pide contraseña.
Realizamos la prueba anterior del comando ansible all -m ping y vemos que ahora si funciona correctamente existe una conexion entre servidor y cliente.
Ejecutamos un comando mediante el parametro -a y vemos que efectivamente nos muestra la direccion ip de los clientes en la interfaz enp1s0.
Por ultimo crearemos unos playbooks para definir una serie de tareas automatizadas que se ejecutaran en los clientes.
El siguiente playbook actualiaza la cache del sistema, actualiza los paquetes, instala una lista de paquetes, crea un usuario llamado test123, configura una regla del firewall de ubuntu para permitir SSH, habilita el UFW y reinicia el sistema si es necesario.
---
- hosts: servers
become: yes # Para usar sudo en las tareas
tasks:
- name: Actualizar la cache de apt
apt:
update_cache: yes
- name: Actualizar todos los paquetes
apt:
upgrade: dist
autoremove: yes
autoclean: yes
- name: Instalar paquetes necesarios
apt:
name:
- curl
- git
- ufw
- htop
state: present
- name: Crear un nuevo usuario
user:
name: "test123"
comment: "Usuario de prueba"
shell: /bin/bash
state: present
createhome: yes
groups: sudo
- name: Configurar firewall UFW - permitir SSH
ufw:
rule: allow
port: '22'
proto: tcp
- name: Habilitar UFW
ufw:
state: enabled
- name: Reiniciar el sistema si es necesario
reboot:
msg: "Reiniciando el servidor para aplicar cambios"
connect_timeout: 5
reboot_timeout: 600
pre_reboot_delay: 0
post_reboot_delay: 30
test_command: whoami
Vemos que se ejecuto correctamente y no hubo errores.
Este otro playbook unicamete hace una actualizacion de paquetes.

---
- hosts: all
vars:
ansible_host_key_checking: false
become: true
tasks:
- name: Update and upgrade apt packages
apt:
update_cache: yes
upgrade: yes
Y vemos que se ejecuta correctamente sin errores.
