Ansible配置错误!无法使用SSH密码而不是密钥

时间:2017-02-25 22:40:05

标签: ssh vagrant ansible ansible-inventory

我想使用Ansible来配置最后一个节点。

我的主机是Windows 10。

我的Vagrantfile看起来像:

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

我的剧本如下:

---

# my little playbook

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

我的主机文件如下:

[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

执行vagrant up --provision后,我收到以下错误:

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.

我使用ansible.limit = :all扩展了我的Vagrantfile并将[all:vars]添加到主机文件中,但仍然无法解决错误。

有没有人遇到同样的问题?

6 个答案:

答案 0 :(得分:24)

在项目目录中创建文件ansible/ansible.cfg(即目标ansible.cfg中的provisioning_path),其中包含以下内容:

[defaults]
host_key_checking = false

如果您的Vagrant框已安装sshpass - 它不清楚,因为您的问题中的错误消息表明它已安装(否则它将是" 错误!要使用带密码的&#s;'连接类型,您必须安装sshpass程序"),但在your answer中明确添加(sudo apt-get install sshpass }),就像它不是

答案 1 :(得分:9)

我正在使用Ansible 2.6.2版,而host_key_checking = false的解决方案不起作用。

添加环境变量export ANSIBLE_HOST_KEY_CHECKING=False会跳过指纹检查。

答案 2 :(得分:4)

SO post给出了答案。

我只是在负责配置的机器上扩展了known_hosts文件,如下所示:

我修改过的Vagrantfile的片段:

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

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

我的install.sh看起来像:

# 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

答案 3 :(得分:2)

也可以通过简单导出ANSIBLE_HOST_KEY_CHECKING变量来解决此错误。

export ANSIBLE_HOST_KEY_CHECKING=False

来源:https://github.com/ansible/ansible/issues/9442

答案 4 :(得分:0)

Ubuntu 20.04 上使用 Ansible 2.9.6 时,我遇到了类似的挑战。

当我运行命令时:

ansible all -m ping -i inventory.txt

我得到了错误:

目标|失败! => { “ msg”:“由于启用了主机密钥检查,并且sshpass不支持,因此无法使用SSH密码而不是密钥。请将该主机的指纹添加到known_hosts文件中以管理该主机。” }

这是我修复的方式

在安装ansible时,它将创建一个名为ansible.cfg的文件,可以在/etc/ansible目录中找到该文件。只需打开文件:

sudo nano /etc/ansible/ansible.cfg

取消注释此行以禁用SSH密钥主机检查

host_key_checking = False

现在保存文件,现在应该可以了。

注意:您还可以尝试通过从计算机SSH到服务器中,将主机的指纹添加到known_hosts文件中,这会提示您将主机的指纹保存到{{ 1}}文件:

known_hosts

仅此而已。

我希望这会有所帮助

答案 5 :(得分:0)

运行下面的命令,它解决了我的问题

导出 ANSIBLE_HOST_KEY_CHECKING=False && ansible-playbook -i