Chapitre 7 - Explications supplémentaires et dépannage Ansible
📝 Introduction
Dans ce chapitre, nous allons explorer l'utilisation des boucles dans Ansible pour automatiser des tâches répétitives de manière efficace. Les boucles vous permettent d'exécuter une action plusieurs fois sans avoir à répéter manuellement le code pour chaque élément. Cette fonctionnalité est particulièrement utile pour :
Commandes supplémentaires pour la pratique 02
01 - Commande ssh-keygen
:
ssh-keygen -t rsa -b 2048 -N "" -f ~/.ssh/id_rsa
Options :
-
-t rsa
:
Spécifie le type d'algorithme pour la génération de la clé SSH. Ici,rsa
indique l'utilisation de l'algorithme RSA (Rivest–Shamir–Adleman), un des algorithmes les plus couramment utilisés pour les clés SSH. -
-b 2048
:
Spécifie le nombre de bits pour la clé. Ici,2048
signifie que la clé RSA sera de 2048 bits. Une clé de cette longueur est considérée comme suffisamment sécurisée pour la plupart des cas d'utilisation. Plus le nombre est élevé, plus la clé est sécurisée, mais cela peut ralentir les performances.
Autres options dans la commande :
-
-N ""
:
Définit la passphrase (mot de passe) pour protéger la clé privée. Ici,""
signifie qu'aucune passphrase n'est définie, rendant l'utilisation de la clé plus rapide, mais moins sécurisée. Si un mot de passe était spécifié, il aurait été demandé lors de l'utilisation de la clé. -
-f ~/.ssh/id_rsa
:
Spécifie le chemin et le nom du fichier de sortie pour la clé privée générée (id_rsa
). La clé publique correspondante sera enregistrée dans~/.ssh/id_rsa.pub
.
Résumé global :
Cette commande génère une paire de clés RSA de 2048 bits sans passphrase et enregistre la clé privée dans ~/.ssh/id_rsa
et la clé publique dans ~/.ssh/id_rsa.pub
.
02 - Commande ansible mail -m yum -a "name=procps-ng state=present" -i inventory.ini
:
ansible mail -m yum -a "name=procps-ng state=present" -i inventory.ini
02.1 - explication de la commande
- Cette commande Ansible exécute une commande ad hoc sur le groupe d'hôtes
mail
défini dans le fichierinventory.ini
pour installer le packageprocps-ng
.
Détails des options :
mail
: Groupe d'hôtes ciblés (par exemplenode4
etnode6
dans le fichierinventory.ini
).-m yum
: Utilise le moduleyum
pour gérer les paquets sur des systèmes basés sur RedHat (comme CentOS, AlmaLinux).-a "name=procps-ng state=present"
:name=procps-ng
: Spécifie le nom du package à installer (procps-ng
, qui contient des outils commeps
,top
, etc.).state=present
: S'assure que le package est installé (s'il n'est pas présent, il sera installé).
-i inventory.ini
: Fichier d'inventaire qui indique sur quels hôtes Ansible doit exécuter la commande.
Résumé :
Cette commande installe le package procps-ng
sur tous les hôtes du groupe mail
.
02.2. procps-ng
: Qu'est-ce que c'est ?
procps-ng
est une suite d'outils essentiels sur les systèmes Linux pour monitorer et gérer les processus en cours d'exécution. Elle inclut plusieurs utilitaires en ligne de commande utilisés pour surveiller les performances du système, afficher les informations sur les processus, et interagir avec eux.
Principaux outils inclus dans procps-ng
:
-
ps
(Process Status) :- Affiche la liste des processus en cours d'exécution sur le système.
- Exemples d'utilisation :
ps aux # Affiche tous les processus
ps -ef # Format détaillé des processus
-
top
:- Affiche en temps réel l'utilisation des ressources système (CPU, mémoire) et les processus les plus consommateurs.
- Très utile pour surveiller l'état de la machine en direct.
- Exemple d'utilisation :
top
-
free
:- Affiche des informations sur la mémoire vive (RAM) et la swap, ainsi que leur niveau d'utilisation.
- Exemple :
free -h # Affiche la mémoire en format lisible (Mo/Go)
-
uptime
:- Affiche le temps écoulé depuis le dernier démarrage du système, le nombre d'utilisateurs connectés et la charge moyenne du système.
- Exemple :
uptime
-
kill
:- Envoie un signal pour arrêter un processus (par exemple
SIGKILL
pour forcer l'arrêt). - Exemple :
kill -9 <PID>
- Envoie un signal pour arrêter un processus (par exemple
-
pidof
:- Renvoie le PID (identifiant de processus) d'un programme en cours d'exécution.
- Exemple :
pidof sshd # Donne le PID du service SSH
-
watch
:- Permet d'exécuter une commande à intervalles réguliers et d'afficher son résultat.
- Exemple :
watch -n 5 free -h # Affiche l'état de la mémoire toutes les 5 secondes
02.3. Utilisation typique de procps-ng
:
Utilisation typique de procps-ng
:
- Surveillance des performances : outils comme
ps
,top
, etuptime
sont couramment utilisés pour vérifier la charge système. - Gestion des processus :
kill
etpidof
permettent de gérer les processus en cours d'exécution. - Statistiques mémoire :
free
est utile pour diagnostiquer des problèmes de mémoire.
02.3.1. Pourquoi l'utiliser dans un environnement Ansible ?
Dans le cadre d'Ansible, l'installation de procps-ng
est importante pour :
- Utiliser les commandes comme
ps
,top
, oufree
pour vérifier l'état des serveurs. - Automatiser la surveillance des ressources et la gestion des processus via des playbooks ou des scripts d'audit.
Résumé :
procps-ng
est une collection d'outils indispensable pour surveiller les performances d'un système Linux et gérer les processus. L'installation de ce package via Ansible permet de garantir que ces outils sont disponibles sur les machines cibles pour des vérifications automatisées et du dépannage efficace.
02.4. procps-ng
: Pourquoi installer ce package ?
Le package procps-ng
est disponible sur les deux types de systèmes, aussi bien pour les distributions basées sur Debian/Ubuntu que sur celles basées sur RedHat/CentOS/AlmaLinux. Cependant, la manière de l'installer diffère en fonction du gestionnaire de paquets utilisé :
02.4.1. Distributions basées sur Debian/Ubuntu :
-
Gestionnaire de paquets :
apt
-
Le package
procps-ng
est inclus sous le nom génériqueprocps
.Commande d'installation :
sudo apt update && sudo apt install procps
- Exemple de distribution : Ubuntu, Debian.
02.4.2. Distributions basées sur RedHat/CentOS :
-
Gestionnaire de paquets :
yum
oudnf
-
Le package
procps-ng
est directement disponible et s'appelle égalementprocps-ng
.Commande d'installation :
sudo yum install procps-ng
- Exemple de distribution : RedHat, CentOS, AlmaLinux, Rocky Linux.
02.4.3. Pourquoi ces différences ?
- Le nom
procps-ng
désigne le projet maintenu en amont par la communauté Linux. - Sur les systèmes Debian/Ubuntu, le package binaire est nommé
procps
, mais il provient du même projetprocps-ng
. - Sur les systèmes RedHat/CentOS, le nom du package est resté
procps-ng
directement.
02.4.4. Résumé :
- Pour Ubuntu/Debian : installer
procps
viaapt
. - Pour RedHat/CentOS/AlmaLinux : installer
procps-ng
viayum
oudnf
.
Les outils commeps
,top
,free
, etc., sont identiques sur les deux types de distributions, seule la méthode d'installation diffère légèrement.
02.5. uptime
: Explication
La commande uptime
affiche des informations sur le temps d'activité du système et sa charge moyenne.
Détails de la sortie uptime
:
Exemple de sortie :
14:35:10 up 3 days, 4:21, 2 users, load average: 0.34, 0.45, 0.40
14:35:10
: Heure actuelle du système.up 3 days, 4:21
: Temps écoulé depuis le dernier redémarrage (ici, 3 jours et 4 heures 21 minutes).2 users
: Nombre d'utilisateurs connectés simultanément.load average: 0.34, 0.45, 0.40
: Moyennes de charge du système sur les 1, 5 et 15 dernières minutes :- Ces valeurs mesurent l'utilisation du CPU et la charge du système (nombre de processus en file d’attente).
- Une charge proche de
1.0
indique que le système utilise pleinement un cœur de CPU. - Si la charge dépasse
1.0
sur un système monocœur, cela signifie que le système est sous forte charge.
Contexte dans Ansible :
Dans cette commande Ansible, uptime
est exécutée sur les serveurs du groupe mail
pour vérifier depuis combien de temps ils sont en fonctionnement et évaluer la charge système récente. Cela permet de diagnostiquer des problèmes de surcharge ou de redémarrages inattendus.
02.6. Commande df -h
: Explication
La commande df
(disk free) est utilisée pour afficher l’espace disque utilisé et disponible sur les systèmes de fichiers.
Détails des options :
-
-h
(human-readable) : Affiche les tailles dans un format lisible par l'humain (Ko, Mo, Go au lieu de blocs numériques).
Exemple de sortie :Filesystem Size Used Avail Use% Mounted on
/dev/sda1 50G 20G 30G 40% /
tmpfs 1.9G 0B 1.9G 0% /dev/shm -
Colonnes clés :
Filesystem
: Nom du système de fichiers ou du disque monté.Size
: Taille totale du système de fichiers.Used
: Espace disque utilisé.Avail
: Espace disque disponible.Use%
: Pourcentage d'utilisation du disque.Mounted on
: Point de montage où le disque est accessible.
Contexte dans Ansible :
Dans cette commande Ansible :
- Le module
command
est utilisé pour exécuterdf -h
sur les serveurs du groupedatabase
(par exemplenode2
etnode3
). - Cela permet de vérifier l’espace disque disponible sur ces machines de manière centralisée via Ansible.
- Cela est utile pour éviter les risques d’espace disque saturé sur les serveurs de base de données, qui peuvent être critiques pour leur bon fonctionnement.
Résumé :
La commande df -h
permet de vérifier l’état de l’espace disque sur les serveurs du groupe database
afin de diagnostiquer les éventuels problèmes liés à l'espace disponible.
02.7. Explication de la commande /bin/bash -c "apt update && apt install -y openssh-server python3 && service ssh start && tail -f /dev/null" :
/bin/bash -c "apt update && apt install -y openssh-server python3 && service ssh start && tail -f /dev/null"
Cette commande est un ensemble d'instructions exécutées à l'intérieur d'un conteneur pour installer des services essentiels et le maintenir actif. Elle est passée en argument à bash -c
pour être exécutée comme une seule commande.
Décomposition :
-
apt update
:- Met à jour la liste des paquets disponibles pour garantir que les dernières versions sont accessibles.
-
apt install -y openssh-server python3
:- Installe deux packages sans demander de confirmation (
-y
) :openssh-server
: Serveur SSH pour permettre des connexions SSH au conteneur.python3
: Python est nécessaire pour exécuter des commandes Ansible sur la machine distante.
- Installe deux packages sans demander de confirmation (
-
service ssh start
:- Démarre le service SSH pour accepter des connexions via le port 22.
-
tail -f /dev/null
:- Maintient le conteneur actif en exécutant de façon continue la commande
tail
sur/dev/null
(fichier vide). - Sans cette commande, le conteneur s’arrêterait après l'exécution des installations, car il n'y aurait plus de processus actif à l’intérieur.
- Maintient le conteneur actif en exécutant de façon continue la commande
But de cette commande :
- Préparer le conteneur avec un serveur SSH et Python pour être accessible par Ansible.
- Maintenir le conteneur en cours d'exécution pour permettre des connexions sans arrêt immédiat.
Résumé :
Cette commande configure un conteneur Linux en installant les services nécessaires (SSH et Python3) et le maintient actif pour des tests ou des connexions Ansible.
02.8. Explication de la commande yum update -y && yum install -y openssh-server passwd python3 && echo 'root:root' | chpasswd && ssh-keygen -A && /usr/sbin/sshd -D
/bin/bash -c "yum update -y && yum install -y openssh-server passwd python3 && echo 'root:root' | chpasswd && ssh-keygen -A && /usr/sbin/sshd -D"
Cette commande est similaire à la précédente mais adaptée pour des distributions basées sur RedHat (comme CentOS, AlmaLinux). Elle installe des services, configure l'utilisateur root, et lance le service SSH de manière permanente.
Décomposition :
-
yum update -y
:- Met à jour tous les paquets installés vers leurs versions les plus récentes sans demander de confirmation (
-y
).
- Met à jour tous les paquets installés vers leurs versions les plus récentes sans demander de confirmation (
-
yum install -y openssh-server passwd python3
:- Installe les packages nécessaires :
openssh-server
: Serveur SSH pour accepter des connexions distantes.passwd
: Utilisé pour modifier le mot de passe de l'utilisateurroot
.python3
: Requis pour l'exécution de commandes Ansible.
- Installe les packages nécessaires :
-
echo 'root:root' | chpasswd
:- Définit le mot de passe de l'utilisateur
root
àroot
. chpasswd
: Lit l'entrée standard pour changer le mot de passe.
- Définit le mot de passe de l'utilisateur
-
ssh-keygen -A
:- Génère les clés SSH par défaut (clé privée/public pour les types RSA, DSA, ECDSA, etc.), nécessaires pour le bon fonctionnement du serveur SSH.
-
/usr/sbin/sshd -D
:- Lance le démon SSH (
sshd
) en mode "non-détaché" (-D
), c'est-à-dire qu’il tourne au premier plan pour maintenir le conteneur actif.
- Lance le démon SSH (
But de cette commande :
- Installer les services SSH et Python sur un conteneur RedHat/CentOS/AlmaLinux.
- Configurer un mot de passe
root
pour permettre les connexions SSH. - Maintenir le service SSH actif pour permettre les connexions.
Résumé :
Cette commande prépare un conteneur Linux basé sur RedHat avec SSH et Python, génère des clés SSH, définit un mot de passe pour root
, et maintient le service SSH actif pour accepter des connexions distantes via Ansible.