ssh - tutorial - ansible windows
¿Cómo ignorar la comprobación de autenticidad SSH ansible? (8)
¿Hay alguna forma de ignorar la comprobación de autenticidad SSH realizada por Ansible? Por ejemplo, cuando acabo de configurar un nuevo servidor, tengo que responder sí a esta pregunta:
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)?
Sé que generalmente es una mala idea, pero estoy incorporando esto en un script que primero crea un nuevo servidor virtual en mi proveedor de la nube y luego llama automáticamente a mi libro de jugadas ansible para configurarlo. Quiero evitar cualquier intervención humana en medio de la ejecución del script.
Cambiar
host_key_checking
a
false
para todos los hosts es una muy mala idea.
El único momento en que desea ignorarlo es en el "primer contacto", que estas dos tareas lograrán:
- 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''
Por lo tanto, solo desactivamos la comprobación de la clave de host si no tenemos la clave de host en nuestro archivo
known_hosts
.
Dos opciones: la primera, como dijiste en tu propia respuesta, es establecer la variable de entorno
ANSIBLE_HOST_KEY_CHECKING
en False.
La segunda forma de configurarlo es ponerlo en un archivo ansible.cfg, y esa es una opción realmente útil porque puede configurarlo globalmente (a nivel de sistema o usuario, en
/etc/ansible/ansible.cfg
o
~/.ansible.cfg
), o en un archivo de configuración en el mismo directorio que el libro de jugadas que está ejecutando.
Para hacer eso,
ansible.cfg
un archivo
ansible.cfg
en una de esas ubicaciones e incluya esto:
[defaults]
host_key_checking = False
También puedes establecer muchos otros valores predeterminados útiles, como si se recopilan o no los hechos al comienzo de una jugada, si se combinan los hashes declarados en varios lugares o se reemplaza uno por otro, y así sucesivamente. Hay una gran lista de opciones here en los documentos de Ansible.
Editar: una nota sobre seguridad.
La validación de la clave de host SSH es una capa de seguridad significativa para los hosts persistentes : si se conecta a la misma máquina muchas veces, es valioso aceptar la clave de host localmente.
Para instancias EC2 de mayor duración, tendría sentido aceptar la clave de host con una tarea ejecutada solo una vez en la creación inicial de la instancia:
- name: Write the new ec2 instance host key to known hosts
connection: local
shell: "ssh-keyscan -H {{ inventory_hostname }} >> ~/.ssh/known_hosts"
No hay un valor de seguridad para verificar las claves de host en las instancias que se levanta dinámicamente y elimina inmediatamente después de la ejecución del libro de jugadas, pero sí existe un valor de seguridad al verificar las claves de host para máquinas persistentes. Por lo tanto, debe administrar la comprobación de la clave del host de manera diferente por entorno lógico.
-
Deje la comprobación habilitada de forma predeterminada (en
~/.ansible.cfg
) -
Deshabilite la comprobación de la clave de host en el directorio de trabajo para los libros de jugadas que ejecuta en instancias efímeras (
./ansible.cfg
junto con el libro de jugadas para pruebas unitarias contra máquinas virtuales vagabundas, automatización para instancias ec2 de corta duración)
Encontré la respuesta, debe establecer la variable de entorno
ANSIBLE_HOST_KEY_CHECKING
en
False
.
Por ejemplo:
ANSIBLE_HOST_KEY_CHECKING=False ansible-playbook ...
Puede pasarlo como argumento de línea de comando mientras ejecuta el libro de jugadas:
ansible-playbook play.yml --ssh-common-args=''-o StrictHostKeyChecking=no''
Sé que la pregunta ha sido respondida y también es correcta, pero solo quería vincular el documento ansible donde se explica claramente cuándo y por qué se debe agregar la verificación respectiva: comprobación host-key-checking
Si no desea modificar
ansible.cfg
o
playbook.yml
, puede configurar una variable de entorno:
export ANSIBLE_HOST_KEY_CHECKING=False
Use el parámetro nombrado como validate_certs para ignorar la validación ssh
- ec2_ami:
instance_id: i-0661fa8b45a7531a7
wait: yes
name: ansible
validate_certs: false
tags:
Name: ansible
Service: TestService
Al hacer esto, ignora el proceso de validación ssh
adelante a
Para aquellos que usan jenkins para ejecutar el libro de jugadas, acabo de agregar a mi trabajo de jenkins antes de ejecutar el libro de jugadas ansible la variable de entorno ANSIBLE_HOST_KEY_CHECKING = False. Por ejemplo esto:
export ANSIBLE_HOST_KEY_CHECKING=False
ansible-playbook ''playbook.yml'' /
--extra-vars="some vars..." /
--tags="tags_name..." -vv