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.
- Usando el comando APT
- 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.