Capture 1 - Premier cluster de 4 machines virtuelles Alpine Linux
Capture 2 - Cluster de 4 machines virtuelles : Rocky Linux, Debian, OpenSUSE Leap et Ubuntu.
-
Démarrez la VM
ubuntudepuis le répertoireatelier-01
$ vagrant up ubuntu -
Connectez-vous à cette VM
$ vagrant ssh ubuntu -
Rafraîchissez les informatrions sur les paquets
$ sudo apt updateet$ sudo apt upgrade. -
Recherchez le paquet
ansibleavec les options qui vont bien
Je peux voir le paquet à installer avec la commande$ sudo apt search ansible. -
Installer le paquet officiel fourni par la distribution
$ sudo apt install -y ansible -
Vérifiez si l'installation s'est bien déroulé
$ ansible --versionpermet de voir que l'installation s'est bien déroulé. -
Notez la version d'Ansible
$ ansible --versionnous indique qu'il s'agit de la version2.10.8d'Ansible.
- Déconnectez-vous et supprimez la VM
$ exitpour sortir de la VM puis$ vagrant destroy -f ubuntupour la supprimer.
-
Répétez le challenge précédent en configurant un dépôt PPA (Personal Package Archive) pour Ansible
J'exécute exactement les mêmes commandes que pour le challenge 1, mais je termine l'installation avec la commande$ sudo apt-add-repository ppa:ansible/ansible -
Notez la version fournie par ce dépôt tiers et comparez avec la version officielle du challenge précédent
Nous avions la version2.10.8pour le challenge précédent, la commande$ ansible --versionnous indique cette fois-ci la version2.17.14. Nous avons une version plus récente sur ce deuxième challenge.
- Lancez un VM Rocky linux et installer Ansible en utilisant PIP et Vitrualenv
-
On créer et se connecte à la VM avec
$ vagrant up rockyet$ vagrant ssh rocky -
On met à jour les informations des paquets avec
$ sudo dnf update -y -
On install PIP et Virtualenv :
$ sudo dnf install python3-pip -
On Initialise l'environnement VirtualEnv avec la commande
$ python3 -m venv ~/.venv/ansible -
On lance VirtualEnv avec la commande
$ source ~/.venv/ansible/bin/activate -
Maintenant que nous somme dans un environnement virtuel, nous mettons à jour PIP pour la première utilisation :
$ pip install --upgrade pip -
Nous installons finalement Ansible :
$ pip install ansible -
Nous pouvons voir que l'installation s'est bien déroulé avec la commande
$ ansible --version. Sa version est2.15.13
- Faites le nécessaire pour réussir un
pingAnsible comme ceci
- Modification du document
/etc/hosts:
vagrant@control:~$ cat /etc/hosts
# /etc/hosts
127.0.0.1 localhost.localdomain localhost
192.168.56.10 target01.sandbox.lan target01
192.168.56.20 target02.sandbox.lan target02
192.168.56.30 target03.sandbox.lan target03
- Nous pouvons tester la connectivité de base avec nos VM :
vagrant@control:~$ for HOST in target01 target02 target03; do ping -c 1 -q $HOST; done
PING target01.sandbox.lan (192.168.56.10) 56(84) bytes of data.
--- target01.sandbox.lan ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.022/0.022/0.022/0.000 ms
PING target02.sandbox.lan (192.168.56.20) 56(84) bytes of data.
--- target02.sandbox.lan ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 1.151/1.151/1.151/0.000 ms
PING target03.sandbox.lan (192.168.56.30) 56(84) bytes of data.
--- target03.sandbox.lan ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 1.089/1.089/1.089/0.000 ms
- On collecte ensuite les clés SSH publiques des Target Hosts :
vagrant@control:~$ ssh-keyscan -t rsa target01 target02 target03 >> .ssh/known_hosts
# target03:22 SSH-2.0-OpenSSH_8.9p1 Ubuntu-3ubuntu0.13
# target01:22 SSH-2.0-OpenSSH_8.9p1 Ubuntu-3ubuntu0.13
# target02:22 SSH-2.0-OpenSSH_8.9p1 Ubuntu-3ubuntu0.13
- Génération d'une paire de clés SSH
vagrant@control:~$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/vagrant/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/vagrant/.ssh/id_rsa
Your public key has been saved in /home/vagrant/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:np/+i0VAfnKpVb8okYWh37oUIDru9AiEiBf3eOpaQjA vagrant@control
The key's randomart image is:
+---[RSA 3072]----+
| ..o.. |
| o..oo . |
|E . . . o+o= .|
|oo.o o. . oBo . .|
|o.o..oo S .+.o . |
| o. .o.. . .+ |
| ..oo o o. |
| ++ o ..+. |
| ...o . .=oo. |
+----[SHA256]-----+
- Finalement, copie de la clé publique vers les Target Hosts
vagrant@control:~$ ssh-copy-id vagrant@target01
vagrant@control:~$ ssh-copy-id vagrant@target02
vagrant@control:~$ ssh-copy-id vagrant@target03
- On peut maintenant tester le bon fonctionnement de l'authentification sur les Target Hosts
vagrant@control:~$ ansible all -i target01,target02,target03 -m ping
target01 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python3"
},
"changed": false,
"ping": "pong"
}
target03 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python3"
},
"changed": false,
"ping": "pong"
}
target02 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python3"
},
"changed": false,
"ping": "pong"
}
- Editez
/etc/hostsde manière à ce que les Target Hosts soient joignables par leut nom d'hôte simple.
On ajoute les adresses des Target Hosts dans le fichier/etc/hosts
# /etc/hosts
127.0.0.1 localhost.localdomain localhost
192.168.56.10 control.sandbox.lan control
192.168.56.20 target01.sandbox.lan target01
192.168.56.30 target02.sandbox.lan target02
192.168.56.40 target03.sandbox.lan target03
Puis nous essayons de les pings simplement avec leur nom d'hôte simple.
vagrant@control:~$ for HOST in target01 target02 target03; do ping -c 1 -q $HOST; done
PING target01.sandbox.lan (192.168.56.20) 56(84) bytes of data.
--- target01.sandbox.lan ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.883/0.883/0.883/0.000 ms
PING target02.sandbox.lan (192.168.56.30) 56(84) bytes of data.
--- target02.sandbox.lan ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.935/0.935/0.935/0.000 ms
PING target03.sandbox.lan (192.168.56.40) 56(84) bytes of data.
--- target03.sandbox.lan ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.763/0.763/0.763/0.000 ms
Nous remarquons que les pings fonctionnent correctement.
- Configurez l'authentification par clé SSH avec les trois Target Hosts.
On collecte tout d'abord les clés SSH publiques des Target Hosts
vagrant@control:~$ ssh-keyscan -t rsa target01 target02 target03 >> .ssh/known_hosts
# target01:22 SSH-2.0-OpenSSH_8.9p1 Ubuntu-3ubuntu0.13
# target02:22 SSH-2.0-OpenSSH_8.9p1 Ubuntu-3ubuntu0.13
# target03:22 SSH-2.0-OpenSSH_8.9p1 Ubuntu-3ubuntu0.13
On génère ensuite une paire de clés SSH sur le Control Host
vagrant@control:~$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/vagrant/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/vagrant/.ssh/id_rsa
Your public key has been saved in /home/vagrant/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:JQajEVnREWVgYaFGxptkhV1HdRoLIX2m/0DED1A1aWE vagrant@control
The key's randomart image is:
+---[RSA 3072]----+
| o=B*XO=o**+E=|
| .==*o. o..BB.|
| .oooo . =+o |
| .o. o . . .|
| S o |
| o |
| o |
| .|
| |
+----[SHA256]-----+
Finalement on distribue la clé publique sur les Target Hosts
vagrant@control:~$ ssh-copy-id vagrant@target01
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/home/vagrant/.ssh/id_rsa.pub"
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
vagrant@target01's password:
Number of key(s) added: 1
Now try logging into the machine, with: "ssh 'vagrant@target01'"
and check to make sure that only the key(s) you wanted were added.
vagrant@control:~$ ssh-copy-id vagrant@target02
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/home/vagrant/.ssh/id_rsa.pub"
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
vagrant@target02's password:
Number of key(s) added: 1
Now try logging into the machine, with: "ssh 'vagrant@target02'"
and check to make sure that only the key(s) you wanted were added.
vagrant@control:~$ ssh-copy-id vagrant@target03
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/home/vagrant/.ssh/id_rsa.pub"
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
vagrant@target03's password:
Number of key(s) added: 1
Now try logging into the machine, with: "ssh 'vagrant@target03'"
and check to make sure that only the key(s) you wanted were added.
Je peux maintenant me connecter à chaque machine avec l'authentification par clés SSH.
- Installez Ansible.
sudo apt install -y ansiblepermet d'installer Ansible sur le Control Host.
- Envoyer un premier
pingAnsible sans configuration.
vagrant@control:~$ ansible all -i target01,target02,target03 -m ping
target02 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python3"
},
"changed": false,
"ping": "pong"
}
target01 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python3"
},
"changed": false,
"ping": "pong"
}
target03 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python3"
},
"changed": false,
"ping": "pong"
}
-
Créez un répertoire de projet
~/monprojet/.
$ mkdir ~/monprojet/ -
Créez un fichier vide
ansible.cfgdans ce répertoire.
$ cd ~/monprojet/puistouch ansible.cfg -
Vérifiez si ce fichier est bien pris en compte par Ansible.
vagrant@control:~/monprojet$ ansible --version | head -n 2
ansible 2.10.8
config file = /home/vagrant/monprojet/ansible.cfg
La commande ansible --version | head -n 2 nous montre bien que le fichier est bien pris en compte.
- Spécifiez un inventaire nommé
hosts. - Activer la journalisation dans
~/journal/ansible.log.
- Testez la journalisation.
Afin de tester la journalisation, nous pouvons créer un dossier$ mkdir -v ~/logs/puis nous pouvons utiliser la commande$ ansible all -i target01,targetà2,target03 -m ping
vagrant@control:~/monprojet$ cat ~/logs/ansible.log
2025-11-06 10:45:30,584 p=3361 u=vagrant n=ansible | target03 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python3"
},
"changed": false,
"ping": "pong"
}
2025-11-06 10:45:30,603 p=3361 u=vagrant n=ansible | target02 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python3"
},
"changed": false,
"ping": "pong"
}
2025-11-06 10:45:30,608 p=3361 u=vagrant n=ansible | target01 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python3"
},
"changed": false,
"ping": "pong"
}
- Créez un groupe
[testlab]avec vos trois Target Hosts. - Définissez explicitement l'utilisateur
vagrantpour la connexion à vos cibles.
vagrant@control:~/monprojet$ cat hosts
[testlab]
target01
target02
target03
[testlab:vars]
ansible_user=vagrant
Le groupe [testlab]' est créé avec mes Target Hosts et on définit l'utilisateur vagrant` pour la connexion.
- Envoyez un
pingAnsible vers le groupe de machines[all].
- Définissez l'élévation des droits pour l'utilisateur
vagrantsur les Target Hosts.
vagrant@control:~/monprojet$ cat hosts
[testlab]
target01
target02
target03
[testlab:vars]
ansible_user=vagrant
ansible_become=yes
On ajoute la ligne ansible_become=yes pour l'élévation de droits pour l'utilisateur vagrant sur les Target Hosts.
- Affichez la première ligne du fichier
/etc/shadowsur tous les Target Hosts.
- Quittez le Control Host et supprimez touts les VM de l'atelier.
On utilise les commandes exit puis vagrant destroy -f.
- Installez successivement les paquets
tree,gitetnmapsur toutes les cibles.
J'exécute les commandes :ansible all -m package -a "name=tree",ansible all -m package -a "name=git"etansible all -m package -a "name=nmap"Ceci permet d'installer les paquetstree,gitetnmapsur toutes les cibles.
Finalement je m'assure que les paquets ce soit bien installer en testant les commandes depuis les Target Hosts.
Les paquets sont bien installé sur toutes les machines cibles.
- Désinstallez successivement ces trois paquets en utilisant le pramamètre supplémentaire
state=absent.
J'exécute maintenant les commandes :ansible all -m package -a "name=tree state=absent",ansible all -m package -a "name=git state=absent"etansible all -m package -a "name=nmap state=absent"Ceci permet de désinstaller les paquetstree,gitetnmapsur toutes les cibles.
Finalement je m'assur que les paquets soit bien désinstaller en testant les commandes depuis les Target Hosts.
Les paquets sont bien désinstallé sur toutes les machines cibles
- Copiez le fichier
/etc/fstabdu Control Host vers tous les Target Hosts sous forme d'un fichier/tmp/test3.txt.
J'utilise la commandeansible all -m copy -a "src=/etc/fstab dest=/tmp/test3.txt"
Le fichier est bien présent sur les Target Hosts.
- Supprimez le fichier
/tmp/test3.txtsur les Target Hosts en utilisant le modulefileavec le paramètrestate=absent.
J'utilise la commandeansible all -m file -a "dest=/tmp/test3.txt state=absent"
Les fichiers test3.txt sont bien supprimer.
- Enfin, affichez l'espace utilisé par la partition principale sur tous les Target Hosts. Que remarquez-vous ?
J'utilise la commandeansible all -a "df -h /"
On remarque que la commande n'est pas idempotente. On voit l'annotation CHANGED à chaque fois que l'on exécute la commande.