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


En los dos artículos anteriores de este Cómo configurar el nodo de control de Ansible. En esta parte 3, demostraremos cómo puede configurar los nodos administrados de Ansible para ejecutar comandos ad-hoc en hosts remotos.

Configure la autenticación SSH sin contraseña para los 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ública y privada) en el nodo de Ansible Control 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 el aumento de privilegios en nodos administrados

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

Ansible le permite 'convertirse' en otro usuario en el nodo administrado diferente del que está conectado actualmente. La directiva convertirse: sí 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 jugadas 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: sí le permite ejecutar comandos como usuario root en el host remoto.

Otra directiva que puede utilizar para convertirse 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

Esta directiva anulará el método predeterminado establecido en el archivo ansible.cfg, que generalmente se establece en sudo.

Estos se utilizan a nivel de juego o tarea, por ejemplo, cuando necesita cambiar a un usuario cuando el shell está configurado para 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 la línea de comandos en la intensificación de privilegios

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

  • --ask-Become-pass , -K - Esto le solicita la contraseña del usuario sudo en el sistema remoto 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 u003d BECOME_USER : le 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 simples en hosts o servidores remotos en Ansible sin tener que crear necesariamente un libro de jugadas. En ese caso, necesitaría ejecutar un comando ad-hoc.

Un comando ansible ad-hoc es un comando de una línea que lo ayuda a ejecutar tareas simples de una manera simple pero eficiente sin la necesidad de crear libros de jugadas. Tales 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. Vamos a utilizar el archivo de inventario a continuación para una demostración.

[webservers]
173.82.115.165

[database_servers]
173.82.202.239

El uso más básico de los comandos de Ansible-Adhoc es hacer ping a un host o 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 adhoc 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 en el grupo de servidores web.

# ansible -m ping webservers

Además, puede utilizar el atributo -a para especificar los 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 comprobar el uso del disco de los hosts remotos, ejecute.

# ansible -a "df -Th" all

Hay cientos y cientos de módulos que puede 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

Los comandos de Ansible adhoc se pueden usar para la instalación y eliminación de paquetes usando administradores de paquetes yum y apt.

Para instalar el servidor web Apache en el host de 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 ejecute.

# 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 run.

# rpm -qa | grep httpd

Como se ha observado, los paquetes del servidor web Apache se han depurado.

Al crear usuarios, el módulo "usuario" resulta útil. Para crear un nuevo usuario james con contraseña redhat en el sistema cliente database_server, 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"

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

Por ejemplo, para ejecutar el comando adhoc de Ansible 'netstat -pnltu' con la opción privilegiada - -become y la opción -K para solicitar la contraseña del usuario raíz para ejecutar el comando .

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

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

Por ejemplo, para ejecutar "df -Th" como usuario de tecmint en los hosts remotos y solicitar la contraseña, ejecute:

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

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 

Ansible usa la copia del módulo para copiar archivos de forma segura desde el control 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 archivo 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 de propietario y 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"

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