¿Cómo configurar host_key_checking = false en el archivo de inventario ansible?

113

Me gustaría usar el ansible-playbookcomando en lugar de ' vagrant provision'. Sin embargo, la configuración host_key_checking=falseen el hostsarchivo no parece funcionar.

# 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

¿Hay una variable de configuración fuera de Vagrantfileeso que pueda anular este valor?

mbdev
fuente

Respuestas:

182

Debido al hecho de que respondí esto en 2014, he actualizado mi respuesta para tener en cuenta las versiones más recientes de ansible.

Sí, puede hacerlo a nivel de host / inventario (que se hizo posible en las versiones más recientes de ansible ) o a nivel global:

inventario :

Agregue lo siguiente.

ansible_ssh_common_args='-o StrictHostKeyChecking=no'

anfitrión :

Agregue lo siguiente.

ansible_ssh_extra_args='-o StrictHostKeyChecking=no'

Las opciones de hosts / inventario funcionarán con el tipo de conexión sshy no paramiko. Algunas personas pueden argumentar firmemente que el inventario y los hosts son más seguros porque el alcance es más limitado.

global:

Guía del usuario de Ansible: comprobación de la clave del host

  • Puede hacerlo en el archivo /etc/ansible/ansible.cfgo ~/.ansible.cfg:

    [defaults]
    host_key_checking = False
    
  • O puede configurar y env variable (esto podría no funcionar en versiones más nuevas de ansible):

    export ANSIBLE_HOST_KEY_CHECKING=False
    
Rico
fuente
32
Estoy usando ansible 1.7.2 y mi experiencia ha sido que la variable de entorno ANSIBLE_HOST_KEY_CHECKINGfunciona pero -e 'host_key_checking=False'no funciona.
Marc Abramowitz
6
Su primera afirmación "Sí, pero no a nivel de hosts / inventario" es falsa. Puede usar ansible_ssh_common_args='-o StrictHostKeyChecking=no'oansible_ssh_extra_args='-o StrictHostKeyChecking=no'
Shammel Lee
1
Solo la última opción funcionó para mí (exportar ANSIBLE_HOST_KEY_CHECKING = False) antes de ejecutar mi libro de jugadas.
ted-k42
1
"Sí, pero no a nivel de hosts / inventario". - Se demuestra que es falso, probado por mi respuesta . Incluso diría que esto no es realmente una respuesta a la pregunta sobre cómo configurarlo a nivel de inventario .
gertvdijk
@gertvdijk Respondí esto en 2014. Ansible ha pasado por un montón de revisiones. ¿Ese ya no es el caso?
Rico
68

Sí, puede configurar esto en el nivel de inventario / host.

Con una respuesta ya aceptada presente, creo que esta es una mejor respuesta a la pregunta sobre cómo manejar esto a nivel de inventario. Considero que esto es más seguro al aislar esta configuración insegura a los hosts necesarios para esto (por ejemplo, sistemas de prueba, máquinas de desarrollo local).

Lo que puede hacer a nivel de inventario es agregar

ansible_ssh_common_args='-o StrictHostKeyChecking=no'

o

ansible_ssh_extra_args='-o StrictHostKeyChecking=no'

a su definición de host (consulte Parámetros de inventario de comportamiento de Ansible ).

Esto funcionará siempre que use el sshtipo de conexión, no paramikoo algo más).

Por ejemplo, una definición de host Vagrant se vería así ...

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

o

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

La ejecución de Ansible se realizará correctamente sin cambiar ninguna variable de entorno.

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

En caso de que desee hacer esto para un grupo de hosts, aquí hay una sugerencia para convertirlo en una var de grupo complementaria para un grupo existente como este:

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

[insecuressh:children]
mytestsystems

[insecuressh:vars]
ansible_ssh_common_args='-o StrictHostKeyChecking=no'
Gertvdijk
fuente
4
Esta es una respuesta mucho mejor.
marcv81
Esta sugerencia funcionó para mí, y estoy de acuerdo en que esto es algo que debería establecerse a nivel de proyecto (en lugar de a nivel global) debido a preocupaciones de seguridad.
andrewdcato
1
He incluido ansible_ssh_common_args: '-o StrictHostKeyChecking=no'en el archivo yml archivo group_vars.
g.
4

No pude usar:

ansible_ssh_common_args='-o StrictHostKeyChecking=no'

en archivo de inventario. Parece que ansible no considera esta opción en mi caso (ansible 2.0.1.0 de pip en ubuntu 14.04)

Decidí usar:

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

Me ayudó.

También puede establecer esta variable en grupo en su lugar para cada host:

[servers_group:vars]
ansible_ssh_common_args='-o UserKnownHostsFile=/dev/null'
vskubriev
fuente
Establecer la opción UserKnownHostsFile/ GlobalKnownHostsFileen /dev/nulltambién funciona. Es extraño que la configuración StrictHostKeyCheckingno funcione para usted. Lo más probable es que la causa sea alguna opción en su configuración SSH.
Gertvdijk
+1 para -o UserKnownHostsFile=/dev/null. Sin él, tampoco funcionó para mí, independientemente de la ubicación y la forma que especifiqué que se ansible_ssh_common_args describe en las otras respuestas.
Hasta Kuhn
0

En /etc/ansible/ansible.cfgdescomentar la línea:

host_key_check = False

y en /etc/ansible/hostsdescomentar la linea

client_ansible ansible_ssh_host=10.1.1.1 ansible_ssh_user=root ansible_ssh_pass=12345678

Eso es todo

usuario8759294
fuente
0

Agregar lo siguiente a la configuración de ansible funcionó al usar comandos ad-hoc de ansible:

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

Versión Ansible

ansible 2.1.6.0
config file = /etc/ansible/ansible.cfg
dnafication
fuente
0

Establece estas configuraciones, ya sea en el /etc/ansible/ansible.cfgo ~/.ansible.cfgo ansible.cfgarchivo (en el directorio actual)

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

probado con ansible 2.9.6 en ubuntu 20.04

Alupotha
fuente