2016-02-16 5 views
0

У меня возникает следующая ошибка, когда я пытаюсь запустить очень простой 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. Может кто-нибудь увидеть, что я "делаю неправильно?

Спасибо!

ответ

1

Вы можете указать ключи на уровне запасов с ansible_ssh_private_key_file.

Вы можете сделать это с помощью group_vars или host_vars в зависимости от вашего использования. в вашем случае вы можете просто хотите, чтобы поместить их встроенными в файле инвентаризация, как это:

[development] 
dev.web ansible_ssh_private_key_file=/path/to/.vagrant/machines/web/virtualbox/private_key 
dev.db ansible_ssh_private_key_file=/path/to/.vagrant/machines/db/virtualbox/private_key 
+0

Спасибо Я считаю, что здесь происходит, что private_key файлы, которые вы описываете совпасть с открытыми ключами бродячего пользователя, который бродячие кладет в ~ v файл agrant/.ssh/authorized_keys на каждом удаленном хосте. SSH потерпел неудачу, и я получил ошибку «Permission denied», потому что Ansible не смог найти секретный ключ, необходимый для аутентификации с каждым удаленным хостом. Альтернативное решение заключается в том, чтобы отказаться от использования бродячего аккаунта для запуска учебника. Предоставьте свою учетную запись при запуске Vagrant, поместите свой открытый ключ в auth-ключи на удаленном компьютере, создайте файл sudoers и установите remote_user = вы. – William