Existe-t-il un moyen d'ignorer la vérification d'authenticité SSH effectuée par Ansible? Par exemple, lorsque je viens de configurer un nouveau serveur, je dois répondre oui à cette question:
GATHERING FACTS ***************************************************************
The authenticity of Host 'xxx.xxx.xxx.xxx (xxx.xxx.xxx.xxx)' can't be established.
RSA key fingerprint is xx:yy:zz:....
Are you sure you want to continue connecting (yes/no)?
Je sais que c'est généralement une mauvaise idée, mais je l'intègre dans un script qui crée d'abord un nouveau serveur virtuel chez mon fournisseur de cloud, puis appelle automatiquement mon livret de jeu ansible pour le configurer. Je veux éviter toute intervention humaine au milieu de l'exécution du script.
Deux options - la première, comme vous l'avez dit dans votre propre réponse, consiste à définir la variable d'environnement ANSIBLE_Host_KEY_CHECKING
sur False.
La deuxième façon de le définir est de le placer dans un fichier ansible.cfg, ce qui est une option très utile car vous pouvez le définir globalement (au niveau système ou utilisateur, en /etc/ansible/ansible.cfg
ou ~/.ansible.cfg
), ou dans un fichier de configuration dans le répertoire. même répertoire que le playbook que vous utilisez.
Pour ce faire, créez un fichier ansible.cfg
à l’un de ces emplacements et incluez ceci:
[defaults]
Host_key_checking = False
Vous pouvez également définir de nombreux autres paramètres utiles par défaut, comme par exemple rassembler ou non des faits au début d'un jeu, fusionner des hachages déclarés à plusieurs endroits ou les remplacer, etc. Il y a une très grande liste d'options ici dans la documentation Ansible.
Edit: une note sur la sécurité.
La validation de la clé d’hôte SSH est une couche de sécurité significative pour hôtes persistants. Si vous vous connectez plusieurs fois au même ordinateur, il est utile d’accepter la clé de l’hôte localement.
Pour les instances EC2 de longue durée, il serait logique d'accepter la clé de l'hôte avec une tâche exécutée une seule fois lors de la création initiale de l'instance:
- name: Write the new ec2 instance Host key to known hosts
connection: local
Shell: "ssh-keyscan -H {{ inventory_hostname }} >> ~/.ssh/known_hosts"
Il n'y a pas de valeur de sécurité pour la vérification des clés d'hôte sur les instances que vous placez de manière dynamique et que vous supprimez immédiatement après l'exécution du livre de lecture, mais il existe une valeur de sécurité pour la vérification des clés d'hôte des machines persistantes. Vous devez donc gérer la vérification de la clé de l'hôte différemment selon l'environnement logique.
~/.ansible.cfg
)./ansible.cfg
à côté du playbook pour les tests unitaires contre les VMs vagabondes, l'automatisation des instances ec2 de courte durée)J'ai trouvé la réponse, vous devez définir la variable d'environnement ANSIBLE_Host_KEY_CHECKING
sur False
. Par exemple:
ANSIBLE_Host_KEY_CHECKING=False ansible-playbook ...
transmettre à nikobelia
Pour ceux qui utilisent jenkins pour exécuter le livre de jeu, je viens d'ajouter à mon travail jenkins avant d'exécuter l'ansible-playbook la variable d'environnement ANSIBLE_Host_KEY_CHECKING = False
export ANSIBLE_Host_KEY_CHECKING=False
ansible-playbook 'playbook.yml' \
--extra-vars="some vars..." \
--tags="tags_name..." -vv
Vous pouvez le passer en tant qu'argument de ligne de commande lors de l'exécution du livre de lecture:
ansible-playbook play.yml --ssh-common-args='-o StrictHostKeyChecking=no'
Utilisez le paramètre nommé validate_certs pour ignorer la validation ssh
- ec2_AMI:
instance_id: i-0661fa8b45a7531a7
wait: yes
name: ansible
validate_certs: false
tags:
Name: ansible
Service: TestService
En faisant cela, il ignore le processus de validation ssh
Changer Host_key_checking
en false
pour tous les hôtes est une très mauvaise idée.
La seule fois où vous voulez l'ignorer, c'est sur le "premier contact", ce que ces deux tâches accompliront:
- name: Check known_hosts for {{ inventory_hostname }}
local_action: Shell ssh-keygen -F {{ inventory_hostname }}
register: has_entry_in_known_hosts_file
changed_when: false
ignore_errors: yes
- name: Ignore Host key on first run
when: has_entry_in_known_hosts_file == 1
set_fact:
ansible_ssh_common_args: '-o StrictHostKeyChecking=no'
Nous ne désactivons donc la vérification de la clé de l'hôte que si nous n'avons pas la clé de l'hôte dans notre fichier known_hosts
.
Je sais que la question a été répondue et qu'elle est également correcte, mais je voulais simplement relier le document ansible où il est clairement expliqué quand et pourquoi le contrôle correspondant devrait être ajouté: Host-key-checking
Si vous ne souhaitez pas modifier ansible.cfg
ou playbook.yml
, vous pouvez simplement définir une variable d'environnement:
export ANSIBLE_Host_KEY_CHECKING=False