ОШИБКА! Использование пароля 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]
в файл хоста, но все еще не может пройти через ошибку.
Кто-нибудь сталкивался с такой же проблемой?
8 ответов
Создать файл ansible/ansible.cfg
в каталоге вашего проекта (т.е. ansible.cfg
в provisioning_path
на цель) со следующим содержанием:
[defaults]
host_key_checking = false
при условии, что ваша коробка Vagrant имеет sshpass
уже установлено - неясно, потому что сообщение об ошибке в вашем вопросе предполагает, что оно было установлено (в противном случае было бы "ОШИБКА! для использования типа соединения" ssh "с паролями, вы должны установить программу sshpass"), но в своем ответе вы добавить это явно (sudo apt-get install sshpass
) вроде бы не было
Я использую Ansible версии 2.6.2 и решение с host_key_checking = false
не работает
Добавление переменной среды export ANSIBLE_HOST_KEY_CHECKING=False
пропуск проверки отпечатков пальцев.
Эта ошибка также может быть решена простым экспортом ANSIBLE_HOST_KEY_CHECKING
переменная.
export ANSIBLE_HOST_KEY_CHECKING=False
запустите приведенную ниже команду, она решила мою проблему
экспорт ANSIBLE_HOST_KEY_CHECKING= Ложь && ansible-playbook -i
У меня была аналогичная проблема при работе с 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
файл с помощью SSHing на сервер с вашего компьютера, вам будет предложено сохранить отпечаток хоста на вашем
known_hosts
файл:
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)
Это все.
надеюсь, это поможет
все предоставленные решения требуют изменений в глобальном конфигурационном файле или добавления переменной среды, что создает проблемы для подключения новых людей.
Вместо этого вы можете добавить следующую переменную в свой инвентарь или переменные хоста.
ansible_ssh_common_args: '-o StrictHostKeyChecking=no'
Этот ТАК пост дал ответ.
Я только что расширил файл 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
Добавление ansible_ssh_common_args='-o StrictHostKeyChecking=no' в ваш инвентарь
нравиться:
[all:vars]
ansible_ssh_common_args='-o StrictHostKeyChecking=no'
[all:children]
servers
[servers]
host1
ИЛИ:
[servers]
host1 ansible_ssh_common_args='-o StrictHostKeyChecking=no'