使用 Ansible 通过 SSH 连接到 Vagrant 机器

问题描述 投票:0回答:4

通常,您可以使用

vagrant ssh
ssh 进入 Vagrant 管理的虚拟机。有两种选择:

  1. 您可以使用 Vagrant 生成的
    insecure_private_key
    来 认证。
  2. 使用您自己的私钥 - 前提是
    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 没有问题,而上面的代码无法运行。

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

ssh vagrant ansible
4个回答
32
投票

问题可能出在您的

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


3
投票

我认为你应该尝试使用 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


1
投票

对于那些使用 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

形成的文件夹内执行

0
投票

要让 Ansible 通过 SSH 访问 Vagrant 机器,我们需要以下成分:

这就是你可以做的。首先,执行

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
© www.soinside.com 2019 - 2024. All rights reserved.