Cómo instalar y utilizar Ansible en Debian 11

Ansible es una herramienta de gestión de la configuración gratuita, de código abierto y una de las más populares. Es una herramienta multiplataforma que simplifica la computación en nube, la gestión de la configuración, la instalación de paquetes y la configuración de servicios. Utiliza un archivo YAML que contiene los pasos que el usuario desea ejecutar en una máquina determinada. Con Ansible, puedes configurar y gestionar más de hosts con un solo comando. Ansible es una alternativa a otras herramientas de gestión de la configuración como Chef y Puppet.

En este artículo, te mostraré cómo instalar y utilizar la herramienta de gestión de la configuración Ansible en Debian 11.

Requisitos previos

  • Tres servidores que ejecuten Debian 11.
  • Se ha configurado una contraseña de root en cada servidor.

A efectos de este tutorial, utilizaremos la siguiente configuración:

  • Controlador Ansible – 192.168.10.9
  • AnsibleHosts – 192.168.10.10, 192.168.10.11

Instalar Ansible en Debian 11

Por defecto, el paquete Ansible no está incluido en el repositorio por defecto de Debian. Hay dos formas de instalar Ansible en Debian 11.

  1. Usando el comando APT
  2. Usando el comando PIP

Instalar Ansible utilizando APT

En primer lugar, necesitarás instalar algunas dependencias en tu sistema. Puedes instalar las dependencias necesarias utilizando el siguiente comando:

apt-get install gnupg2 curl wget -y

Una vez instaladas todas las dependencias, edita el source.list de APT y añade el repositorio de Ansible:

nano /etc/apt/sources.list

Añade la siguiente línea:

deb http://ppa.launchpad.net/ansible/ansible/ubuntu focal main

Guarda y cierra el archivo cuando hayas terminado, luego añade la clave GPG de Ansible utilizando el siguiente comando:

apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 93C4A3FD7BB9C367

Deberías ver la siguiente salida:

Warning: apt-key is deprecated. Manage keyring files in trusted.gpg.d instead (see apt-key(8)).
Executing: /tmp/apt-key-gpghome.lFEjztT9TY/gpg.1.sh --keyserver keyserver.ubuntu.com --recv-keys 93C4A3FD7BB9C367
gpg: key 93C4A3FD7BB9C367: public key "Launchpad PPA for Ansible, Inc." imported
gpg: Total number processed: 1
gpg:               imported: 1

Ahora, actualiza el repositorio e instala el Ansible con el siguiente comando:

apt-get update
apt-get install ansible -y

Una vez instalado el Ansible, verifica la versión del Ansible con el siguiente comando:

ansible --version

Deberías obtener la siguiente salida:

ansible 2.10.8
  config file = None
  configured module search path = ['/root/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python3/dist-packages/ansible
  executable location = /usr/bin/ansible
  python version = 3.9.2 (default, Feb 28 2021, 17:03:44) [GCC 10.2.1 20210110]

Instalar Ansible utilizando PIP

En primer lugar, tendrás que instalar Python y PIP en tu sistema. Puedes instalarlo utilizando el siguiente comando:

apt-get install python3 python3-pip -y

Una vez completada la instalación, utiliza el comando pip para instalar Ansible como se muestra a continuación:

pip install ansible

Instalar sshpass

El sshpass es una herramienta de línea de comandos que te permite proporcionar contraseñas con comandos SSH. Aquí utilizaremos sshpass en el nodo controlador de Ansible con Ansible para autenticar un host remoto.

Puedes instalar sshpass con el siguiente comando:

apt-get install sshpass -y

A continuación, conéctate al primer host remoto de Ansible para añadir una huella SSH a tu archivo known_hosts:

ssh [email protected]

Se te pedirá que proporciones una contraseña SSH como se muestra a continuación:

The authenticity of host '192.168.10.10 (192.168.10.10)' can't be established.
ECDSA key fingerprint is SHA256:q3zMoJ6qdjYvAdL7/w4Z0gm0ZEgGOB+rNIPKEMdYS6o.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '192.168.10.10' (ECDSA) to the list of known hosts.
Password: 

Introduce tu contraseña y pulsa Intro para añadir una huella digital SSH.

A continuación, conéctate al segundo host remoto ansible para añadir una huella digital SSH a tu archivo known_hosts:

ssh [email protected]

Se te pedirá que proporciones una contraseña SSH como se muestra a continuación:

The authenticity of host '192.168.10.11 (192.168.10.11)' can't be established.
ECDSA key fingerprint is SHA256:q3zMoJ6qdjYvAdL7/w4Z0gm0ZEgGOB+rNIPKEMdYS6o.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '192.168.10.11' (ECDSA) to the list of known hosts.
Password: 

Introduce tu contraseña y pulsa Intro.

Ahora puedes utilizar el comando sshpass para verificar la conexión SSH:

sshpass -p yourpassword ssh [email protected]

Crear el archivo de inventario Ansible Hosts

A continuación, tendrás que crear un archivo de inventario para definir la dirección IP, el nombre de usuario, la contraseña y el puerto SSH de tus hosts remotos:

nano ~/.hosts

Añade las siguientes líneas:

[servers]
server1 ansible_host=192.168.10.10 ansible_user=root ansible_ssh_pass=password ansible_ssh_port=22
server2 ansible_host=192.168.10.11 ansible_user=root ansible_ssh_pass=password ansible_ssh_port=22

Guarda y cierra el archivo.

Nota: En el archivo anterior, utilizaremos la IP, el nombre de usuario, la contraseña y el puerto SSH de los hosts remotos.

Trabajar con Ansible

Ansible proporciona muchos módulos que te ayudan a gestionar hosts remotos.

La sintaxis básica para ejecutar Ansible se muestra a continuación:

ansible -i [inventory_file] -m [module] [host]

Verifiquemos la conectividad ping a todos los hosts:

ansible -i ~/.hosts -m ping all

Si todo va bien, deberías obtener la siguiente salida:

server2 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python3"
    },
    "changed": false,
    "ping": "pong"
}
server1 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python3"
    },
    "changed": false,
    "ping": "pong"
}

Si quieres verificar la conectividad ping del único servidor1, ejecuta el siguiente comando:

ansible -i ~/.hosts -m ping server1

Deberías obtener la siguiente salida:

server1 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python3"
    },
    "changed": false,
    "ping": "pong"
}

Puedes utilizar el módulo shell para ejecutar todos los comandos en los hosts remotos.

Por ejemplo, para ejecutar el comando«free -m» en el servidor2, ejecuta el siguiente comando:

ansible -i ~/.hosts -m shell -a "free -m" server2

Deberías ver la siguiente salida:

server2 | CHANGED | rc=0 >>
               total        used        free      shared  buff/cache   available
Mem:            1982         128         491           2        1363        1669
Swap:              0           0           0

Para ejecutar el comando«df –h» en el servidor2, ejecuta el siguiente comando:

ansible -i ~/.hosts -m shell -a "df -h" server2

Deberías obtener la siguiente salida:

server2 | CHANGED | rc=0 >>
Filesystem      Size  Used Avail Use% Mounted on
udev            976M     0  976M   0% /dev
tmpfs           199M  404K  198M   1% /run
/dev/sda1        50G  2.4G   45G   5% /
tmpfs           992M  124K  992M   1% /dev/shm
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs           199M     0  199M   0% /run/user/0

Ansible proporciona un módulo apt para instalar cualquier paquete en los hosts remotos.

Para instalar el paquete Nginx en el servidor1, ejecuta el siguiente comando:

ansible -i ~/.hosts -m ansible.builtin.apt -a "name=nginx state=present" server1

Deberías obtener la siguiente salida:

server1 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python3"
    },
    "cache_update_time": 1631424599,
    "cache_updated": false,
    "changed": true,
    "stderr": "",
    "stderr_lines": [],
        "Upgrading binary: nginx.",
        "Setting up nginx (1.18.0-6.1) ...",
        "Processing triggers for man-db (2.9.4-2) ...",
        "Processing triggers for libc-bin (2.31-13) ..."
    ]
}

Para comprobar el estado del servicio Nginx en el servidor1, ejecuta el siguiente comando:

ansible -i ~/.hosts -m shell -a "systemctl status nginx" server1

Deberías obtener el siguiente resultado:

server1 | CHANGED | rc=0 >>
? nginx.service - A high performance web server and a reverse proxy server
     Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
     Active: active (running) since Sun 2021-09-12 05:55:36 UTC; 49s ago
       Docs: man:nginx(8)
    Process: 10761 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
    Process: 10764 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
   Main PID: 10871 (nginx)
      Tasks: 2 (limit: 2341)
     Memory: 5.8M
        CPU: 54ms
     CGroup: /system.slice/nginx.service
             ??10871 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
             ??10874 nginx: worker process

Sep 12 05:55:36 ansible systemd[1]: Starting A high performance web server and a reverse proxy server...
Sep 12 05:55:36 ansible systemd[1]: nginx.service: Failed to parse PID from file /run/nginx.pid: Invalid argument
Sep 12 05:55:36 ansible systemd[1]: Started A high performance web server and a reverse proxy server.

Ansible proporciona un módulo de usuario para crear y gestionar usuarios en los hosts remotos.

Para crear un nuevo usuario llamado usuario1 en el servidor1, ejecuta el siguiente comando:

ansible -i ~/.hosts -m ansible.builtin.user -a "name=user1 password=yourpassword" server1

Deberías ver la siguiente salida:

server1 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python3"
    },
    "changed": true,
    "comment": "",
    "create_home": true,
    "group": 1000,
    "home": "/home/user1",
    "name": "user1",
    "password": "NOT_LOGGING_PASSWORD",
    "shell": "/bin/sh",
    "state": "present",
    "system": false,
    "uid": 1000
}

Conclusión

En este artículo has aprendido a instalar Ansible con APT y PIP. También has aprendido a utilizar distintos módulos de Ansible para gestionar hosts remotos. Espero que ahora tengas suficientes conocimientos sobre Ansible. No dudes en preguntarme si tienes alguna duda.

También te podría gustar...