Búsqueda de sitios web

Cómo configurar nodos administrados de Ansible y ejecutar comandos ad-hoc - Parte 3


En los dos artículos anteriores de esta serie de Ansible, explicamos los componentes principales de Ansible y la configuración del nodo de control de Ansible. En esta parte 3, demostraremos cómo configurar nodos administrados de Ansible para ejecutar comandos ad-hoc en hosts remotos.

Configurar la autenticación SSH sin contraseña en nodos administrados de Ansible

Como resumen de nuestro último tema, la administración de hosts remotos con Ansible requiere la configuración de autenticación SSH sin contraseña entre el nodo de control de Ansible y los hosts administrados. Esto implica la generación de un par de claves (par de claves SSH públicas y privadas) en el nodo de control de Ansible y copiar la clave pública a todos los hosts remotos. Este será un paso crucial en el futuro y facilitará mucho su trabajo.

Configurar la escalada de privilegios en nodos administrados

Cuando inicie sesión como usuario normal, es posible que deba realizar ciertas tareas en nodos administrados que requieren privilegios elevados o privilegios de root. Estas tareas incluyen la administración de paquetes, agregar nuevos usuarios y grupos y modificar las configuraciones del sistema, por mencionar solo algunas. Para lograr esto, debe invocar ciertas directivas en el libro de estrategias para ejecutar las tareas como usuario privilegiado en los hosts remotos.

convertirse

Ansible le permite 'convertirse' en otro usuario en el nodo administrado diferente del que está actualmente conectado. La directiva become:yes eleva sus privilegios y le permite realizar tareas que requieren privilegios de root, como instalar y actualizar paquetes y reiniciar el sistema.

Considere un libro de estrategias httpd.yml que instala e inicia el servidor web Apache como se muestra:

---
- name: install and start Apache webserver
  hosts: webservers

  tasks:
       - name: install httpd
         yum: name=httpd  state=latest
         become: yes
       - name: check httpd status
         service: name=httpd state=started

La directiva se convierte en:yes le permite ejecutar comandos como usuario root en el host remoto.

convertirse en usuario

Otra directiva que puedes utilizar para convertirte en otro usuario es become_user. Esto le permite cambiar a un usuario sudo en el host remoto al iniciar sesión y no al usuario con el que inicia sesión.

Por ejemplo, para ejecutar un comando como usuario tecmint en el control remoto, use la directiva como se muestra.

- name: Run a command as the apache user
  command: somecommand
  become: yes
  become_user: tecmint

convertirse en método

Esta directiva anulará el método predeterminado establecido en el archivo ansible.cfg que generalmente está configurado en sudo.

convertirse en banderas

Estos se utilizan a nivel de juego o tarea, por ejemplo, cuando necesita cambiar a un usuario cuando el shell está configurado en nologin.

Por ejemplo,

- name: Run a command as nobody
  command: somecommand
  become: true
  become_method: su
  become_user: nobody
  become_flags: '-s /bin/sh'

Opciones de línea de comandos en escalada de privilegios

Echemos un vistazo a algunas de las opciones de la línea de comandos que puede utilizar para elevar sus privilegios al ejecutar comandos:

  • --ask-become-pass, -K: esto le solicita la contraseña del usuario sudo en el sistema remoto al que está intentando conectarse.
ansible-playbook myplaybook.yml --ask-become-pass

  • --become, -b: esto le permite ejecutar la tarea como usuario root sin solicitar una contraseña.
ansible-playbook myplaybook.yml --become 
  • --become-user=BECOME_USER: te permite ejecutar tareas como otro usuario.
ansible-playbook myplaybook.yml --become-user=tecmint

Validar una configuración de trabajo mediante comandos Ansible ad-hoc

A veces, es posible que desee realizar tareas rápidas y sencillas en hosts o servidores remotos en Ansible sin tener que crear necesariamente un libro de estrategias. En ese caso, deberá ejecutar un comando ad-hoc.

¿Qué es un comando ad hoc?

Un comando ad-hoc ansible es un comando de una línea que le ayuda a ejecutar tareas simples de una manera simple pero eficiente sin la necesidad de crear guías. Dichas tareas incluyen copiar archivos entre hosts, reiniciar servidores, agregar y eliminar usuarios e instalar un solo paquete.

En este tutorial, exploramos varias aplicaciones de los comandos Ansible Ad-Hoc. Usaremos el archivo de inventario a continuación para una demostración.

[webservers]
173.82.115.165

[database_servers]
173.82.202.239

Uso básico de comandos ad hoc

El uso más básico de los comandos Ansible-Adhoc es hacer ping a un host o a un grupo de hosts.

ansible -m ping all

En el comando anterior, el parámetro -m es la opción del módulo. Ping es el comando ad hoc y el segundo parámetro representa todos los hosts en el archivo de inventario. El resultado del comando se muestra a continuación:

Para hacer ping a un grupo particular de hosts, reemplace el parámetro 'todos' con el nombre del grupo. En el siguiente ejemplo, estamos probando la conectividad con hosts del grupo de servidores web.

ansible -m ping webservers

Además, puede utilizar el atributo -a para especificar comandos normales de Linux entre comillas dobles. Por ejemplo, para verificar el tiempo de actividad del sistema de sistemas remotos, ejecute:

ansible -a "uptime" all

Para verificar el uso del disco de los hosts remotos, ejecute.

ansible -a "df -Th" all

Hay cientos y cientos de módulos que puedes usar con el comando Adhoc. Para ver la lista completa de módulos con sus descripciones, ejecute el siguiente comando.

ansible-doc -l

Para ver información detallada sobre un módulo en particular, ejecute el comando.

ansible-doc module_name

Por ejemplo, para buscar más detalles sobre el módulo yum ejecute:

ansible-doc yum

Gestión de paquetes/servicios con Ansible

Los comandos ad hoc de Ansible se pueden utilizar para la instalación y eliminación de paquetes utilizando los administradores de paquetes yum y apt.

Para instalar el servidor web Apache en el host CentOS 7 en el grupo de servidores web en el archivo de inventario, ejecute el comando:

ansible webservers -m yum -a "name=httpd  state=present"

Para verificar la instalación del servidor web Apache, inicie sesión en el cliente remoto y ejecútelo.

rpm -qa | grep httpd

Para desinstalar Apache, simplemente cambie el estado de presente a ausente.

ansible webservers -m yum -a "name=httpd  state=absent"

Nuevamente, para confirmar la eliminación de httpd, ejecute.

rpm -qa | grep httpd

Como se observó, los paquetes del servidor web Apache se han eliminado.

Crear usuarios y grupos usando Ansible

A la hora de crear usuarios, el módulo 'usuario' resulta útil. Para crear un nuevo usuario james con contraseña redhat en el servidor_base_datos del sistema cliente, emita el comando.

ansible database_server -m user -a "name=james password=redhat"

Para confirmar la creación del nuevo usuario, ejecute el comando:

ansible database_servers -a "id james"

Para eliminar al usuario, ejecute el comando:

ansible database_servers -m user -a "name=james state=absent"

Escalada de privilegios

Si está ejecutando Ansible como usuario normal, Ansible proporciona escalada de privilegios en hosts remotos usando la opción --become para adquirir privilegios de root y -k para solicitar la contraseña.

Por ejemplo, para ejecutar el comando ad hoc de Ansible 'netstat -pnltu' con la opción privilegiada –-become y la opción -K para solicitar el contraseña del usuario root para ejecutar el comando.

ansible webservers -m shell -a 'netstat -pnltu' --become -K

Para convertirse en otro usuario que no sea root, utilice el atributo --become-user.

Por ejemplo, para ejecutar 'df -Th' como usuario tecmint en los hosts remotos y solicitar la ejecución de la contraseña:

ansible all -m shell -a 'df -Th' --become-user tecmint -K

Recopilación de datos sobre los sistemas host

Los Hechos se refieren a información detallada sobre un sistema. Esto incluye información sobre la dirección IP, la arquitectura del sistema, la memoria y la CPU, por mencionar algunos.

Para recuperar información sobre hosts remotos, ejecute el comando:

ansible all -m setup 

Transferencia de archivos/copiar archivos

Ansible utiliza el módulo copia para copiar de forma segura archivos desde el control de Ansible a múltiples hosts remotos.

A continuación se muestra un ejemplo de una operación de copia:

ansible webservers -m copy -a "src=/var/log/secure dest=/tmp/"

El comando copia el archivo /var/log/secure en el nodo Ansible Control a hosts remotos en el grupo de servidores web en el destino /tmp.

Puede utilizar el módulo de archivos para cambiar los permisos y la propiedad del archivo.

ansible webservers -m file -a "dest=/tmp/secure mode=600"

Además, puede agregar los argumentos del propietario y del grupo como se muestra:

ansible webservers -m file -a "dest=/tmp/secure mode=600 owner=tecmint group=tecmint"

También puede crear directorios, de manera similar a mkdir -p como se muestra.

ansible webservers -m file -a "dest=/path/to/directory mode=755 owner=tecmint group=tecmint state=directory"

Por ejemplo,

ansible webservers -m file -a "dest=/home/tecmint/data mode=755 owner=tecmint group=tecmint state=directory"

Conclusión

En este artículo, explicamos cómo se pueden configurar nodos administrados para ejecutar comandos ad-hoc de Ansible para administrar hosts remotos. Esperamos que te haya resultado útil. Pruébalo y cuéntanos cómo te fue.