Recherche de site Web

Comment configurer des nœuds gérés Ansible et exécuter des commandes ad hoc - Partie 3


Dans les deux articles précédents de cette série Ansible, nous avons expliqué les composants principaux d'Ansible et la configuration du nœud de contrôle Ansible. Dans cette partie 3, nous montrerons comment configurer des nœuds gérés Ansible pour exécuter des commandes ad hoc sur des hôtes distants.

Configurer l'authentification SSH sans mot de passe sur les nœuds gérés Ansible

Pour récapituler notre dernier sujet, la gestion des hôtes distants avec Ansible nécessite la mise en place d'une authentification SSH sans mot de passe entre le nœud de contrôle Ansible et les hôtes gérés. Cela implique la génération d'une paire de clés (paire de clés SSH publique et privée) sur le nœud Ansible Control et la copie de la clé publique sur tous les hôtes distants. Ce sera une étape cruciale pour l’avenir et facilitera grandement votre travail.

Configurer l'élévation de privilèges sur les nœuds gérés

Lorsque vous êtes connecté en tant qu'utilisateur standard, vous devrez peut-être effectuer certaines tâches sur des nœuds gérés qui nécessitent des privilèges élevés ou des privilèges root. Ces tâches incluent la gestion des packages, l'ajout de nouveaux utilisateurs et groupes et la modification des configurations système, pour n'en citer que quelques-unes. Pour y parvenir, vous devez appeler certaines directives du playbook pour exécuter les tâches en tant qu'utilisateur privilégié sur les hôtes distants.

devenir

Ansible vous permet de 'devenir' un autre utilisateur sur le nœud géré différent de celui actuellement connecté. La directive become:yes élève vos privilèges et vous permet d'effectuer des tâches qui nécessitent des privilèges root tels que l'installation et la mise à jour des packages et le redémarrage du système.

Considérons un playbook httpd.yml qui installe et démarre le serveur Web Apache comme indiqué :

---
- 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 directive devenir : oui vous permet d'exécuter des commandes en tant qu'utilisateur root sur l'hôte distant.

devenir_utilisateur

Une autre directive que vous pouvez utiliser pour devenir un autre utilisateur est become_user. Cela vous permet de passer à un utilisateur sudo sur l'hôte distant lors de la connexion et non à l'utilisateur sous lequel vous vous connectez.

Par exemple, pour exécuter une commande en tant qu'utilisateur tecmint sur la télécommande, utilisez la directive comme indiqué.

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

devenir_méthode

Cette directive remplacera la méthode par défaut définie dans le fichier ansible.cfg qui est généralement définie sur sudo.

devenir_flags

Ceux-ci sont utilisés au niveau du jeu ou de la tâche, par exemple lorsque vous devez passer à un utilisateur lorsque le shell est défini sur nologin.

Par exemple,

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

Options de ligne de commande dans l'élévation des privilèges

Jetons un coup d'œil à certaines des options de ligne de commande que vous pouvez utiliser pour élever vos privilèges lors de l'exécution de commandes :

  • --ask-become-pass, -K – Cela vous demande le mot de passe de l'utilisateur sudo sur le système distant auquel vous essayez de vous connecter.
ansible-playbook myplaybook.yml --ask-become-pass

  • --become, -b – Cela vous permet d'exécuter la tâche en tant qu'utilisateur root sans demander de mot de passe.
ansible-playbook myplaybook.yml --become 
  • --become-user=BECOME_USER – Il vous permet d'exécuter des tâches en tant qu'autre utilisateur.
ansible-playbook myplaybook.yml --become-user=tecmint

Valider une configuration de travail à l'aide de commandes Ansible ad hoc

Parfois, vous souhaiterez peut-être effectuer des tâches simples et rapides sur des hôtes ou des serveurs distants dans Ansible sans nécessairement avoir à créer un playbook. Dans ce cas, vous devrez exécuter une commande ad hoc.

Qu'est-ce qu'une commande ad hoc ?

Une commande ad hoc ansible est une commande sur une seule ligne qui vous aide à exécuter des tâches simples de manière simple mais efficace sans avoir besoin de créer des playbooks. Ces tâches incluent la copie de fichiers entre les hôtes, le redémarrage des serveurs, l'ajout et la suppression d'utilisateurs et l'installation d'un seul package.

Dans ce didacticiel, nous explorons diverses applications des commandes Ansible Ad-Hoc. Nous allons utiliser le fichier d'inventaire ci-dessous pour une démonstration.

[webservers]
173.82.115.165

[database_servers]
173.82.202.239

Utilisation de base des commandes ad hoc

L'utilisation la plus basique des commandes Ansible-Adhoc consiste à envoyer une requête ping à un hôte ou à un groupe d'hôtes.

ansible -m ping all

Dans la commande ci-dessus, le paramètre -m est l'option du module. Ping est la commande ad hoc et le deuxième paramètre représente tous les hôtes du fichier d'inventaire. Le résultat de la commande est présenté ci-dessous :

Pour envoyer un ping à un groupe particulier d'hôtes, remplacez le paramètre 'all' par le nom du groupe. Dans l'exemple ci-dessous, nous testons la connectivité avec les hôtes du groupe des serveurs Web.

ansible -m ping webservers

De plus, vous pouvez utiliser l'attribut -a pour spécifier les commandes Linux classiques entre guillemets doubles. Par exemple, pour vérifier la disponibilité du système des systèmes distants, exécutez :

ansible -a "uptime" all

Pour vérifier l'utilisation du disque des hôtes distants, exécutez.

ansible -a "df -Th" all

Il existe des centaines et des centaines de modules que vous pouvez utiliser avec la commande Adhoc. Pour afficher la liste complète des modules avec leurs descriptions, exécutez la commande ci-dessous.

ansible-doc -l

Pour afficher des informations détaillées sur un module particulier, exécutez la commande.

ansible-doc module_name

Par exemple, pour rechercher plus de détails sur l'exécution du module yum :

ansible-doc yum

Gestion des packages/services avec Ansible

Les commandes adhoc Ansible peuvent être utilisées pour l'installation et la suppression de packages à l'aide des gestionnaires de packages yum et apt.

Pour installer le serveur Web Apache sur l'hôte CentOS 7 sous le groupe de serveurs Web dans le fichier d'inventaire, exécutez la commande :

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

Pour vérifier l'installation du serveur Web Apache, connectez-vous au client distant et exécutez.

rpm -qa | grep httpd

Pour désinstaller Apache, changez simplement l'état de présent à absent.

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

Encore une fois, pour confirmer la suppression de httpd, exécutez.

rpm -qa | grep httpd

Comme observé, les packages du serveur Web Apache ont été purgés.

Création d'utilisateurs et de groupes à l'aide d'Ansible

Lors de la création d’utilisateurs, le module « utilisateur » s’avère pratique. Pour créer un nouvel utilisateur james avec le mot de passe redhat sur le serveur_base de données du système client, exécutez la commande.

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

Pour confirmer la création du nouvel utilisateur, exécutez la commande :

ansible database_servers -a "id james"

Pour supprimer l'utilisateur, exécutez la commande :

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

Augmentation des privilèges

Si vous exécutez Ansible en tant qu'utilisateur régulier, Ansible permet une élévation de privilèges sur les hôtes distants en utilisant l'option --become pour acquérir les privilèges root et -k pour demander le mot de passe.

Par exemple, pour exécuter la commande adhoc Ansible 'netstat -pnltu' avec l'option privilégiée –-become et l'option -K pour demander le le mot de passe de l'utilisateur root pour exécuter la commande.

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

Pour devenir un autre utilisateur que root, utilisez l'attribut --become-user.

Par exemple, pour exécuter « df -Th » en tant qu'utilisateur tecmint sur les hôtes distants et demander le mot de passe, exécutez :

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

Recueillir des informations sur les systèmes hôtes

Les Faits font référence à des informations détaillées sur un système. Cela inclut des informations sur l'adresse IP, l'architecture du système, la mémoire et le processeur, pour n'en citer que quelques-uns.

Pour récupérer des informations sur les hôtes distants, exécutez la commande :

ansible all -m setup 

Transfert de fichiers/copie de fichiers

Ansible utilise le module copy pour copier en toute sécurité des fichiers du contrôle Ansible vers plusieurs hôtes distants.

Voici un exemple d'opération de copie :

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

La commande copie le fichier /var/log/secure dans le nœud Ansible Control sur les hôtes distants du groupe de serveurs Web dans la destination /tmp.

Vous pouvez utiliser le module de fichiers pour modifier les autorisations et la propriété des fichiers.

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

De plus, vous pouvez ajouter les arguments du propriétaire et du groupe comme indiqué :

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

Vous pouvez également créer des répertoires, de la même manière que mkdir -p comme indiqué.

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

Par exemple,

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

Conclusion

Dans cet article, nous expliquons comment configurer des nœuds gérés pour exécuter des commandes ad hoc Ansible afin de gérer des hôtes distants. Nous espérons que vous l’avez trouvé utile. Essayez-le et dites-nous comment ça s'est passé.