Lorsque l’on se connecte par SSH à une machine, il arrive qu’on doive vérifier l’identité du serveur.
Celui-ci nous présente une signature de sa clé publique de chiffrement:
The authenticity of host '*************' can't be established. ECDSA key fingerprint is SHA256:vgYilkVvvlikVUOV4UTFMUY0A/qV9DLZQRGCI/ZlSJ4. Are you sure you want to continue connecting (yes/no)?
Pour vérifier si la signature correspond bien au serveur, il faut avoir un autre accès au serveur et noter la signature des clés publiques. Par exemple pour la clé ECDSA :
$ ssh-keygen -l -E sha256 -f /etc/ssh/ssh_host_ecdsa_key.pub 256 SHA256:vgYilkVvvlikVUOV4UTFMUY0A/qV9DLZQRGCI/ZlSJ4 ********
Un bout de code Ansible qui récupère les empreintes SSH pour RSA et ECDSA pour un hôte, et les enregistre dans un fichier localement.
Quand on a plein d’hôtes dans son inventaire, on peut récupérer les empreintes de chacun de ces hôtes.
On se contente de faire du TOFU lorsque ce sont des hôtes qui viennent d’être créés.
Au préalable, il faut s’y être connecté une 1ère fois par la méthode SSH classique, sinon Ansible demandera à ce qu’on valide l’empreinte pour chaque hôte.
– name: Récupération de l’empreinte SSH RSA de cet hôte
command: « ssh-keygen -l -f /etc/ssh/ssh_host_rsa_key.pub »
register: rsa
changed_when: False
– name: Récupération de l’empreinte SSH ecdsa de cet hôte
command: « ssh-keygen -l -f /etc/ssh/ssh_host_ecdsa_key.pub »
register: ecdsa
changed_when: False
– name: Création du fichier d’empreintes
file:
path: « {{ sshfingerprintspath }} »
state: touch
modification_time: « preserve »
access_time: « preserve »
delegate_to: localhost
– name: Enregistrement du résultat
lineinfile:
path: « {{ sshfingerprintspath }} »
line: « {{ rsa.stdout }} »
delegate_to: localhost
– name: Enregistrement du résultat
lineinfile:
path: « {{ sshfingerprintspath }} »
line: « {{ ecdsa.stdout }} »
delegate_to: localhost