ОШИБКА инициализации Ansible! Использование пароля SSH вместо ключа невозможно

Я хотел бы предоставить свои три узла из последнего с помощью 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

Мой файл hosts выглядит так:

[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] в файл хоста, но все еще не могу справиться с ошибкой.

Кто-нибудь сталкивался с такой же проблемой?


person Mark    schedule 25.02.2017    source источник


Ответы (6)


Создайте файл ansible/ansible.cfg в каталоге вашего проекта (т.е. ansible.cfg в provisioning_path на цели) со следующим содержимым:

[defaults]
host_key_checking = false

при условии, что на вашем Vagrant box уже установлено sshpass - это неясно, потому что сообщение об ошибке в вашем вопросе предполагает, что оно было установлено (в противном случае будет "ОШИБКА! использовать тип подключения 'ssh' с паролями, вы необходимо установить программу sshpass"), но в вашем ответе вы добавляете ее явно (sudo apt-get install sshpass), например не было

person techraf    schedule 26.02.2017
comment
Некоторых это может сбить с толку, поэтому, пожалуйста, поместите файл ansible.cfg в ту же папку, что и ваш инвентарь, а затем запустите его. - person vahidzolf; 07.05.2020
comment
Благодаря @techraf это сработало. - person Santosh Garole; 17.12.2020
comment
ansible.cfg расположение файла /etc/ansible/ansible.cfg - person Arun; 27.02.2021

Я использую Ansible версии 2.6.2, и решение с host_key_checking = false не работает.

Добавление переменной среды export ANSIBLE_HOST_KEY_CHECKING=False без проверки отпечатков пальцев.

person Branko    schedule 06.08.2018
comment
Это странно, так как host_key_checking все еще упоминается в последней ( 2.9) документ - person xenlo; 28.02.2020
comment
Хорошо, есть открытый вопрос по этому поводу: github.com/ansible/ansible/issues/49254< /а> - person xenlo; 28.02.2020

Эту ошибку также можно решить, просто экспортировав переменную ANSIBLE_HOST_KEY_CHECKING.

export ANSIBLE_HOST_KEY_CHECKING=False

источник: https://github.com/ansible/ansible/issues/9442

person Erman    schedule 15.11.2018

Этот сообщение SO дал ответ.

Я только что расширил файл 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
person Mark    schedule 25.02.2017
comment
обходной путь шеллскриптинга. Однако Ansible обеспечивает лучший способ! - person Mark; 27.02.2017
comment
Чтобы было ясно, все это проблема со стороны Vagrant через github.com/hashicorp/vagrant/issues/ 5005, и хотя это неудобно, с точки зрения безопасности, это на самом деле правильный подход, а другие на самом деле являются обходным путем. Для целей локальной разработки полностью используйте более простую проверку отключения, я не хочу показаться суетливым или педантичным, просто чувствую, что было бы неплохо уточнить для пользователей, которые не знакомы с вещами, чтобы они знали о последствиях для безопасности. Я просто боюсь, что если назвать это лучшим способом, это может ввести некоторых в заблуждение. :) - person Jasmine Hegman; 08.08.2019
comment
Я не уверен, что на данный момент стоит новый ответ, но я только что заметил в официальных документах для Ansible и Vagrant на стороне Ansible docs.ansible.com/ansible/latest/scenario_guides/ они рекомендуют строку конфигурации бродяг config.ssh.insert_key = false. Вероятно, проще, чем переменные ENV или манипуляции с .cfg. - person Jasmine Hegman; 08.08.2019
comment
@JasmineHegman, спасибо за обновление! Я согласен с тем, что конфигурация Vagrant намного удобнее и намного безопаснее, чем ENV var или .cfg. - person Mark; 23.10.2019

У меня была аналогичная проблема при работе с Ansible 2.9.6 в Ubuntu 20.04.

Когда я запускаю команду:

ansible all -m ping -i inventory.txt

Я получаю сообщение об ошибке:

цель | НЕУСПЕШНЫЙ! =› { msg: Использование пароля SSH вместо ключа невозможно, поскольку включена проверка ключа хоста, а sshpass не поддерживает это. Пожалуйста, добавьте отпечаток пальца этого хоста в свой файл known_hosts для управления этим хостом. }

Вот как я это исправил:

Когда вы устанавливаете ansible, он создает файл с именем ansible.cfg, его можно найти в каталоге /etc/ansible. Просто откройте файл:

sudo nano /etc/ansible/ansible.cfg

Раскомментируйте эту строку, чтобы отключить проверку хоста по ключу SSH.

host_key_checking = False

Теперь сохраните файл, и теперь все будет в порядке.

Примечание. Вы также можете попробовать добавить отпечаток хоста в свой файл known_hosts, подключившись к серверу по протоколу SSH со своего компьютера. Это предложит вам сохранить отпечаток хоста в файле known_hosts:

promisepreston@ubuntu:~$ ssh [email protected]

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.

[email protected]'s password: 
Welcome to Ubuntu 20.04.1 LTS (GNU/Linux 5.4.0-53-generic x86_64)

Это все.

Надеюсь, это поможет

person Promise Preston    schedule 22.11.2020

запустите приведенную ниже команду, она решила мою проблему

экспорт ANSIBLE_HOST_KEY_CHECKING=False && ansible-playbook -i

person harsha k    schedule 09.02.2021