Como definir host_key_checking = false no arquivo de inventário ansible?

113

Eu gostaria de usar o ansible-playbookcomando em vez de ' vagrant provision'. No entanto, a configuração host_key_checking=falseno hostsarquivo não 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

Existe uma variável de configuração fora de Vagrantfileque pode substituir esse valor?

mbdev
fonte

Respostas:

182

Devido ao fato de eu ter respondido isso em 2014, eu atualizei minha resposta para contabilizar as versões mais recentes do ansible.

Sim, você pode fazer isso no nível do host / inventário (o que se tornou possível nas versões mais recentes do ansible ) ou no nível global:

inventário :

Adicione o seguinte.

ansible_ssh_common_args='-o StrictHostKeyChecking=no'

hospedeiro :

Adicione o seguinte.

ansible_ssh_extra_args='-o StrictHostKeyChecking=no'

as opções de hosts / inventário funcionarão com o tipo de conexão sshe não paramiko. Algumas pessoas podem argumentar fortemente que o inventário e os hosts são mais seguros porque o escopo é mais limitado.

global:

Guia do usuário Ansible - Verificação de chave de host

  • Você pode fazer isso no arquivo /etc/ansible/ansible.cfgou ~/.ansible.cfg:

    [defaults]
    host_key_checking = False
    
  • Ou você pode configurar uma variável env (isso pode não funcionar nas versões mais recentes do ansible):

    export ANSIBLE_HOST_KEY_CHECKING=False
    
Rico
fonte
32
Estou usando o ansible 1.7.2 e minha experiência mostra que a variável de ambiente ANSIBLE_HOST_KEY_CHECKINGfunciona, mas -e 'host_key_checking=False'não funciona.
Marc Abramowitz
6
Sua primeira afirmação "Sim, mas não no nível de hosts / inventário" é falsa. Você pode usar ansible_ssh_common_args='-o StrictHostKeyChecking=no'ouansible_ssh_extra_args='-o StrictHostKeyChecking=no'
Shammel Lee de
1
Apenas a última opção funcionou para mim (exportar ANSIBLE_HOST_KEY_CHECKING = False) antes de executar meu manual.
ted-k42
1
"Sim, mas não no nível de hosts / inventário." - É falso, comprovado pela minha resposta . Eu até diria que isso não é realmente uma resposta à pergunta sobre como defini-lo no nível de estoque .
gertvdijk
@gertvdijk Eu respondi isso em 2014. O Ansible passou por várias revisões. Não é mais o caso?
Rico
68

Sim, você pode definir isso no nível de inventário / host.

Com uma resposta já aceita presente, acho que esta é uma resposta melhor para a pergunta sobre como lidar com isso no nível de estoque. Considero isso mais seguro isolando essa configuração insegura para os hosts necessários para isso (por exemplo, sistemas de teste, máquinas de desenvolvimento local).

O que você pode fazer no nível do inventário é adicionar

ansible_ssh_common_args='-o StrictHostKeyChecking=no'

ou

ansible_ssh_extra_args='-o StrictHostKeyChecking=no'

à sua definição de host (consulte Ansible Behavioral Inventory Parameters ).

Isso funcionará desde que você use o sshtipo de conexão, não paramikoou qualquer outra coisa).

Por exemplo, uma definição de host Vagrant seria semelhante a ...

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'

A execução do Ansible será bem-sucedida sem alterar nenhuma variável de ambiente.

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

Caso você queira fazer isso para um grupo de hosts, aqui está uma sugestão para torná-lo um grupo var suplementar para um grupo existente como este:

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

[insecuressh:children]
mytestsystems

[insecuressh:vars]
ansible_ssh_common_args='-o StrictHostKeyChecking=no'
Gertvdijk
fonte
4
Esta é uma resposta muito melhor.
marcv81
Essa sugestão funcionou para mim e concordo que isso deve ser definido em um nível de projeto (em vez de no nível global) devido a questões de segurança.
andrewdcato
1
Incluí ansible_ssh_common_args: '-o StrictHostKeyChecking=no'no arquivo group_vars arquivo yml.
g.
4

Não pude usar:

ansible_ssh_common_args='-o StrictHostKeyChecking=no'

no arquivo de inventário. Parece que o ansible não considera essa opção no meu caso (ansible 2.0.1.0 do pip no ubuntu 14.04)

Decidi usar:

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

Isso me ajudou.

Além disso, você pode definir essa variável no grupo em vez de cada host:

[servers_group:vars]
ansible_ssh_common_args='-o UserKnownHostsFile=/dev/null'
vskubriev
fonte
Definir a opção UserKnownHostsFile/ GlobalKnownHostsFilepara /dev/nulltambém funciona. É estranho que a configuração StrictHostKeyCheckingnão funcione para você. O mais provável é que alguma opção na configuração do SSH seja a causa.
gertvdijk
1 para -o UserKnownHostsFile=/dev/null. Sem ele também não funcionou para mim, independentemente da localização e da forma que especifiquei ansible_ssh_common_args descrito nas outras respostas.
Até Kuhn
0

Ao /etc/ansible/ansible.cfgremover o comentário da linha:

host_key_check = False

e /etc/ansible/hostsdescomente a linha

client_ansible ansible_ssh_host=10.1.1.1 ansible_ssh_user=root ansible_ssh_pass=12345678

Isso é tudo

user8759294
fonte
0

Adicionar o seguinte à configuração do ansible funcionou durante o uso de comandos ad-hoc do ansible:

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

Versão Ansible

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

Você define essas configurações no arquivo /etc/ansible/ansible.cfgou ~/.ansible.cfgou ansible.cfg(em seu diretório atual)

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

testado com ansible 2.9.6 no ubuntu 20.04

Alupotha
fonte