L’administration d’un serveur Linux implique souvent de répéter les mêmes opérations : vérifier l’espace disque, contrôler les services, créer des comptes, installer des paquets ou préparer de nouveaux serveurs.
Effectuer ces tâches manuellement sur une seule machine peut sembler simple. Mais lorsqu’il faut gérer plusieurs serveurs, les erreurs humaines deviennent plus probables et les opérations prennent davantage de temps.
L’automatisation permet de rendre ces opérations plus rapides, reproductibles et faciles à vérifier. Deux outils sont particulièrement utiles : Bash, pour automatiser les commandes locales, et Ansible, pour appliquer des configurations à plusieurs machines.
1. Quand utiliser Bash et quand utiliser Ansible ?
Bash est un interpréteur de commandes et un langage de script disponible sur de nombreux systèmes Linux. Il convient aux petites tâches qui enchaînent des commandes.
Ansible est un outil d’automatisation qui permet de décrire des opérations et des configurations dans des fichiers YAML. Il est particulièrement utile lorsque les mêmes tâches doivent être appliquées à plusieurs machines.
Voici quelques exemples :
| Besoin | Outil adapté |
|---|---|
| Vérifier l’espace disque chaque jour | Bash |
| Archiver des fichiers locaux | Bash |
| Contrôler plusieurs services sur un serveur | Bash ou Ansible |
| Installer les mêmes paquets sur plusieurs serveurs | Ansible |
| Déployer une configuration identique sur plusieurs machines | Ansible |
| Organiser une procédure de maintenance reproductible | Bash ou Ansible, selon le contexte |
Il n’est pas nécessaire de choisir un seul outil. Un administrateur peut commencer par Bash, puis utiliser Ansible lorsque le nombre de machines ou la complexité des opérations augmente.
2. Créer un premier script Bash
Prenons un exemple simple : afficher l’espace disque disponible et l’état général de la mémoire.
Créez un fichier nommé check-server.sh :
#!/usr/bin/env bash
set -euo pipefail
echo "=== Vérification du disque ==="
df -h
echo
echo "=== Vérification de la mémoire ==="
free -h
echo
echo "=== Charge du système ==="
uptime
Enregistrez le fichier, puis rendez-le exécutable :
chmod +x check-server.sh
Exécutez-le :
./check-server.sh
Le script regroupe trois commandes utiles dans une seule opération. Il peut servir de point de départ pour une procédure de diagnostic plus complète.
La directive set -euo pipefail aide à détecter certains échecs de commande et l’utilisation de variables non définies. Elle ne remplace cependant pas une gestion explicite des erreurs : pour les opérations importantes, il faut prévoir les cas d’échec et vérifier les résultats.
3. Automatiser une vérification quotidienne
Si vous souhaitez exécuter régulièrement ce script, vous pouvez utiliser cron.
Ouvrez la configuration des tâches planifiées de votre utilisateur :
crontab -e
Pour exécuter le script tous les jours à 8 h et enregistrer sa sortie dans un fichier, ajoutez une ligne similaire :
0 8 * * * /home/admin/check-server.sh >> /home/admin/check-server.log 2>&1
Remplacez /home/admin/ par le chemin réel du script et du journal.
La redirection >> ajoute les résultats au fichier existant. Le symbole 2>&1 redirige également les messages d’erreur vers ce fichier.
Attention : un journal qui grossit indéfiniment peut finir par occuper beaucoup d’espace. Pour un usage durable, prévoyez une rotation des journaux ou une méthode de conservation adaptée.
4. Installer Ansible
Ansible permet d’automatiser les opérations sur des machines accessibles par SSH. Sur un environnement Ubuntu ou Debian, l’installation peut se faire à partir des dépôts configurés sur le système :
sudo apt update
sudo apt install ansible
Vérifiez ensuite la version installée :
ansible --version
Les versions disponibles dans les dépôts varient selon la distribution. Pour un environnement professionnel, consultez la documentation officielle afin de choisir une méthode d’installation et une version adaptées.
Ansible fonctionne généralement depuis une machine de contrôle vers les serveurs gérés. Ceux-ci doivent être accessibles, disposer de Python lorsque les modules utilisés le nécessitent et permettre l’authentification configurée.
5. Définir un inventaire de serveurs
Ansible utilise un inventaire pour identifier les machines à administrer.
Créez un fichier inventory.ini :
[webservers]
web1.example.net
web2.example.net
[databases]
db1.example.net
Remplacez ces noms d’exemple par les adresses réelles de vos machines.
Vérifiez que l’inventaire est correctement interprété :
ansible -i inventory.ini all --list-hosts
Avant d’exécuter des opérations administratives, testez la connectivité SSH et vérifiez que les clés, les utilisateurs et les permissions sont correctement configurés.
Vous pouvez ensuite effectuer un test simple :
ansible -i inventory.ini webservers -m ping
Le module ping d’Ansible vérifie la communication avec les machines et leur capacité à exécuter le module. Il ne s’agit pas simplement d’une requête réseau ICMP.
6. Créer un premier playbook Ansible
Un playbook décrit les tâches à effectuer sur un groupe de machines.
Créez un fichier maintenance.yml :
---
- name: Vérifier les serveurs web
hosts: webservers
become: true
tasks:
- name: Vérifier la disponibilité du disque
ansible.builtin.command: df -h
register: disk_report
changed_when: false
- name: Afficher le rapport
ansible.builtin.debug:
var: disk_report.stdout
Ce playbook exécute df -h sur les machines du groupe webservers, puis affiche le résultat.
L’option become: true demande une élévation de privilèges. Elle nécessite une configuration appropriée sur les machines cibles. Pour une simple lecture des informations du disque, cette élévation n’est généralement pas indispensable.
Lancez le playbook :
ansible-playbook -i inventory.ini maintenance.yml
Ce premier exemple ne modifie pas la configuration des serveurs. C’est une bonne façon de se familiariser avec les inventaires, les tâches et les résultats avant de passer à des opérations plus sensibles.
7. Automatiser sans mettre les serveurs en danger
L’automatisation peut accélérer une opération incorrecte tout autant qu’une opération correcte. Quelques règles permettent de limiter les risques :
- Testez les scripts sur une machine non critique.
- Vérifiez les chemins de fichiers avant toute suppression ou modification.
- Évitez de stocker les mots de passe directement dans les scripts.
- Utilisez des clés SSH et des permissions adaptées.
- Limitez les privilèges aux tâches qui en ont réellement besoin.
- Examinez les changements proposés avant de les appliquer à grande échelle.
- Conservez une sauvegarde avant les opérations susceptibles de modifier des données.
Avec Ansible, privilégiez les modules spécialisés lorsqu’ils existent. Par exemple, le module ansible.builtin.apt est préférable à une commande shell générique pour gérer les paquets sur les systèmes compatibles.
8. Un parcours d’apprentissage progressif
Pour apprendre l’automatisation sans se disperser, suivez cet ordre :
- Maîtrisez les commandes Linux et les chemins de fichiers.
- Écrivez de petits scripts Bash avec des variables et des conditions.
- Apprenez à gérer les erreurs et les codes de retour.
- Automatisez une tâche planifiée avec
cron. - Configurez SSH entre une machine de contrôle et un serveur de test.
- Créez un inventaire Ansible.
- Écrivez un premier playbook sans modification destructive.
- Apprenez les variables, les modèles, les rôles et la gestion des secrets.
Cette progression vous permet de comprendre les bases avant de gérer plusieurs serveurs ou de déployer des configurations complexes.
FAQ
Faut-il connaître Bash avant d’apprendre Ansible ?
Ce n’est pas une obligation, mais connaître les commandes Linux, les chemins de fichiers, SSH et les permissions facilite considérablement l’apprentissage.
Ansible nécessite-t-il un agent sur chaque serveur ?
Dans son fonctionnement classique, Ansible se connecte aux machines Linux par SSH et n’exige pas un agent permanent spécifique sur chacune d’elles. Les prérequis dépendent toutefois des modules et de l’environnement utilisés.
Peut-on automatiser des mises à jour avec Ansible ?
Oui. Ansible dispose de modules pour gérer les paquets et les mises à jour. Sur un serveur de production, prévoyez cependant une stratégie de test, des sauvegardes et une procédure de retour arrière adaptée.
Bash suffit-il pour gérer plusieurs serveurs ?
Il est possible d’utiliser Bash sur plusieurs machines, mais la gestion des configurations, des erreurs et des différences entre environnements devient rapidement complexe. Ansible fournit une structure plus adaptée à de nombreuses opérations répétées.
Conclusion
Bash est un excellent point de départ pour automatiser des tâches locales. Ansible permet ensuite de reproduire des opérations de manière structurée sur plusieurs serveurs.
En commençant par des vérifications simples et non destructives, vous apprendrez à construire des automatisations utiles sans compromettre la stabilité de votre infrastructure.