Ansible Galaxy Provisioner 未在 Vagrant 中使用私钥

Posted

技术标签:

【中文标题】Ansible Galaxy Provisioner 未在 Vagrant 中使用私钥【英文标题】:Ansible galaxy provisionner is not using private key in Vagrant 【发布时间】:2016-10-25 16:14:52 【问题描述】:

我有以下 vagrantfile

Vagrant.configure(2) do |config|

  config.ssh.insert_key = true
  config.vm.define "dev" do |app|
    app.vm.provider "docker" do |d|
      d.image = "allansimon/allan-docker-dev-python"
      d.has_ssh = true
    end

    app.ssh.username = "vagrant"

    app.vm.provision "file", source: "~/.ssh/id_rsa", destination: ".ssh/id_rsa"


    app.vm.provision "permits-root-to-clone", type: "shell" do |s|
      s.inline = "cp /home/vagrant/.ssh/id_rsa /root/.ssh/id_rsa"
    end
    # if i put here a new shell provisionner , to the exact same repo than in my galaxy roles , it works

    app.vm.provision "ansible_local" do |ansible|
      ansible.galaxy_role_file = "build_scripts/ansible/requirements.yml"
      ansible.playbook = "build_scripts/ansible/bootstrap.yml"
    end
  end
end

requirements.yml 引用了一些私有的 ansible 角色,它们是 git 克隆的

喜欢这个

- src: git@gitlab.mydomain.com:ansible-roles/myrole.git
  scm: git
  version: 'master'
  name: myrole

我将我的桌面私钥注入到 vagrant 中

它在销售供应商中工作 如果在我在机器内vagrant ssh 之后它可以工作

但它不适用于 ansible_local 供应商 有错误

==> dev: Running provisioner: ansible_local...
    dev: Running ansible-galaxy...
 [WARNING]: - supervisord was NOT installed successfully: - command git clone
git@gitlab.mydomain.com:ansible-roles/myrole.git myrole failed in
directory /tmp/tmpQNgCTo (rc=128)
ERROR! - you can use --ignore-errors to skip failed roles and finish processing the list.
Ansible failed to complete successfully. Any error output should be
visible above. Please fix these errors and try again.

有没有办法强制 vagrant 中的 ansible 使用特定的私钥?

【问题讨论】:

【参考方案1】:

我认为这是因为 ssh 客户端要么无法找到您的私钥,要么无法在 vagrant 框中使用它(权限问题?)以用于对 git 存储库进行身份验证。您或许应该添加一个默认配置文件 (~/.ssh/config)。

这似乎得到了确认,因为当您使用 ssh 连接到 vagrant box 时,本地 ssh 客户端能够使用与您的桌面计算机的连接一起转发的 ssh-agent 获取密钥。

如果要手动调试

在 vagrant box 中使用 ssh 杀死 ssh 代理 (ssh-agent -k) 手动检索 git 存储库 (git clone git@gitlab.mydomain.com:ansible-roles/myrole.git) 或尝试直接 ssh (ssh git@gitlab.mydomain.com) 可能会有所帮助 找出错误

【讨论】:

以上是关于Ansible Galaxy Provisioner 未在 Vagrant 中使用私钥的主要内容,如果未能解决你的问题,请参考以下文章

更新Ansible Galaxy页面

Ansible 角色/包 - Ansible Galaxy - 安装 MAC OSX 时出错

八ansible roles和ansible galaxy

如何自动安装 Ansible Galaxy 角色?

如何将本地角色与从ansible-galaxy加载的角色分开?

Ansible Galaxy Provisioner 未在 Vagrant 中使用私钥