使用 Ansible SSH 进入 Vagrant 机器

SSH into a Vagrant machine with Ansible

通常,您可以使用 vagrant ssh ssh 进入 Vagrant 管理的 VM。有两种选择:

  1. 您可以使用 Vagrant 生成的 insecure_private_key 认证。
  2. 使用您自己的私钥 - 前提是 config.ssh.forward_agent设置为true,虚拟机为 配置正确

我使用第二个选项。当我 运行 vagrant ssh 时,我使用我的自定义私钥 ssh 进入机器。

现在我需要让 Ansible SSH 进入我的 Vagrant 机器,我不想为此使用 Vagrantfile

所以我执行了:

ansible-playbook -i hosts/development --private-key=~/.ssh/id_rsa -u vagrant dev.yml

我返回了这个错误:

fatal: [192.168.50.5] => SSH Error: Permission denied (publickey). while connecting to 192.168.50.5:22

hosts/inventory 文件仅包含我的 Vagrant VM (192.168.50.5) 的 IP。

我不知道为什么 Ansible 不能 ssh 进入虚拟机。它使用与执行 vagrant ssh.

时完全相同的用户 (vagrant) 和密钥 (id_rsa)

然而,使用 vagrant ssh sshing 没有问题,而上面的 运行.

如有任何建议,我们将不胜感激。

问题可能出在您的 hosts/inventory 文件中。您需要在其中为 Ansible 添加正确的连接配置,保存并重新 运行.

192.168.50.5 ansible_ssh_port=22 ansible_ssh_user=vagrant ansible_ssh_private_key_file=~/.ssh/id_rsa 

如果您没有使用端口 22,请相应地调整主机文件中的 ansible_ssh_port

也有可能你没有在 Vagrant 中设置你的公钥,因此这也行不通。要对此进行测试,运行:

vagrant ssh-config | grep IdentityFile
# result should be your private key and not
#   .vagrant/machines/default/virtualbox/private_key

如果您还没有将 pubkey 放入 Vagrant 虚拟机中,则需要先添加它,然后才能尝试您的私钥。

参考:http://docs.ansible.com/ansible/intro_inventory.html#list-of-behavioral-inventory-parameters

参考:https://docs.vagrantup.com/v2/cli/ssh_config.html

我认为你应该尝试使用 vagrant 生成的清单。 这将使您无需在 Vagrantfile 之外维护 Ansible 清单。

例如,您应该找到用于 vagrant ssh:

的库存
cat .vagrant/provisioners/ansible/inventory/vagrant_ansible_inventory
>>>
# Generated by Vagrant

default ansible_host=127.0.0.1 ansible_port=2222 ansible_user='vagrant' ansible_ssh_private_key_file='/home/someone/coding-in-a-project/.vagrant/machines/default/virtualbox/private_key'

您将能够 运行 ansible 临时命令和 ansible-playbook 命令。 (可能根据您的需要指定:--private-key=~/.ssh/your_private_key

ansible default -i .vagrant/provisioners/ansible/inventory/vagrant_ansible_inventory -m ansible.builtin.shell -a 'echo foobar'
ansible-playbook -i .vagrant/provisioners/ansible/inventory/vagrant_ansible_inventory playbook.yml

来源:https://docs.ansible.com/ansible/latest/scenario_guides/guide_vagrant.html