Ansible et l'automatisation de VPS Linux
Configurer un VPS Linux manuellement en ligne de commande via un terminal SSH, c'est répéter les mêmes opérations à chaque nouveau serveur : mise à jour des paquets, création d'utilisateur admin, configuration du pare-feu, scripts de démarrage automatique au boot, redémarrage des services. Ansible est l'outil d'automatisation de référence sur serveur Linux : sans agent, il se connecte en SSH depuis votre terminal et applique un playbook YAML qui décrit l'état cible du serveur VPS. Idempotent par conception, un deuxième passage ne modifie rien si les configurations sont déjà en place.
Ce guide s'adresse aux administrateurs de VPS Ubuntu 22.04 LTS ou Debian 12 qui veulent automatiser la configuration initiale de leurs serveurs Linux depuis un terminal. Pour configurer l'authentification par clé SSH avant de commencer : configurer une clé SSH sur VPS Linux.
Prérequis
- Un poste de contrôle Linux avec Python 3.10+ et un accès terminal ;
- Un ou plusieurs VPS Linux cibles sous Ubuntu 22.04 LTS ou Debian 12 ;
- Une authentification par clé publique SSH configurée sur chaque VPS Linux cible ;
- Les paquets
python3,python3-pipetpython3-venvinstallés sur le poste de contrôle.
Installer Ansible
Sur le poste de contrôle Ubuntu, installez Ansible via le dépôt officiel PPA. Cette installation en ligne de commande dans le terminal fournit ansible-playbook, ansible-galaxy et les collections de modules intégrées pour administrer vos serveurs dédiés Linux et vos VPS :
sudo apt update
sudo apt install -y software-properties-common
sudo add-apt-repository --yes --update ppa:ansible/ansible
sudo apt install -y ansible
ansible --versionSur Debian 12, utilisez pip dans un environnement virtuel pour contrôler la version du paquet Ansible et éviter les conflits de paquets système :
sudo apt install -y python3-pip python3-venv
python3 -m venv ~/ansible-venv
source ~/ansible-venv/bin/activate
pip install ansibleCréer l'inventaire des VPS
L'inventaire Ansible liste les serveurs VPS Linux et serveurs dédiés à administrer avec leurs adresses IP, utilisateurs SSH et chemins vers les fichiers de configuration. Créez les répertoires de travail et le fichier d'inventaire depuis le terminal :
mkdir -p ~/ansible-vps
nano ~/ansible-vps/inventory.iniContenu de l'inventaire (remplacez les adresses IP par vos VPS Linux) :
[vps]
vps-01 ansible_host=203.0.113.10 ansible_user=ubuntu
vps-02 ansible_host=203.0.113.11 ansible_user=ubuntu
[vps:vars]
ansible_ssh_private_key_file=~/.ssh/id_ed25519Vérifiez que Ansible atteint vos serveurs VPS en SSH. La commande ping renvoie un log de succès pour chaque serveur Linux accessible :
ansible -i ~/ansible-vps/inventory.ini vps -m pingLe playbook de configuration initiale
Un playbook Ansible est un script YAML qui liste les tâches à exécuter. Chaque tâche appelle un module Ansible : ansible.builtin.apt pour mettre à jour les paquets, ansible.builtin.user pour créer les comptes, ansible.builtin.lineinfile pour modifier les fichiers de configuration. Le playbook suivant configure :
- La mise à jour des paquets système et des distributions Linux ;
- La création d'un utilisateur admin avec authentification par clé SSH ;
- La configuration du pare-feu UFW (désactiver entrant, autoriser SSH) ;
- Le durcissement du fichier de configuration
/etc/ssh/sshd_configpour désactiver le root et les mots de passe ; - Le redémarrage automatique du daemon SSH via un handler.
---
- name: Configuration initiale VPS Linux
hosts: vps
become: true
vars:
admin_user: devops
admin_pubkey: "ssh-ed25519 AAAA... votre-cle"
tasks:
- name: Mettre a jour les paquets systeme
ansible.builtin.apt:
update_cache: true
upgrade: dist
- name: Creer l administrateur systeme
ansible.builtin.user:
name: "{{ admin_user }}"
groups: sudo
shell: /bin/bash
create_home: true
- name: Configurer l authentification SSH par cle publique
ansible.posix.authorized_key:
user: "{{ admin_user }}"
key: "{{ admin_pubkey }}"
state: present
- name: Fichier de configuration SSH - desactiver root
ansible.builtin.lineinfile:
path: /etc/ssh/sshd_config
regexp: "^PermitRootLogin"
line: "PermitRootLogin no"
backup: true
notify: Redemarrer SSH
- name: Fichier de configuration SSH - desactiver mot de passe
ansible.builtin.lineinfile:
path: /etc/ssh/sshd_config
regexp: "^PasswordAuthentication"
line: "PasswordAuthentication no"
notify: Redemarrer SSH
- name: Configurer le pare-feu UFW - deny entrant
community.general.ufw:
state: enabled
direction: incoming
policy: deny
- name: Configurer le pare-feu UFW - autoriser SSH
community.general.ufw:
rule: allow
name: OpenSSH
handlers:
- name: Redemarrer SSH
ansible.builtin.service:
name: ssh
state: reloadedExécuter le playbook depuis le terminal
Avant d'appliquer en production, simulez avec --check. Ansible écrit les logs de chaque tâche sans redémarrer ni modifier les serveurs VPS :
ansible-playbook -i ~/ansible-vps/inventory.ini ~/ansible-vps/setup-vps.yml --checkSi les logs ne signalent aucune erreur, appliquez le playbook pour configurer vos serveurs Linux et serveurs dédiés :
ansible-playbook -i ~/ansible-vps/inventory.ini ~/ansible-vps/setup-vps.ymlLe résumé par serveur affiche changed pour les modifications et ok pour les configurations déjà conformes. Ajoutez -v pour des logs détaillés sur chaque répertoire et fichier de configuration modifié.
Aller plus loin
Étendez ce playbook de base pour automatiser :
- L'installation de paquets spécifiques (Docker, Nginx, Git) ;
- La configuration de Fail2ban pour désactiver les attaques SSH récurrentes (guide Fail2ban VPS Linux) ;
- Le démarrage de services au redémarrage (boot) via des unités systemd ;
- La dépose de fichiers de configuration dans les répertoires cibles via le module
ansible.builtin.template(Jinja2) ; - La planification de scripts de sauvegarde via tâches cron automatisées.
Conclusion
Ansible permet à l'administrateur de décrire l'état cible de ses VPS Linux et serveurs dédiés en YAML et d'appliquer ces configurations reproductibles depuis un terminal. Sans paquet agent à installer sur le serveur dédié cible, il fonctionne via SSH, se versionne dans Git et se teste avec --check avant tout déploiement. Pour durcir davantage vos configurations SSH, consultez notre guide sécuriser SSH sur VPS Linux.
Besoin d'un VPS Linux KVM haute performance pour déployer vos playbooks Ansible ?
Découvrir les VPS Linux ElypseCloud