Gérer des serveurs avec Ansible
Notre mission consiste à configurer le conteneur Ansible pour qu'il puisse gérer 3 conteneurs cibles.
Il faut donc tout d'abord, créer 3 nouveaux conteneurs Debian en utilisant Docker.
Dans le cas de conteneurs basés sur des images comme debian
, si aucun processus de premier plan n'est spécifié,
le conteneur s'arrêtera immédiatement après son démarrage car l'image de base ne définit pas de processus démon par défaut.
Qu'est ce qu'un processus démon sous Linux ?
Sous Linux (et les systèmes d'exploitation de type UNIX) un processus démon est un processus d'arrière-plan qui s'exécute sans être directement contrôlé par un utilisateur.
Les démons sont souvent lancés au démarrage du système et restent en fonctionnement jusqu'à ce que le système soit arrêté.
Ils effectuent diverses tâches systèmes ou de réseau, souvent liées à l'administration du système, comme la gestion des connexions réseau, l'impression, la gestion des courriels, la planification de tâches (cron), et bien d'autres services.
Le terme "démon" est un jeu de mots basé sur le concept du démon de la mythologie, qui est un esprit qui sert et effectue des tâches pour son maître.
Pour résoudre le problème des conteneurs qui ne restent pas actif, il suffit de créer un fichier Dockerfile
pour personnaliser l'image du conteneur et y installer un serveur SSH.
Création de 3 conteneurs Debian
Nous allons créer 3 conteneurs cibles :
conteneur-web-1
,conteneur-web-2
etconteneur-web-3
qui seront gérés par Ansible.
Pour démarrer le serveur SSH dans un conteneur et le garder en vie,
nous allons créer un fichier Dockerfile
afin de personnaliser l'image du conteneur et y installer un serveur SSH et Python3 (qui est utilisé par Ansible) :
-
Dans le dossier de vos
Documents
, créez le dossiertp-ansible
: -
Créez un fichier
Dockerfile
dans le dossiertp-ansible
:FROM debian:latest
RUN apt update && \
apt install -y openssh-server python3 && \
mkdir /var/run/sshd && \
echo 'root:YOUR_PASSWORD' | chpasswd && \
sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config
# Ajoutez ici d'autres configurations si nécessaire
EXPOSE 22
CMD ["/usr/sbin/sshd", "-D"]Remplacez
YOUR_PASSWORD
par le mot de passe que vous souhaitez définir pour l'utilisateur root.
Explication des lignes de ce Dockerfile
FROM debian:latest
Cette instruction indique que l'image de base à utiliser est la dernière version de Debian. Lorsque vous allez créer votre conteneur, il commencera par cette image comme point de départ.
RUN apt update && \
apt install -y openssh-server python3 && \
mkdir /var/run/sshd && \
echo 'root:YOUR_PASSWORD' | chpasswd && \
sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config
Cette instruction RUN
exécute plusieurs commandes dans le shell du conteneur, séparées par des &&
pour qu'elles s'exécutent successivement :
-
apt update
: Met à jour la liste des paquets disponibles et de leurs versions. C'est une bonne pratique de le faire avant d'installer de nouveaux paquets. -
apt install -y openssh-server python3
: Installe le serveur SSH (openssh-server
) et Python 3 (python3
). L'option-y
signifie "oui" à toutes les invites pendant l'installation, ce qui permet à l'installation de se dérouler sans intervention manuelle. -
mkdir /var/run/sshd
: Crée le répertoire/var/run/sshd
qui est nécessaire pour que le serveur SSH puisse fonctionner correctement. -
echo 'root:YOUR_PASSWORD' | chpasswd
: Change le mot de passe de l'utilisateur root à la valeurYOUR_PASSWORD
. Vous devez remplacerYOUR_PASSWORD
par un mot de passe réel avant de construire l'image. -
sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config
: Modifie le fichier de configuration de SSH pour permettre à l'utilisateur root de se connecter via SSH. Par défaut, le login root est souvent désactivé pour des raisons de sécurité.
EXPOSE 22
Cette instruction indique que le conteneur écoutera sur le port 22, qui est le port par défaut pour les connexions SSH.
CMD ["/usr/sbin/sshd", "-D"]
Cette instruction définit la commande par défaut qui sera exécutée lorsque le conteneur démarre. Ici, elle démarre le serveur SSH avec l'option -D
, qui indique au démon SSH de ne pas se détacher et de rester en premier plan. Cela est nécessaire dans un conteneur Docker car si le processus principal (PID 1) se termine, le conteneur s'arrête.
-
Construisez une image à partir de ce
Dockerfile
:docker build -t my-debian-ssh .
-
Vérifiez la présence de votre image, avec la commande :
docker images
Afin de réutiliser facilement cette image (plus tard sur d'autres machines) vous pouvez l'envoyer sur le Docker Hub, à l'aide du tutoriel Les images Docker.
-
Lancez vos conteneurs en utilisant cette nouvelle image :
docker run -d --name conteneur-web-1 my-debian-ssh
docker run -d --name conteneur-web-2 my-debian-ssh
docker run -d --name conteneur-web-3 my-debian-ssh -
Vérifiez le bon fonctionnement de vos conteneurs, avec la commande :
docker ps -a
Avec cette configuration, le serveur SSH sera le processus de premier plan dans le conteneur, et il restera actif indéfiniment, empêchant le conteneur de s'arrêter immédiatement.
Configuration de la connexion par clé SSH
Pour permettre au serveur Ansible de communiquer avec les serveurs cibles via SSH, il suffit de suivre ces étapes :
- Installer le client SSH sur le serveur Ansible.
- Générer une paire de clés SSH sur le serveur Ansible.
- Installer le serveur SSH sur tous les serveurs cibles.
- Copier la clé publique SSH du serveur Ansible vers les serveurs cibles.
Dans notre configuration, le serveur Ansible est considéré comme un poste client qui va se connecter (via le protocole SSH) aux serveurs cibles.
Installer le client SSH sur le serveur Ansible
Sur le conteneur Ansible
1. Connectez-vous à votre conteneur Ansible.
Comment se connecter au conteneur Ansible ?
- Si le conteneur est arrêté, le démarrer avec la commande :
docker start ansible-controle
- Une fois le conteneur démarré, vous pouvez vous y connecter avec une session interactive en utilisant :
docker exec -it ansible-controle /bin/bash
La commande docker exec
permet d'exécuter une commande dans un conteneur en cours d'exécution. L'option -it
permet d'ouvrir une session interactive (-i
pour "interactive" et -t
pour allouer un pseudo-TTY), et /bin/bash
lance un shell Bash dans le conteneur, vous permettant d'interagir avec lui.
2. Installez le client SSH.
Comment installer le client SSH ?
apt update
apt install openssh-client
Saisir la touche Entrée pour valider les options par défaut.