У меня возникает следующая ошибка, когда я пытаюсь запустить очень простой playbook с помощью команды «ansible-playbook site.yml -vvvv» против двух виртуальных машин Vagrant но я не уверен, как его решить.Получение Ansible «Permission denied (publickey, password)» на нескольких виртуальных машинах
PLAY [Configure servers] ****************************************
GATHERING FACTS ***************************************************************
<dev.db> ESTABLISH CONNECTION FOR USER: vagrant
<dev.db> REMOTE_MODULE setup
<dev.db> EXEC ssh -C -tt -vvv -o ControlMaster=auto -o ControlPersist=60s -o ControlPath="/Users/flaugher/.ansible/cp/ansible-ssh-%h-%p-%r" -o StrictHostKeyChecking=no -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o User=vagrant -o ConnectTimeout=10 dev.db /bin/sh -c 'mkdir -p $HOME/.ansible/tmp/ansible-tmp-1455651230.31-78392827258464 && chmod a+rx $HOME/.ansible/tmp/ansible-tmp-1455651230.31-78392827258464 && echo $HOME/.ansible/tmp/ansible-tmp-1455651230.31-78392827258464'
fatal: [dev.db] => SSH Error: Permission denied (publickey,password).
while connecting to 192.168.2.102:22
It is sometimes useful to re-run the command using -vvvv, which prints SSH debug output to help diagnose the issue.
<dev.web> ESTABLISH CONNECTION FOR USER: vagrant
<dev.web> REMOTE_MODULE setup
<dev.web> EXEC ssh -C -tt -vvv -o ControlMaster=auto -o ControlPersist=60s -o ControlPath="/Users/flaugher/.ansible/cp/ansible-ssh-%h-%p-%r" -o StrictHostKeyChecking=no -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o User=vagrant -o ConnectTimeout=10 dev.web /bin/sh -c 'mkdir -p $HOME/.ansible/tmp/ansible-tmp-1455651230.3-64535332497824 && chmod a+rx $HOME/.ansible/tmp/ansible-tmp-1455651230.3-64535332497824 && echo $HOME/.ansible/tmp/ansible-tmp-1455651230.3-64535332497824'
fatal: [dev.web] => SSH Error: Permission denied (publickey,password).
while connecting to 192.168.2.101:22
It is sometimes useful to re-run the command using -vvvv, which prints SSH debug output to help diagnose the issue.
TASK: [debug msg="hello, world!"] *********************************************
FATAL: no hosts matched or all hosts have already failed -- aborting
PLAY RECAP ********************************************************************
to retry, use: --limit @/Users/smith/site.retry
dev.db : ok=0 changed=0 unreachable=1 failed=0
dev.web : ok=0 changed=0 unreachable=1 failed=0
Вот как мои виртуальные машины настроены:
Vagrant.configure(2) do |config|
config.vm.define "web" do |web|
web.vm.box = "debian/jessie64"
web.vm.network "private_network", ip: "192.168.2.101"
web.vm.network :forwarded_port, guest: 22, host: 10122, id: "ssh"
web.vm.host_name = "dev.web"
end
config.vm.define "db" do |db|
db.vm.box = "debian/jessie64"
db.vm.network "private_network", ip: "192.168.2.102"
db.vm.network :forwarded_port, guest: 22, host: 10222, id: "ssh"
db.vm.host_name = "dev.db"
end
end
Вот мой ansible.cfg файл:
[defaults]
hostfile = inventory.ini
remote_user = vagrant
host_key_checking = False
# private_key_file = ???
Вот inventory.ini:
[development]
dev.web
dev.db
И playbook site.yml:
- name: Configure servers
hosts: development
gather_facts: True
vars:
foo: "bar"
tasks:
- debug: msg="hello, world!"
- fail:
Это похоже на проблему с файлом ключа SSH. Моя первая мысль была, так как есть файл приватного ключа для каждого виртуального сервера:
.vagrant/machines/web/virtualbox/private_key
.vagrant/machines/db/virtualbox/private_key
... возможно, мне нужно указать несколько параметров private_key_file в моем файле конфигурации? Однако документация Ansible не говорит, что это возможно. Я также думал, что, возможно, мне нужны отдельные группы «[web]» и «[db]» в файле конфигурации, чтобы я мог указывать отдельные файлы ключей, но опять же документация Ansible не указывает, что это возможность. У бродячего пользователя на моей локальной машине есть общедоступные и закрытые ключи в каталоге ~ vagrant/.ssh, все с правильными разрешениями. Я могу использовать SSH для каждой виртуальной машины, используя команду «vagrant ssh [web | db]», а домашний каталог vagrant на каждой виртуальной машине имеет файл authorized_keys в каталоге ~/.ssh. Может кто-нибудь увидеть, что я "делаю неправильно?
Спасибо!
Спасибо Я считаю, что здесь происходит, что private_key файлы, которые вы описываете совпасть с открытыми ключами бродячего пользователя, который бродячие кладет в ~ v файл agrant/.ssh/authorized_keys на каждом удаленном хосте. SSH потерпел неудачу, и я получил ошибку «Permission denied», потому что Ansible не смог найти секретный ключ, необходимый для аутентификации с каждым удаленным хостом. Альтернативное решение заключается в том, чтобы отказаться от использования бродячего аккаунта для запуска учебника. Предоставьте свою учетную запись при запуске Vagrant, поместите свой открытый ключ в auth-ключи на удаленном компьютере, создайте файл sudoers и установите remote_user = вы. – William