Leçon 2 / 6
Leçon 02 · Ansible

Installer et configurer

Installer Ansible

Ansible s'installe uniquement sur la machine de contrôle — celle depuis laquelle tu vas piloter tes serveurs. Les hôtes gérés n'ont besoin de rien de spécial, juste SSH et Python (déjà présents sur toute distrib Linux moderne).

Sur Ubuntu / Debian

La méthode recommandée passe par le dépôt officiel PPA d'Ansible pour avoir la version la plus récente.

Terminal — Ubuntu / Debian
# Ajouter le dépôt Ansible (Ubuntu)
sudo apt update
sudo apt install -y software-properties-common
sudo add-apt-repository --yes --update ppa:ansible/ansible

# Installer Ansible
sudo apt install -y ansible
💡

Sur Debian, le paquet ansible des dépôts officiels est souvent en retard d'une version majeure. Utilise pip ou le PPA Ubuntu si tu veux la dernière version stable.

Sur macOS

Homebrew est la façon la plus simple d'installer Ansible sur macOS.

Terminal — macOS
# Installer Homebrew si besoin : brew.sh
brew install ansible

Via pip (toutes plateformes)

pip permet d'installer la toute dernière version d'Ansible sur n'importe quelle machine disposant de Python 3.9+. C'est aussi la méthode idéale dans un environnement virtuel.

Terminal
# Dans un virtualenv Python (recommandé)
python3 -m venv ~/.venv/ansible
source ~/.venv/ansible/bin/activate

# Installer ansible-core + la collection community.general
pip install ansible

Vérifier l'installation

Une fois installé, vérifie la version pour t'assurer que tout est en ordre :

Terminal
ansible --version
ansible [core 2.17.0]
  config file = /etc/ansible/ansible.cfg
  python version = 3.12.3
  ansible-playbook location = /usr/bin/ansible-playbook

La ligne config file te dit quel fichier ansible.cfg est utilisé. Si elle affiche None, aucun fichier de config n'est trouvé — c'est normal avant de créer le tien.

Configurer SSH

Ansible se connecte à tes serveurs via SSH. Pour éviter de saisir un mot de passe à chaque commande, il faut configurer une clé SSH.

Générer une paire de clés

Terminal — machine de contrôle
# Générer une clé ED25519 (recommandée, plus moderne que RSA)
ssh-keygen -t ed25519 -C "ansible-control"
# Accepte l'emplacement par défaut (~/.ssh/id_ed25519)
# Laisse la passphrase vide pour l'automatisation

Copier la clé publique sur les hôtes

Terminal
# Copier la clé sur chaque serveur à gérer
ssh-copy-id -i ~/.ssh/id_ed25519.pub user@192.168.1.10
ssh-copy-id -i ~/.ssh/id_ed25519.pub user@192.168.1.11

# Tester la connexion sans mot de passe
ssh user@192.168.1.10
# Si tu entres directement sans mot de passe → c'est bon !
⚠️

La passphrase vide facilite l'automatisation, mais ajoute un risque si la clé privée est compromise. Pour la production, utilise ssh-agent avec une passphrase pour ne la saisir qu'une fois par session.

Le fichier ansible.cfg

ansible.cfg est le fichier de configuration d'Ansible. Il est lu dans cet ordre de priorité : ./ansible.cfg (dossier courant) > ~/.ansible.cfg > /etc/ansible/ansible.cfg. En pratique, on en crée un dans le dossier du projet pour tout centraliser.

ansible.cfg
[defaults]
# Chemin vers le fichier d'inventaire
inventory         = ./hosts

# Utilisateur SSH par défaut
remote_user       = ubuntu

# Clé privée SSH à utiliser
private_key_file  = ~/.ssh/id_ed25519

# Ne pas vérifier les fingerprints SSH (pratique en lab)
host_key_checking = False

# Sortie plus lisible
stdout_callback   = yaml
💡

host_key_checking = False désactive la vérification de l'empreinte SSH — pratique pour un lab avec des VMs éphémères. En production, laisse-la à True pour éviter les attaques de type man-in-the-middle.

Fichier d'inventaire simple

Avant de tester une commande ad-hoc, crée un fichier hosts minimal listant tes serveurs. On verra les inventaires en détail dans la leçon suivante.

hosts
[webservers]
192.168.1.10
192.168.1.11

[all:vars]
ansible_user=ubuntu

Première commande ad-hoc

Une commande ad-hoc est une commande Ansible lancée directement depuis le terminal, sans playbook. C'est idéal pour tester la connectivité ou exécuter une action rapide.

Terminal
# Tester la connectivité sur tous les hôtes
ansible all -i hosts -m ping

# Résultat attendu :
192.168.1.10 | SUCCESS => {
    "changed": false,
    "ping": "pong"
}

Un retour ping: pong confirme qu'Ansible peut joindre le serveur via SSH et que Python est disponible dessus.

Les modules ad-hoc courants

Ansible propose des centaines de modules. Voici les plus utiles en ad-hoc pour le quotidien :

Terminal — exemples de modules ad-hoc
# ping — teste la connexion SSH + Python
ansible all -i hosts -m ping

# command — exécute une commande simple (pas de pipe/redirection)
ansible all -i hosts -m command -a "uptime"

# shell — exécute via /bin/sh (supporte pipes et redirections)
ansible all -i hosts -m shell -a "df -h | grep /dev/sda"

# copy — copie un fichier local vers les hôtes
ansible all -i hosts -m copy -a "src=./config.txt dest=/tmp/config.txt"

# apt — installe un paquet (Ubuntu/Debian)
ansible all -i hosts -m apt -a "name=htop state=present" --become

--become (ou -b) équivaut à sudo sur les hôtes distants. Ajoute-le pour toute commande nécessitant des droits root, comme l'installation de paquets.

// à retenir
  • Ansible s'installe uniquement sur la machine de contrôle — pas sur les hôtes.
  • La connexion passe par SSH : génère une clé avec ssh-keygen et copie-la avec ssh-copy-id.
  • ansible.cfg définit l'inventaire par défaut, l'utilisateur et la clé SSH.
  • ansible all -i hosts -m ping est le premier test à faire après installation.
  • Les modules ad-hoc courants : ping, command, shell, copy, apt.
  • Ajoute --become pour exécuter des commandes avec sudo sur les hôtes.