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é.