Ansible es una herramienta de gestión de configuración gratuita y de código abierto, y una de las más populares. Es una herramienta multiplataforma que simplifica la computación en la nube, la gestión de 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 en particular. Con Ansible, puede configurar y administrar más de hosts con un solo comando. Ansible es una alternativa a las otras herramientas de administración de configuración como Chef y Puppet.
En este artículo, le mostraré cómo instalar y usar la herramienta de administración de configuración Ansible en Debian 11.
Requisitos
- Tres servidores que ejecutan Debian 11.
- Se configura una contraseña raíz en cada servidor.
A los efectos de este tutorial, utilizaremos la siguiente configuración:
- Controlador Ansible - 192.168.10.9
- Hosts de Ansible - 192.168.10.10, 192.168.10.11
Instalar Ansible en Debian 11
De forma predeterminada, el paquete Ansible no está incluido en el repositorio predeterminado de Debian. Hay dos formas de instalar Ansible en Debian 11.
- Uso del comando APT
- Uso del comando PIP
Instalar Ansible usando APT
Primero, deberá instalar algunas dependencias en su sistema. Puede instalar las dependencias requeridas usando el siguiente comando:
apt-get install gnupg2 curl wget -y
Una vez que todas las dependencias estén instaladas, edite APT source.list y agregue el repositorio de Ansible:
nano /etc/apt/sources.list
Agregue la siguiente línea:
deb http://ppa.launchpad.net/ansible/ansible/ubuntu focal main
Guarde y cierre el archivo cuando haya terminado, luego agregue la clave GPG de Ansible con el siguiente comando:
apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 93C4A3FD7BB9C367
Debería ver el siguiente resultado:
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, actualice el repositorio e instale Ansible con el siguiente comando:
apt-get update
apt-get install ansible -y
Una vez que Ansible esté instalado, verifique la versión de Ansible con el siguiente comando:
ansible --version
Deberías obtener el siguiente resultado:
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 usando PIP
Primero, deberá instalar Python y PIP en su sistema. Puedes instalarlo usando el siguiente comando:
apt-get install python3 python3-pip -y
Una vez completada la instalación, use el comando pip para instalar Ansible como se muestra a continuación:
pip install ansible
Instalar sshpass
sshpass es una herramienta de línea de comandos que le permite proporcionar contraseñas con comandos SSH. Aquí, usaremos sshpass en el nodo del controlador Ansible con Ansible para autenticar un host remoto.
Puede instalar el sshpass con el siguiente comando:
apt-get install sshpass -y
A continuación, conéctese al primer host remoto de ansible para agregar una huella digital SSH a sus hosts_conocidos. archivo:
ssh [email protected]
Se le pedirá que proporcione 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:
Proporcione su contraseña y presione Entrar para agregar una huella digital SSH.
A continuación, conéctese al segundo host remoto de ansible para agregar una huella digital SSH a su archivoknown_hosts:
ssh [email protected]
Se le pedirá que proporcione 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:
Proporcione su contraseña y presione Entrar .
Ahora puede usar el comando sshpass para verificar la conexión SSH:
sshpass -p yourpassword ssh [email protected]
Crear archivo de inventario de hosts de Ansible
A continuación, deberá crear un archivo de inventario para definir la dirección IP, el nombre de usuario, la contraseña y el puerto SSH de su host remoto:
nano ~/.hosts
Agregue 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
Guarde y cierre el archivo.
Nota :En el archivo anterior, usaremos la IP, el nombre de usuario, la contraseña y el puerto SSH de los hosts remotos.
Trabajando con Ansible
Ansible proporciona una gran cantidad de módulos que lo ayudan a administrar hosts remotos.
La sintaxis básica para ejecutar Ansible como se muestra a continuación:
ansible -i [inventory_file] -m [module] [host]
Verifiquemos la conectividad de ping a todos los hosts:
ansible -i ~/.hosts -m ping all
Si todo está bien, debería obtener el siguiente resultado:
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 desea verificar la conectividad de ping del único servidor1, ejecute el siguiente comando:
ansible -i ~/.hosts -m ping server1
Deberías obtener el siguiente resultado:
server1 | SUCCESS => { "ansible_facts": { "discovered_interpreter_python": "/usr/bin/python3" }, "changed": false, "ping": "pong" }
Puede usar el módulo de shell para ejecutar todos los comandos en los hosts remotos.
Por ejemplo, para ejecutar "free -m " comando en server2, ejecute el siguiente comando:
ansible -i ~/.hosts -m shell -a "free -m" server2
Debería ver el siguiente resultado:
server2 | CHANGED | rc=0 >> total used free shared buff/cache available Mem: 1982 128 491 2 1363 1669 Swap: 0 0 0
Para ejecutar un "df -h " commad en server2, ejecute el siguiente comando:
ansible -i ~/.hosts -m shell -a "df -h" server2
Deberías obtener el siguiente resultado:
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 apto para instalar cualquier paquete en los hosts remotos.
Para instalar Nginx paquete en el servidor1, ejecute el siguiente comando:
ansible -i ~/.hosts -m ansible.builtin.apt -a "name=nginx state=present" server1
Deberías obtener el siguiente resultado:
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 verificar el estado del servicio Nginx en el servidor 1, ejecute 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 administrar usuarios en los hosts remotos.
Para crear un nuevo usuario llamado usuario1 en server1, ejecute el siguiente comando:
ansible -i ~/.hosts -m ansible.builtin.user -a "name=user1 password=yourpassword" server1
Debería ver el siguiente resultado:
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, aprendió a instalar Ansible con APT y PIP. También aprendió a usar diferentes módulos de Ansible para administrar hosts remotos. Espero que ahora tenga suficiente comprensión de Ansible. Siéntase libre de preguntarme si tiene alguna pregunta.