使用 Ansible SSH 进入 Vagrant 机器
SSH into a Vagrant machine with Ansible
通常,您可以使用 vagrant ssh
ssh 进入 Vagrant 管理的 VM。有两种选择:
- 您可以使用 Vagrant 生成的
insecure_private_key
认证。
- 使用您自己的私钥 - 前提是
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
我认为你应该尝试使用 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
通常,您可以使用 vagrant ssh
ssh 进入 Vagrant 管理的 VM。有两种选择:
- 您可以使用 Vagrant 生成的
insecure_private_key
认证。 - 使用您自己的私钥 - 前提是
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
我认为你应该尝试使用 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