构建Vagrant项目时,运行ad hoc 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?
答案 0 :(得分:14)
我错过了Vagrant的私人密钥。在这里找到: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
答案 1 :(得分:3)
虽然,这个问题已经过时了,但已经在ansible documentation
上进行了解释这是片段
ansible-playbook -i .vagrant/provisioners/ansible/inventory/vagrant_ansible_inventory --private-key=~/.vagrant.d/insecure_private_key -u vagrant playbook.yml
希望,这会有助于他人。感谢
答案 2 :(得分:2)
如果您不想一直使用额外的标记,请在与ansible.cfg
相同的目录中创建Vagrantfile
,其中包含以下内容:
[defaults]
inventory = .vagrant/provisioners/ansible/inventory/vagrant_ansible_inventory
然后你可以运行ad-hoc命令:
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
答案 3 :(得分:1)
在主机的~/.ssh/known_hosts
文件中删除指向127.0.0.1
的条目。然后尝试再次配置vagrant实例。
答案 4 :(得分:1)
不是每次都传递inventory_file,private_key和ssh_user,而是将它们放入ansible配置文件中。请在此处查看我的更详细答案:https://stackoverflow.com/a/25316963/502457
@geerlingguy正确地指出您可以将该信息放入库存文件中。但是,您仍需要键入库存路径,或将其添加到ansible.cfg。
此外,如果您使用Vagrant配置EC2框(通过插件),则会自动生成清单文件。您可以对其进行编辑,但下次配置一些新的EC2框时会受到轰炸。
答案 5 :(得分: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
再试一次。