Configuration des serveurs cible
Une fois Ansible installé sur notre machine, on peut passer à sa configuration. Je vais générer une paire de clés ssh sur mon serveur et envoyer la clé publique sur la machine distante pour permettre une connexion sans mot de passe. De plus il est essentiel d’avoir un utilisateur spécifique « ansible » sur les machines cible.
Générer une paire de clés ssh
ssh-keygen -t ecdsa -b 384 |
Je garde le chemin par défaut et je renseigne sur passphrase pour protéger ma clé
Une fois cette étape effectuée, je peux envoyer directement ma clé sur les serveurs avec la commande suivante ou bien la copier coller sur le serveur distant dans le fichier ~/.ssh/authorized_keys
Dans mon cas, j’ai préparé un script Bash qui va créer un utilisateur sur la machine cible et ajouter la clé ssh. Ce script est adapté pour les distributions Debian/RedHat.
L’utilisateur « ansible » sera crée en tant qu’utilisateur sans mot de passe, cela veut dire que seule la connexion en ssh est autorisée. Les commandes varient entre Debian et RedHat pour la création d’un user.
#!/bin/bash
# Script pour créer un utilisateur Ansible avec accès SSH uniquement sur Debian/Ubuntu ou Red Hat/CentOS
# Vérifie si le script est exécuté en tant que root
if [ "$(id -u)" -ne 0 ]; then
echo "Ce script doit être exécuté avec des privilèges root."
exit 1
fi
# Détection de la distribution
if [ -f /etc/os-release ]; then
. /etc/os-release
DISTRO=$ID
else
echo "Impossible de détecter la distribution."
exit 1
fi
# Vérifie si sudo est installé, sinon l'installe
if ! command -v sudo > /dev/null 2>&1; then
echo "sudo n'est pas installé. Installer sudo avant de continuer"
exit 1
fi
# Variables
USERNAME="ansible"
SSH_PUBLIC_KEY="votre-cle-publique"
# Vérifie si l'utilisateur existe déjà
if id "$USERNAME" > /dev/null 2>&1; then
echo "L'utilisateur $USERNAME existe déjà."
else
if [[ "$DISTRO" == "ubuntu" || "$DISTRO" == "debian" ]]; then
# Commandes pour Debian/Ubuntu
adduser --disabled-password --gecos "Ansible User" $USERNAME
echo "Utilisateur $USERNAME créé avec succès (Debian/Ubuntu)."
elif [[ "$DISTRO" == "centos" || "$DISTRO" == "rhel" || "$DISTRO" == "fedora" ]]; then
# Commandes pour Red Hat/CentOS
useradd -m -s /bin/bash $USERNAME
echo "Utilisateur $USERNAME créé avec succès (Red Hat/CentOS)."
# Verrouille le compte pour empêcher l'utilisation d'un mot de passe local
passwd -l $USERNAME
else
echo "Distribution non prise en charge pour la création d'utilisateur."
exit 1
fi
# Crée le répertoire .ssh avec les permissions appropriées
mkdir -p /home/$USERNAME/.ssh
chmod 700 /home/$USERNAME/.ssh
# Ajoute la clé publique SSH à authorized_keys
echo $SSH_PUBLIC_KEY > /home/$USERNAME/.ssh/authorized_keys
chmod 600 /home/$USERNAME/.ssh/authorized_keys
chown -R $USERNAME:$USERNAME /home/$USERNAME/.ssh
# Autorise l'utilisateur à utiliser sudo sans mot de passe
echo "$USERNAME ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/$USERNAME
chmod 440 /etc/sudoers.d/$USERNAME
echo "Accès SSH activé pour $USERNAME et sudo autorisé."
fi
Il faudra mettre ce script sur une serveur web et l’exécuter sur les serveurs cible. Dans mon cas j’ai activé apache2 sur le serveur Ansible.
Pour exécuter le script sur les serveurs, il suffit de lancer la commande
sudo bash -c 'wget -O - http://192.168.1.158/script_ansible.sh | bash' |