Ansible provisioning ERROR! Using a SSH password instead of a key is not possible

后端 未结 5 1410
深忆病人
深忆病人 2021-02-04 01:31

I would like to provision with my three nodes from the last one by using Ansible.

My host machine is Windows 10.

My Vagrantfile looks like:



        
相关标签:
5条回答
  • 2021-02-04 01:53

    I had a similar challenge when working with Ansible 2.9.6 on Ubuntu 20.04.

    When I run the command:

    ansible all -m ping -i inventory.txt
    

    I get the error:

    target | FAILED! => { "msg": "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." }

    Here's how I fixed it:

    When you install ansible, it creates a file called ansible.cfg, this can be found in the /etc/ansible directory. Simply open the file:

    sudo nano /etc/ansible/ansible.cfg
    

    Uncomment this line to disable SSH key host checking

    host_key_checking = False
    

    Now save the file and you should be fine now.

    Note: You could also try to add the host's fingerprint to your known_hosts file by SSHing into the server from your machine, this prompts you to save the host's fingerprint to your known_hosts file:

    promisepreston@ubuntu:~$ ssh myusername@192.168.43.240
    
    The authenticity of host '192.168.43.240 (192.168.43.240)' can't be established.
    ECDSA key fingerprint is SHA256:9Zib8lwSOHjA9khFkeEPk9MjOE67YN7qPC4mm/nuZNU.
    Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
    Warning: Permanently added '192.168.43.240' (ECDSA) to the list of known hosts.
    
    myusername@192.168.43.240's password: 
    Welcome to Ubuntu 20.04.1 LTS (GNU/Linux 5.4.0-53-generic x86_64)
    

    That's all.

    I hope this helps

    0 讨论(0)
  • 2021-02-04 01:56

    Create a file ansible/ansible.cfg in your project directory (i.e. ansible.cfg in the provisioning_path on the target) with the following contents:

    [defaults]
    host_key_checking = false
    

    provided that your Vagrant box has sshpass already installed - it's unclear, because the error message in your question suggests it was installed (otherwise it would be "ERROR! to use the 'ssh' connection type with passwords, you must install the sshpass program"), but in your answer you add it explicitly (sudo apt-get install sshpass), like it was not

    0 讨论(0)
  • 2021-02-04 02:06

    This error can also be solved by simply export ANSIBLE_HOST_KEY_CHECKING variable.

    export ANSIBLE_HOST_KEY_CHECKING=False
    

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

    0 讨论(0)
  • 2021-02-04 02:10

    I'm using Ansible version 2.6.2 and solution with host_key_checking = false doesn't work.

    Adding environment variable export ANSIBLE_HOST_KEY_CHECKING=False skipping fingerprint check.

    0 讨论(0)
  • 2021-02-04 02:12

    This SO post gave the answer.

    I just extended the known_hosts file on the machine that is responsible for the provisioning like this:

    Snippet from my modified Vagrantfile:

    ...
    if index == 3
        node.vm.provision :pre, type: :shell, path: "install.sh"
    
        node.vm.provision :setup, type: :ansible_local do |ansible|
    ...
    

    My install.sh looks like:

    # 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
    
    0 讨论(0)
提交回复
热议问题