Skip to content

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.

vagrant ssh -c "ssh-keyscan -t rsa target01 target02 target03 >> .ssh/known_hosts" control

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.

vagrant ssh -c "ansible all -i target01,target02,target03 -m ping" control

Test de ping ansible réussi sur les trois Target Hosts

Je retiens

  • ssh-keyscan apprend les clés publiques des hôtes distants pour éviter la confirmation manuelle au premier ssh.
  • ssh-copy-id copie la clé publique sur les Target Hosts pour l'authentification sans mot de passe.
  • ansible all -i host1,host2 -m ping permet de tester la connectivité ansible sans inventaire permanent.

Cheatsheet

Symptôme Cause probable Correction
ansible ... -m pingPermission 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)


Précédent : Installing ansible Suite : Direnv