Duas opções - a primeira, como você disse em sua própria resposta, é definir a variável de ambiente ANSIBLE_HOST_KEY_CHECKING
como False.
A segunda maneira de configurá-lo é colocá-lo em um arquivo ansible.cfg, e essa é uma opção realmente útil, pois você pode configurá-lo globalmente (no nível do sistema ou do usuário, no /etc/ansible/ansible.cfg
ou~/.ansible.cfg
) ou em um arquivo de configuração no mesmo diretório como o manual que você está executando.
Para fazer isso, crie um ansible.cfg
arquivo em um desses locais e inclua o seguinte:
[defaults]
host_key_checking = False
Você também pode definir muitos outros padrões úteis lá, como coletar ou não fatos no início de uma peça, mesclar hashes declarados em vários locais ou substituir um por outro, e assim por diante. Há uma lista grande de opções aqui nos documentos Ansible.
Edit: uma nota sobre segurança.
A validação da chave do host SSH é uma camada de segurança significativa para hosts persistentes - se você estiver se conectando à mesma máquina várias vezes, é valioso aceitar a chave do host localmente.
Para instâncias do EC2 de maior duração, faria sentido aceitar a chave do host com uma tarefa executada apenas uma vez na criação inicial da instância:
- name: Write the new ec2 instance host key to known hosts
connection: local
shell: "ssh-keyscan -H {{ inventory_hostname }} >> ~/.ssh/known_hosts"
Não há valor de segurança para verificar as chaves do host nas instâncias em que você se levanta dinamicamente e remove logo após a execução do playbook, mas há valor de segurança na verificação de máquinas persistentes nas chaves do host. Portanto, você deve gerenciar a verificação de chave do host de maneira diferente por ambiente lógico.
- Deixe a verificação ativada por padrão (em
~/.ansible.cfg
)
- Desabilite a verificação de chave do host no diretório de trabalho para playbooks executados em instâncias efêmeras (
./ansible.cfg
junto com o playbook para testes de unidade contra VMs vagantes, automação para instâncias ec2 de curta duração)
known_hosts
arquivos locais para que o SSH e o Ansible reconheçam a máquina. Não fazer isso, principalmente desabilitando a verificação de chave do host, diminui a segurança do SSH para quase zero e permite ataques MITM. Muitas máquinas que parecem estar em uma "rede interna" estão realmente conectadas à Internet, onde uma única resposta DNS mais rápida permite que você converse com o invasor em vez do seu alvo.ssh-keyscan <ip list>
em uma máquina confiável (para mim, é um host bastião / jump) dentro da mesma rede e coloquei os resultados emknown_hosts
Para configurar esse host confiável, a AWS expõe o chave do host nos logs de inicialização da instância; portanto, procurar essa chave era uma etapa manual que eu nunca eliminaria se estivesse fazendo uma recriação completa do meu ambiente. Mas esse host geralmente não precisava ser excluído. Isso pode ajudar.Encontrei a resposta, você precisa definir a variável de ambiente
ANSIBLE_HOST_KEY_CHECKING
paraFalse
. Por exemplo:fonte
encaminhar para nikobelia
Para aqueles que usam o jenkins para executar o play book, acabei de adicionar ao meu trabalho do jenkins antes de executar o ansible-playbook a variável de ambiente ANSIBLE_HOST_KEY_CHECKING = False Por exemplo, isto:
fonte
Mudar
host_key_checking
parafalse
para todos os hosts é uma idéia muito ruim.A única vez que você deseja ignorá-lo é no "primeiro contato", que essas duas tarefas realizarão:
Portanto, apenas desabilitamos a verificação da chave do host se não tivermos a chave do host em nosso
known_hosts
arquivo.fonte
Você pode transmiti-lo como argumento de linha de comando enquanto executa o manual:
ansible-playbook play.yml --ssh-common-args='-o StrictHostKeyChecking=no'
fonte
Se você não deseja modificar
ansible.cfg
ou oplaybook.yml
, basta definir uma variável de ambiente:fonte
Use o parâmetro nomeado como validate_certs para ignorar a validação ssh
Ao fazer isso, ele ignora o processo de validação ssh
fonte
validate_certs
parâmetro simplesmente diz ao boto para não validar o certificado HTTPS da API da AWS. Não afeta a verificação da chave SSH.Sei que a pergunta foi respondida e está correta também, mas só queria vincular o documento ansible, onde é explicado claramente quando e por que a respectiva verificação deve ser adicionada: verificação da chave do host
fonte
A maioria dos problemas aparece quando você deseja adicionar um novo host ao inventário dinâmico (via módulo add_host) no manual. Não quero desativar permanentemente a verificação de host de impressão digital, para soluções como desativá-lo em um arquivo de configuração global não são aceitáveis para mim. Exportar var como
ANSIBLE_HOST_KEY_CHECKING
antes de executar o playbook é outra coisa a ser feita antes da execução que precisa ser lembrada.É melhor adicionar o arquivo de configuração local no mesmo diretório em que está o manual. Crie um arquivo nomeado
ansible.cfg
e cole o seguinte texto:Não há necessidade de lembrar de adicionar algo em ambientes ou adicionar
ansible-playbook
opções. É fácil colocar esse arquivo no repositório ansible do git.fonte