Target Hosts Authentication¶
Objectif
Configurer l'authentification SSH par clé publique entre le Control Host et les Target Hosts pour permettre à ansible de se connecter sans mot de passe.
Durée
~25 minutes (lab de 4 VM)
Commandes condensées de la pratique.
vagrant up
vagrant ssh ansible
####################
sudo tee /etc/hosts > /dev/null <<EOF
127.0.0.1 localhost.localdomain localhost
192.168.56.10 ansible.sandbox.lan ansible
192.168.56.20 rocky.sandbox.lan rocky
192.168.56.30 debian.sandbox.lan debian
192.168.56.40 suse.sandbox.lan suse
EOF
for HOST in rocky debian suse; do ping -c 1 -q $HOST; done
ssh-keyscan -t rsa rocky debian suse >> .ssh/known_hosts
ssh-keygen -N '' -f ~/.ssh/id_rsa
for HOST in rocky debian suse; do ssh-copy-id vagrant@$HOST; done
ansible all -i debian,rocky,suse -m ping
exit
####################
vagrant destroy -f
"Your turn !"¶
ansible n'est pas installé sur les Target Hosts. Comme vu dans Workshop 01, nous allons leur installer ansible.
Travail en parallélisme de l'installation d'ansible sur les Target Hosts avec une installation par le dépôt APT.
printf "target01\ntarget02\ntarget03\n" | xargs -P3 -I{} vagrant ssh {} -c "sudo apt install -y ansible-core"
Remplacement du fichier /etc/hosts de la VM control pour y intégrer les Target Hosts.
vagrant ssh control -c 'bash -c "sudo tee /etc/hosts > /dev/null <<EOF
127.0.0.1 localhost
192.168.56.10 target01
192.168.56.20 target02
192.168.56.30 target03
EOF"'
Apprentissage de leur clé publique SSH.
Génération d'une paire de clés SSH puis application.
vagrant ssh -c "ssh-keygen -N '' -f ~/.ssh/id_rsa" control
vagrant ssh -c "for HOST in target01 target02 target03; do ssh-copy-id -f vagrant@\$HOST; done" control
Test de ping ansible.

Je retiens
ssh-keyscanapprend les clés publiques des hôtes distants pour éviter la confirmation manuelle au premierssh.ssh-copy-idcopie la clé publique sur les Target Hosts pour l'authentification sans mot de passe.ansible all -i host1,host2 -m pingpermet de tester la connectivitéansiblesans inventaire permanent.
Cheatsheet¶
| Symptôme | Cause probable | Correction |
|---|---|---|
ansible ... -m ping → Permission denied (publickey) |
La clé publique n'a pas été copiée sur la cible (ou sur le mauvais utilisateur) | Relancer ssh-copy-id vagrant@targetXX. Vérifier ensuite ssh vagrant@targetXX à la main |
Premier ssh demande d'accepter un fingerprint (yes/no) → ansible se bloque |
Les clés d'hôtes ne sont pas encore dans ~/.ssh/known_hosts |
Pré-remplir avec ssh-keyscan -t rsa target01 target02 target03 >> ~/.ssh/known_hosts |
ping -c 1 targetXX → « unknown host » |
/etc/hosts n'a pas été mis à jour sur le Control Host |
Ajouter les mappings IP ↔ nom (voir bloc sudo tee /etc/hosts) |
ssh-keygen bloque en demandant une passphrase |
L'option -N '' n'a pas été passée |
Relancer avec ssh-keygen -N '' -f ~/.ssh/id_rsa (lab uniquement en prod, utiliser une passphrase + ssh-agent) |
xargs -P3 ... vagrant ssh échoue sur une cible |
Paquet ansible-core indisponible sur la distro (ex : Rocky via apt) |
Adapter au gestionnaire de paquets (dnf, zypper) par cible ou utiliser le module package dans un workshop suivant |
Sources (principales)¶
- Docs
ansibleConnection methods - Docs
ansibleBuildingansibleinventories - Docs
ansibleHow to build your inventory (formats INI/YAML) - Docs
ansibleSSH pluginansible.builtin.ssh - OpenSSH
ssh-copy-id(1) - OpenSSH
ssh-keygen(1)(génération de clés) - OpenSSH
ssh-agent(1)(gestion de clés en mémoire) - Docs
ansibleManaging host keys (host_key_checking)
Précédent : Installing ansible
Suite : Direnv