Installer Ansible, créer une arborescence propre (inventaires, playbooks, rôles) et lancer un premier ping pour valider la connectivité SSH.
apt, service, copy…).Où ? Sur votre PC/VM Linux (pas sur les serveurs cibles). Sur Debian, Ubuntu ou WSL :
sudo apt update
sudo apt install -y ansible
Vérification : la commande ci-dessous doit afficher un numéro de version (2.10 ou supérieur).
ansible --version
Sur Fedora / RHEL, c'est sudo dnf install ansible. Sur macOS, brew install ansible. Sur Arch, sudo pacman -S ansible.
Ansible se connecte aux serveurs par SSH, comme vous le feriez à la main. On va automatiser ça en utilisant une clé SSH (plus sûr qu'un mot de passe et requis pour l'automatisation).
2.1 — Sur chaque serveur cible, créer l'utilisateur admin avec les droits sudo sans mot de passe :
# Créer l'utilisateur admin
sudo adduser admin
# Lui donner sudo sans mot de passe
echo 'admin ALL=(ALL) NOPASSWD:ALL' | sudo tee /etc/sudoers.d/admin
sudo chmod 0440 /etc/sudoers.d/admin
2.2 — Sur la machine de contrôle, générer une paire de clés SSH (si vous n'en avez pas déjà une) :
ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519 -N ""
L'option -N "" crée la clé sans passphrase (pratique pour l'automatisation en labo, à éviter en production).
2.3 — Copier votre clé publique sur chaque serveur (remplacez l'IP par celle de votre serveur) :
# Adaptez l'IP à votre environnement
ssh-copy-id admin@< votre IP >
2.4 — Vérification : vous devez pouvoir vous connecter sans qu'on vous demande de mot de passe.
ssh admin@< votre IP >
# Une fois connecté :
sudo whoami # doit répondre "root" sans demander de mot de passe
exit
On travaille toujours dans un dossier dédié. Sur la machine de contrôle, placez-vous où vous voulez (par ex. votre home) puis créez la structure d'un coup :
cd ~
mkdir -p ansible/{inventories/dev,inventories/prod,playbooks,roles}
cd ansible
Résultat — voici la structure que vous obtenez (les fichiers .yml et ansible.cfg seront créés aux étapes suivantes) :
ansible/
├── ansible.cfg ← étape 4
├── inventories/
│ ├── dev/inventory.yml ← étape 5 (labo)
│ └── prod/inventory.yml (production, plus tard)
├── playbooks/ (vos scénarios)
└── roles/ (vos rôles réutilisables)
Pour pouvoir tester vos playbooks sur des serveurs de développement sans risque avant de les jouer en production. Mêmes playbooks, inventaires différents.
ansible.cfg (la configuration du projet)Ce fichier évite de retaper les mêmes options à chaque commande. Créez-le à la racine de ansible/ :
nano ansible.cfg
Et collez ce contenu (adaptez le chemin de la clé SSH si besoin) :
[defaults]
inventory = inventories/
remote_user = admin
private_key_file = /root/.ssh/id_ed25519
host_key_checking = False
roles_path = roles/
[privilege_escalation]
become = true
become_method = sudo
Décryptage ligne par ligne :
inventory — où trouver la liste des serveurs (on pointe sur le dossier inventories/).remote_user — l'utilisateur SSH créé à l'étape 2 (admin).private_key_file — votre clé privée SSH (ici celle de root).host_key_checking = False — évite la question « Are you sure you want to continue connecting ? » à la première connexion. Pratique en labo, à éviter en prod.become = true — Ansible utilisera sudo par défaut.L'inventaire, c'est juste la liste de vos serveurs, organisés en groupes (web, db, etc.). Créez le fichier :
nano inventories/dev/inventory.yml
Contenu d'exemple — remplacez l'IP par celle de votre serveur :
all:
children:
web:
hosts:
dev-lab:
ansible_host: < votre IP >
db:
hosts:
dev-lab:
ansible_host: < votre IP >
YAML est très strict sur l'indentation : utilisez uniquement des espaces (pas de tabulations). 2 espaces par niveau, et soyez constant.
Vérification : Ansible doit pouvoir lire votre inventaire.
ansible-inventory --list -y
ping)Le module ping d'Ansible vérifie que la connexion SSH + Python fonctionnent sur la cible. C'est le « Hello World » d'Ansible.
# Pinguer tous les serveurs de l'inventaire
ansible all -m ping
# Ou un seul groupe
ansible web -m ping
Réponse attendue — pong du serveur :
dev-lab | SUCCESS => {
"ping": "pong"
}
sudo systemctl status ssh).ssh-copy-id de l'étape 2.sudo apt install python3.Avant d'écrire des playbooks, on peut envoyer une commande unique à plusieurs serveurs en même temps :
# L'uptime de tous les serveurs web
ansible web -m shell -a "uptime"
# Installer le paquet curl partout (nécessite sudo)
ansible web -m apt -a "name=curl state=present" --become
# Redémarrer un service
ansible web -m service -a "name=nginx state=restarted" --become
Décryptage :
-m <module> — quel module utiliser (shell, apt, service…).-a "..." — les arguments passés au module.--become — passer en root via sudo.Votre environnement Ansible est opérationnel : vous pouvez piloter vos serveurs depuis un seul endroit. La prochaine étape : écrire un vrai playbook réutilisable.