web-dev-qa-db-ja.com

Ansibleプロビジョニングエラー!キーの代わりにSSHパスワードを使用することはできません

Ansibleを使用して、最後のノードから3つのノードをプロビジョニングしたいと思います。

私のホストマシンは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.

Vagrantfileをansible.limit = :allで拡張し、[all:vars]をホストファイルに追加しましたが、それでもエラーを解決できません。

誰かが同じ問題に遭遇しましたか?

10
Mark

ファイルを作成するansible/ansible.cfgプロジェクトディレクトリ(つまりansible.cfg の中に provisioning_pathを次の内容で含む):

[defaults]
Host_key_checking = false

vagrantボックスにsshpassが既にインストールされている場合-不明なのは、質問のエラーメッセージがインストールされていることを示唆しているためです(それ以外の場合は、「ERROR!パスワード付きのssh '接続タイプでは、sshpassプログラムをインストールする必要があります ")。ただし、 your answer に明示的に追加します(Sudo apt-get install sshpass)、そうではなかった

25
techraf

Ansibleバージョン2.6.2を使用していますが、Host_key_checking = falseを使用したソリューションが機能しません。

環境変数export ANSIBLE_Host_KEY_CHECKING=Falseを追加して、指紋チェックをスキップします。

13
Branko

このエラーは、単にエクスポートANSIBLE_Host_KEY_CHECKING変数。

export ANSIBLE_Host_KEY_CHECKING=False

ソース: https://github.com/ansible/ansible/issues/9442

7
Erman

この 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
5
Mark