Ansible – script d’inventaire
Petit script qui permet de générer un fichier d’inventaire pour Ansible avec nmap.
#!/bin/bash # Vérifier si nmap est installé if ! command -v nmap &> /dev/null then echo "Erreur : nmap n'est pas installé. Veuillez installer nmap avant de continuer." exit 1 fi # Vérifier si l'utilisateur a passé un réseau en argument if [ -z "$1" ]; then echo "Usage: $0 <network>" echo "Exemple: $0 192.168.1.0/24" exit 1 fi # Prendre le réseau passé en argument NETWORK=$1 # Vérifier si le script est exécuté avec des privilèges root if [ "$EUID" -ne 0 ]; then echo "Avertissement : Les privilèges root sont requis pour détecter l'OS. Le script continuera sans détection d'OS." # Effectuer un simple scan sans détection d'OS nmap -sn "$NETWORK" -oG basic_scan.txt SCAN_FILE="basic_scan.txt" else # Scan du réseau avec détection d'OS echo "Scanning le réseau $NETWORK pour détecter les OS..." nmap -O "$NETWORK" -oG os_scan.txt SCAN_FILE="os_scan.txt" fi # Fichiers d'inventaire INI INVENTORY_FILE="inventory_by_os.ini" # Créer des groupes pour les OS courants dans le fichier d'inventaire echo "[linux]" > $INVENTORY_FILE echo "[windows]" >> $INVENTORY_FILE echo "[mac_os]" >> $INVENTORY_FILE echo "[unknown_os]" >> $INVENTORY_FILE # Lire le fichier de scan et trier les hôtes par OS while read -r line; do ip=$(echo "$line" | awk '{print $2}') if [ "$EUID" -eq 0 ]; then # Si l'utilisateur est root, essayer de détecter l'OS if echo "$line" | grep -q "Linux"; then # Ajouter les hôtes Linux echo "$ip ansible_user=your_user ansible_ssh_private_key_file=~/.ssh/id_rsa" >> $INVENTORY_FILE elif echo "$line" | grep -q "Windows"; then # Ajouter les hôtes Windows echo "$ip ansible_user=your_user ansible_password=your_password" >> $INVENTORY_FILE elif echo "$line" | grep -q "Darwin" || echo "$line" | grep -q "Mac OS"; then # Ajouter les hôtes macOS (Darwin est le noyau de macOS) echo "$ip ansible_user=your_user ansible_ssh_private_key_file=~/.ssh/id_rsa" >> $INVENTORY_FILE elif echo "$line" | grep -q "Running:"; then # Si l'OS n'est pas Linux, Windows ou macOS, le classer dans "unknown_os" echo "$ip" >> $INVENTORY_FILE fi else # Si l'utilisateur n'est pas root, tous les hôtes vont dans "unknown_os" if echo "$line" | grep -q "Host: "; then echo "$ip" >> $INVENTORY_FILE fi fi done < $SCAN_FILE # Afficher le résultat echo "Inventaire généré : $INVENTORY_FILE" cat $INVENTORY_FILE
Explications du script :
- Vérification des privilèges root : Le script vérifie si le script est exécuté avec les privilèges root en vérifiant la variable
$EUID
. Si l’UID est différent de0
, cela signifie que l’utilisateur n’a pas les privilèges nécessaires. - Avertissement : Si le script est exécuté sans privilèges root, un message d’avertissement est affiché pour informer l’utilisateur que la détection d’OS ne sera pas effectuée.
- Continuation sans détection d’OS : Si les privilèges root sont absents, le script fait un scan simple sans détection d’OS (
nmap -sn
), et tous les hôtes sont regroupés sous le groupe[unknown_os]
. - Utilisation de fichiers de scan différents :
- Si root est disponible : le fichier
os_scan.txt
est utilisé (avec détection d’OS). - Si root est absent : le fichier
basic_scan.txt
est utilisé (sans détection d’OS).
- Si root est disponible : le fichier
- Gestion des hôtes :
- Si les privilèges root sont présents, le script tente de détecter l’OS et de classer les hôtes dans les groupes correspondants (
[linux]
,[windows]
,[mac_os]
). - Sans root, tous les hôtes sont ajoutés à
[unknown_os]
.
- Si les privilèges root sont présents, le script tente de détecter l’OS et de classer les hôtes dans les groupes correspondants (
Rendez le script exécutable :
chmod +x generate_inventory_by_os.sh
Exécutez le script avec le réseau cible en argument :
./generate_inventory_by_os.sh 192.168.1.0/24
Comportement du script :
- Avec privilèges root : Le script détecte les OS et génère un inventaire avec les groupes
[linux]
,[windows]
,[mac_os]
, et[unknown_os]
. - Sans privilèges root : Le script affiche un avertissement, ne tente pas de détecter l’OS, et classe tous les hôtes sous
[unknown_os]
.
Exemple de fichier d’inventaire généré sans privilèges root :
[linux] [windows] [mac_os] [unknown_os] 192.168.1.10 192.168.1.15 192.168.1.20
Exemple de fichier d’inventaire généré avec privilèges root :
[linux] 192.168.1.10 ansible_user=your_user ansible_ssh_private_key_file=~/.ssh/id_rsa [windows] 192.168.1.20 ansible_user=your_user ansible_password=your_password [mac_os] 192.168.1.25 ansible_user=your_user ansible_ssh_private_key_file=~/.ssh/id_rsa [unknown_os] 192.168.1.30