web-dev-qa-db-fra.com

Ansible provisioning ERROR! L'utilisation d'un mot de passe SSH au lieu d'une clé n'est pas possible

Je voudrais provisionner mes trois nœuds du dernier en utilisant Ansible.

Mon ordinateur hôte est Windows 10.

Mon Vagrantfile ressemble à:

Vagrant.configure("2") do |config|

  (1..3).each do |index|
    config.vm.define "node#{index}" do |node|

      node.vm.box = "ubuntu"
      node.vm.box = "../boxes/ubuntu_base.box"

      node.vm.network :private_network, ip: "192.168.10.#{10 + index}"

      if index == 3
        node.vm.provision :setup, type: :ansible_local do |ansible|
          ansible.playbook = "playbook.yml"
          ansible.provisioning_path = "/vagrant/ansible"
          ansible.inventory_path = "/vagrant/ansible/hosts"
          ansible.limit = :all
          ansible.install_mode = :pip
          ansible.version = "2.0"
        end
      end

    end
  end

end

Mon cahier ressemble à ceci:

---

# my little playbook

- name: My little playbook
  hosts: webservers
  gather_facts: false
  roles:
    - create_user

Mon fichier hosts ressemble à:

[webservers]
192.168.10.11
192.168.10.12

[dbservers]
192.168.10.11
192.168.10.13

[all:vars]
ansible_connection=ssh
ansible_ssh_user=vagrant
ansible_ssh_pass=vagrant

Après avoir exécuté vagrant up --provision j'ai eu l'erreur suivante:

Bringing machine 'node1' up with 'virtualbox' provider...
Bringing machine 'node2' up with 'virtualbox' provider...
Bringing machine 'node3' up with 'virtualbox' provider...
==> node3: Running provisioner: setup (ansible_local)...
    node3: Running ansible-playbook...

PLAY [My little playbook] ******************************************************

TASK [create_user : Create group] **********************************************
fatal: [192.168.10.11]: FAILED! => {"failed": true, "msg": "ERROR! Using a SSH password instead of a key is not possible because Host Key checking is enabled and sshpass does not support this.  Please add this Host's fingerprint to your known_hosts file to manage this Host."}
fatal: [192.168.10.12]: FAILED! => {"failed": true, "msg": "ERROR! Using a SSH password instead of a key is not possible because Host Key checking is enabled and sshpass does not support this.  Please add this Host's fingerprint to your known_hosts file to manage this Host."}

PLAY RECAP *********************************************************************
192.168.10.11              : ok=0    changed=0    unreachable=0    failed=1
192.168.10.12              : ok=0    changed=0    unreachable=0    failed=1

Ansible failed to complete successfully. Any error output should be
visible above. Please fix these errors and try again.

J'ai étendu mon Vagrantfile avec ansible.limit = :all et ajouté [all:vars] au fichier hôte, mais je ne parviens toujours pas à résoudre le problème.

Quelqu'un at-il rencontré le même problème?

6
Mark

Créez un fichier ansible/ansible.cfg dans votre répertoire de projet (c'est-à-dire ansible.cfg dans le provisioning_path sur la cible) avec le contenu suivant:

[defaults]
Host_key_checking = false

à condition que sshpass soit déjà installé dans votre boîte Vagrant - ce n'est pas clair, car le message d'erreur dans votre question suggère qu'il a été installé (sinon, ce serait "ERROR! pour utiliser le type de connexion 'ssh' avec des mots de passe, vous devez installer le programme "), mais dans votre réponse vous l'ajoutez explicitement (Sudo apt-get install sshpass), comme si ce n'était pas

20
techraf

J'utilise Ansible version 2.6.2 et la solution avec Host_key_checking = false ne fonctionne pas.

Ajout de la variable d’environnement export ANSIBLE_Host_KEY_CHECKING=False en ignorant la vérification des empreintes digitales.

8
Branko

Ce SO post a donné la réponse.

Je viens de prolonger le fichier known_hosts sur la machine responsable de l'approvisionnement, comme ceci:

Extrait de mon Vagrantfile modifié:

...
if index == 3
    node.vm.provision :pre, type: :Shell, path: "install.sh"

    node.vm.provision :setup, type: :ansible_local do |ansible|
...

Mon install.sh ressemble à:

# add web/database hosts to known_hosts (IP is defined in Vagrantfile)
ssh-keyscan -H 192.168.10.11 >> /home/vagrant/.ssh/known_hosts
ssh-keyscan -H 192.168.10.12 >> /home/vagrant/.ssh/known_hosts
ssh-keyscan -H 192.168.10.13 >> /home/vagrant/.ssh/known_hosts
chown vagrant:vagrant /home/vagrant/.ssh/known_hosts

# reload ssh in order to load the known hosts
/etc/init.d/ssh reload
4
Mark

Cette erreur peut également être résolue par la simple exportation de la variable ANSIBLE_Host_KEY_CHECKING.

export ANSIBLE_Host_KEY_CHECKING=False

source: https://github.com/ansible/ansible/issues/9442

1
Erman