通常,您可以使用
vagrant ssh
ssh 进入 Vagrant 管理的虚拟机。有两种选择:
insecure_private_key
来
认证。 config.ssh.forward_agent
设置为 true
,VM 为
配置正确我使用第二个选项。当我运行
vagrant ssh
时,我使用自定义私钥 ssh 进入机器。
现在我需要让 Ansible SSH 进入我的 Vagrant 机器,但我不想使用
Vagrantfile
。
所以我执行了:
ansible-playbook -i hosts/development --private-key=~/.ssh/id_rsa -u vagrant dev.yml
我返回了这个错误:
致命:[192.168.50.5] => SSH 错误:权限被拒绝(公钥)。 连接到 192.168.50.5:22 时
hosts/inventory
文件仅保存我的 Vagrant 虚拟机的 IP (192.168.50.5)。
我不知道为什么 Ansible 无法 ssh 进入虚拟机。它使用与执行
vagrant
时完全相同的用户 (id_rsa
) 和密钥 (vagrant ssh
)。
但是,使用
vagrant ssh
ssh 没有问题,而上面的代码无法运行。
如有任何建议,我们将不胜感激。
问题可能出在您的
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
对于那些使用 inventory.txt 的人,它看起来像这样:
[vmgroup]
192.168.56.10
[vmgroup:vars]
ansible_ssh_user=vagrant
ansible_ssh_private_key_file=/Users/amar/centos7/.vagrant/machines/default/virtualbox/private_key
这个私钥文件位置是从
vagrant ssh-config
命令的输出中观察到的;在由 vagrant init centos/7
形成的文件夹内执行
要让 Ansible 通过 SSH 访问 Vagrant 机器,我们需要以下成分:
vagrant ssh-config
输出 OpenSSH 有效配置以连接到 Vagrant 虚拟机(请参阅 vagrant ssh-config - 命令行界面 )ansible_ssh_common_args
始终附加到 ssh 命令的默认命令行(请参阅如何构建清单 - Ansible 文档)-F
指定备用的每用户配置文件(请参阅 ssh - Linux 手册页)这就是你可以做的。首先,执行
vagrant ssh-config > .vagrant/ssh-config
。然后,创建一个专用于 Vagrant 的清单文件(例如 inventories/vagrant.yml
),其中包含以下内容:
all:
hosts:
vagrant-host-1:
vagrant-host-2:
vars:
ansible_ssh_common_args: -F .vagrant/ssh-config
您可以通过在命令中添加
-i inventories/vagrant.yml
来让 Ansible SSH 进入 Vagrant 虚拟机!例如,您可以运行以下命令来测试连接:
ansible -i inventories/vagrant.yml all -m ping