我现在正在使用 vagrant。
我可以从本地终端 ping 虚拟机。
我想使用 ansible 来 ping 那个 vagrant 虚拟机:
$ ansible 192.168.33.101 -m ping -u root
但出现错误:
192.168.33.101 | UNREACHABLE! => {
"changed": false,
"msg": "Failed to connect to the host via ssh: Permission denied (publickey,password).\r\n",
"unreachable": true
}
/etc/ansible/hosts
我在文件中添加了该IP :
192.168.33.101
本地和虚拟机都安装了 ssh。那为什么无法连接呢?
答案1
您需要配置 ssh 连接。Ansibleping
模块命名令人困惑。该ping
模块实际上建立了一个 ssh 连接来验证是否能够登录以及是否配置了可用的 python。
因此,它ping command
可以告诉您与远程主机的网络连接正在正常工作,并ping module
告诉您 Ansible 能够在远程主机上运行命令。
看着那(这官方文档如何设置与你的 Vagrant 盒的 ssh 连接。
基本上你需要这样的东西:
ansible-playbook --private-key=~/.vagrant.d/insecure_private_key -u vagrant -i .vagrant/provisioners/ansible/inventory/vagrant_ansible_inventory playbook.yml
对于临时命令如下:
ansible --private-key=~/.vagrant.d/insecure_private_key -u vagrant ...
答案2
我做了以下工作来使其工作。我将主机的公钥添加到 vagrant vm 中的授权密钥中。
# on host machine, copy the public key
cat ~/.ssh/id_rsa.pub
# on vagrant session
sudo vi ~/.ssh/authorized_keys
# add the above copied key here and exit
现在您可以从主机访问并运行 ansible 到 vagrant 机器。
很多时候,默认情况下,vagrant machine 上的用户是流浪汉,因此你也可以运行以下命令
ansible 192.168.33.101 -m ping -u vagrant
希望这可以帮助!