15

在构建 Vagrant 项目时,运行临时 Ansible 任务而不是向 playbook 添加测试命令会很有帮助。我尝试了几种针对 VM 的方法,但不断收到此错误:

default | FAILED => SSH encountered an unknown error during the connection. We 
recommend you re-run the command using -vvvv, which will enable SSH debugging
output to help diagnose the issue

我正在使用 Vagrant 生成的 Ansible 库存文件,并且该框有一个有效的主机名。如何使用单个 Ansible 任务来定位我的 Vagrant VM?

4

6 回答 6

14

我错过了 Vagrant 的私有 ssh 密钥。在这里发现:stackoverflow.com/a/18943360/503463

有几种方法可以做到这一点,但这是我正在使用的:

ansible all -i vagrant_ansible_inventory_default -u vagrant --private-key ~/.vagrant.d/insecure_private_key -m ping

之前的一切-m基本上都是样板文件。我正在使用默认用户名“vagrant”的标准框。该标志-i vagrant_ansible_inventory_default告诉 Ansible 使用 Vagrant 生成的清单文件;它包含一个主机,因此定位all是安全的(“默认”也可以)。最后,我们传递 Vagrant 私钥来验证 ssh 连接:--private-key ~/.vagrant.d/insecure_private_key

于 2013-10-11T22:18:31.537 回答
4

虽然,这个问题很老,但它已在ansible 文档中进行了解释

这是片段

ansible-playbook -i .vagrant/provisioners/ansible/inventory/vagrant_ansible_inventory --private-key=~/.vagrant.d/insecure_private_key -u vagrant playbook.yml

希望,这会帮助其他人。谢谢

于 2015-01-17T20:41:00.623 回答
2

解决方案

如果您不想一直使用额外的标志,ansible.cfg请在与您相同的目录中Vagrantfile使用以下内容创建一个:

[defaults]
inventory = .vagrant/provisioners/ansible/inventory/vagrant_ansible_inventory

然后你可以运行你的临时命令:

ansible all -m setup

细节

第一次使用 Ansible 配置器时,Vagrant 会写出一个清单文件,其中包含所有必需的参数,包括用户名和 ssh 密钥信息。您可以使用-i标志指定它:

ansible all -i .vagrant/provisioners/ansible/inventory/vagrant_ansible_inventory \
        -m setup

您还可以使用ANSIBLE_INVENTORY环境变量:

export ANSIBLE_INVENTORY=.vagrant/provisioners/ansible/inventory/vagrant_ansible_inventory
于 2016-03-10T22:56:49.347 回答
1

您可以将它们放入 ansible 配置文件,而不是每次都传递 inventory_file、private_key 和 ssh_user。在这里查看我更详细的答案:https ://stackoverflow.com/a/25316963/502457

@geerlingguy 正确地指出您可以将该信息放入库存文件中。但是,您仍然需要输入清单路径,或者将其添加到您的 ansible.cfg。

此外,如果您使用 Vagrant 来配置 EC2 盒子(通过插件),那么会自动生成清单文件。您可以对其进行编辑,但下次您配置一些新的 EC2 框时,它会被炸毁。

于 2014-08-14T20:33:19.487 回答
1

在您的主机~/.ssh/known_hosts文件中删除指向127.0.0.1. 然后尝试再次配置 vagrant 实例。

于 2014-02-11T07:58:27.713 回答
0

也许如果你在这个错误之前运行你的盒子,你应该执行这个:

ssh-keygen -f "/home/your_user/.ssh/known_hosts" -R host

你也应该运行:

ssh-keygen -f "/home/your_user/.ssh/known_hosts" -R 127.0.0.1

然后再试一次。

于 2014-10-15T20:27:43.673 回答