Comment définir host_key_checking = false dans un fichier d'inventaire ansible?

113

Je voudrais utiliser la ansible-playbookcommande au lieu de « vagrant provision». Cependant, la configuration host_key_checking=falsedans le hostsfichier ne semble pas fonctionner.

# hosts file
vagrant ansible_ssh_private_key_file=~/.vagrant.d/insecure_private_key 
ansible_ssh_user=vagrant ansible_ssh_port=2222 ansible_ssh_host=127.0.0.1 
host_key_checking=false

Existe-t-il une variable de configuration en dehors de Vagrantfilecelle qui peut remplacer cette valeur?

mbdev
la source

Réponses:

182

En raison du fait que j'ai répondu à cela en 2014, j'ai mis à jour ma réponse pour tenir compte des versions plus récentes d'ansible.

Oui, vous pouvez le faire au niveau de l'hôte / de l'inventaire (ce qui est devenu possible sur les versions plus récentes ) ou au niveau mondial:

inventaire :

Ajoutez ce qui suit.

ansible_ssh_common_args='-o StrictHostKeyChecking=no'

hôte :

Ajoutez ce qui suit.

ansible_ssh_extra_args='-o StrictHostKeyChecking=no'

Les options d'hôtes / d'inventaire fonctionneront avec le type de connexion sshet non paramiko. Certaines personnes peuvent affirmer fermement que l'inventaire et les hôtes sont plus sécurisés car la portée est plus limitée.

global:

Guide de l'utilisateur Ansible - Vérification de la clé hôte

  • Vous pouvez le faire soit dans le fichier /etc/ansible/ansible.cfgou ~/.ansible.cfg:

    [defaults]
    host_key_checking = False
    
  • Ou vous pouvez configurer et env variable (cela peut ne pas fonctionner sur les versions plus récentes):

    export ANSIBLE_HOST_KEY_CHECKING=False
    
Rico
la source
32
J'utilise ansible 1.7.2 et mon expérience a été que la variable d'environnement ANSIBLE_HOST_KEY_CHECKINGfonctionne mais -e 'host_key_checking=False'ne fonctionne pas.
Marc Abramowitz
6
Votre première déclaration "Oui, mais pas au niveau des hôtes / inventaire" est fausse. Vous pouvez utiliser ansible_ssh_common_args='-o StrictHostKeyChecking=no'ouansible_ssh_extra_args='-o StrictHostKeyChecking=no'
Shammel Lee
1
Seule la dernière option a fonctionné pour moi (exporter ANSIBLE_HOST_KEY_CHECKING = False) avant d'exécuter mon playbook.
ted-k42
1
"Oui, mais pas au niveau des hôtes / inventaire." - Se révèle faux, prouvé par ma réponse . Je dirais même que ce n'est pas vraiment une réponse à la question de savoir comment le définir au niveau de l' inventaire .
gertvdijk
@gertvdijk J'ai répondu à cela en 2014. Ansible a subi de nombreuses révisions. Ce n'est plus le cas?
Rico
68

Oui, vous pouvez définir cela au niveau de l'inventaire / de l'hôte.

Avec une réponse déjà acceptée, je pense que c'est une meilleure réponse à la question de savoir comment gérer cela au niveau des stocks. Je considère cela plus sûr en isolant ce paramètre non sécurisé aux hôtes requis pour cela (par exemple, les systèmes de test, les machines de développement local).

Ce que vous pouvez faire au niveau de l'inventaire, c'est ajouter

ansible_ssh_common_args='-o StrictHostKeyChecking=no'

ou

ansible_ssh_extra_args='-o StrictHostKeyChecking=no'

à votre définition d'hôte (voir Paramètres d'inventaire comportemental Ansible ).

Cela fonctionnera à condition que vous utilisiez le sshtype de connexion, pas paramikoou autre chose).

Par exemple, une définition d'hôte Vagrant ressemblerait à…

vagrant ansible_port=2222 ansible_host=127.0.0.1 ansible_ssh_common_args='-o StrictHostKeyChecking=no'

ou

vagrant ansible_port=2222 ansible_host=127.0.0.1 ansible_ssh_extra_args='-o StrictHostKeyChecking=no'

L'exécution d'Ansible sera alors réussie sans changer aucune variable d'environnement.

$ ansible vagrant -i <path/to/hosts/file> -m ping
vagrant | SUCCESS => {
    "changed": false, 
    "ping": "pong"
}

Dans le cas où vous souhaitez faire cela pour un groupe d'hôtes, voici une suggestion pour en faire une var de groupe supplémentaire pour un groupe existant comme ceci:

[mytestsystems]
test[01:99].example.tld

[insecuressh:children]
mytestsystems

[insecuressh:vars]
ansible_ssh_common_args='-o StrictHostKeyChecking=no'
gertvdijk
la source
4
C'est une bien meilleure réponse.
marcv81
Cette suggestion a fonctionné pour moi, et je conviens que c'est quelque chose qui devrait être défini au niveau du projet (plutôt qu'au niveau mondial) en raison de problèmes de sécurité.
andrewdcato
1
J'ai inclus ansible_ssh_common_args: '-o StrictHostKeyChecking=no'dans le fichier yml du fichier group_vars.
g.
4

Je n'ai pas pu utiliser:

ansible_ssh_common_args='-o StrictHostKeyChecking=no'

dans le fichier d'inventaire. Il semble que ansible ne considère pas cette option dans mon cas (ansible 2.0.1.0 de pip dans ubuntu 14.04)

J'ai décidé d'utiliser:

server ansible_host=192.168.1.1 ansible_ssh_common_args= '-o UserKnownHostsFile=/dev/null'

Ça m'a aidé.

Vous pouvez également définir cette variable dans le groupe à la place pour chaque hôte:

[servers_group:vars]
ansible_ssh_common_args='-o UserKnownHostsFile=/dev/null'
vskubriev
la source
Définir l' option UserKnownHostsFile/ GlobalKnownHostsFilesur /dev/nullfonctionne également. Il est étrange que le réglage StrictHostKeyCheckingne fonctionne pas pour vous. Il est fort probable qu'une option de votre configuration SSH en soit la cause.
gertvdijk
+1 pour -o UserKnownHostsFile=/dev/null. Sans cela, cela ne fonctionnait tout simplement pas pour moi, indépendamment de l'emplacement et de la manière dont j'ai spécifié ansible_ssh_common_args dans les autres réponses.
Jusqu'au
0

En /etc/ansible/ansible.cfgdécommentant la ligne:

host_key_check = False

et en /etc/ansible/hostsdécommentant la ligne

client_ansible ansible_ssh_host=10.1.1.1 ansible_ssh_user=root ansible_ssh_pass=12345678

C'est tout

user8759294
la source
0

L'ajout de ce qui suit à la configuration ansible a fonctionné tout en utilisant des commandes ad-hoc ansible:

[ssh_connection]
# ssh arguments to use
ssh_args = -o StrictHostKeyChecking=no

Version d'Ansible

ansible 2.1.6.0
config file = /etc/ansible/ansible.cfg
dénafication
la source
0

Vous définissez ces configurations dans le fichier /etc/ansible/ansible.cfgou ~/.ansible.cfgou ansible.cfg(dans votre répertoire actuel)

[ssh_connection]
ssh_args = -C -o ControlMaster=auto -o ControlPersist=60s -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no

testé avec ansible 2.9.6 dans ubuntu 20.04

Alupotha
la source