Vagrant with Ansible Provisioning-如何git克隆私有回购

Vagrant with Ansible Provisioning-如何git克隆私有回购,git,ssh,vagrant,ansible,ansible-playbook,Git,Ssh,Vagrant,Ansible,Ansible Playbook,我正在使用设置共享开发服务器。我正在尝试将其用于资源调配(以前使用过bash脚本)。我似乎无法正确配置东西,以便Ansible能够在资源调配阶段自动克隆我们的私有gitlab repo 我们的流浪汉档案是 Vagrant.configure("2") do |config| config.vm.box = "ubuntu/trusty64" config.vm.synced_folder /my/local/dir/, "/home/vagrant/repos" config.vm.

我正在使用设置共享开发服务器。我正在尝试将其用于资源调配(以前使用过bash脚本)。我似乎无法正确配置东西,以便Ansible能够在资源调配阶段自动克隆我们的私有gitlab repo

我们的流浪汉档案是

Vagrant.configure("2") do |config|
  config.vm.box = "ubuntu/trusty64"
  config.vm.synced_folder /my/local/dir/, "/home/vagrant/repos"
  config.vm.synced_folder ".",   "/vagrant"
  config.ssh.forward_agent = true
  config.vm.provision "ansible_local" do |ansible|
    ansible.playbook = "playbook.yml"
  end
end
我们的基本剧本看起来像

---

- hosts: all
  sudo: true
  tasks:
    - name: update apt cache
      apt: update_cache=yes

    - name: install git
      apt:  name=git state=present

    - name: clone test repo
      shell: ssh-keyscan -H our.private.gitlab.server >> ~/.ssh/known_hosts; ssh -T git@our.private.gitlab.server; git clone git@our.private.gitlab.server:me/amazing-repo.git
我有一个包含以下内容的
ansible.cfg
文件

[ssh_connection]
ssh_args = -o ForwardAgent=yes
在配置阶段,我遇到了以下错误(尽管在主机上使用
ssh add-L
验证代理是否拥有我的密钥)

权限被拒绝(公钥)。\r\n正在关闭到 “惊人的回购”…\n终止被拒绝(公钥)。\r\n终止:无法 从远程存储库读取。\n\n请确保具有正确的 访问权限\n并且存储库存在。“

我读过诸如和(以及更多其他)之类的文章,但我无法让它工作

我只想让配置步骤负责克隆repo,然后将它们同步到我的本地机器,这样任何提交/推送都将使用我本地存储的ssh密钥


更新 这似乎与我的工作有关,但我目前看不到任何解决方案。
@LukášLalinský的建议适用于OSX,但不适用于Windows。在Windows上,git克隆步骤在资源调配过程中失败,但如果我随后ssh到机器中,ssh密钥将转发到VM,并且存在
ssh_AUTH_SOCK
。我可以在这一阶段进行克隆,但不能在资源调配过程中进行克隆。

问题是,当您运行
sudo
时,您无法访问SSH代理套接字。解决此问题的唯一方法是在服务器上更改
/etc/sudoers
,以保留
SSH\u AUTH\u SOCK
环境变量

例如,将此添加到
/etc/sudoers
,作为剧本中的首要任务之一:

Defaults env_keep += "SSH_AUTH_SOCK"

以下是我在Ansible配置的Vagrant box中git克隆私有回购所需的所有设置,版本如下:

  • 流浪汉2.0.1
  • Ansible 2.4.1.0
  • Box
    ubuntu/xenial64
    -ubuntu16.04.3
  • VirtualBox 5.1.30可能不重要
  • macOS 10.13
在您的
文件中,配置您的Ansible provisioner以使用SSH代理转发:

Vagrant.configure('2') do |config|
  # ...
  config.ssh.forward_agent = true
  # ...
end
现在,将git服务器添加到guest上的已知主机:

# todo: better to add to the file instead of overwrite, but only if not already present
- name: set up bitbucket.org as a known host
  shell: 'ssh-keyscan -H bitbucket.org > /home/ubuntu/.ssh/known_hosts'
接下来,添加该任务以克隆repo。我们需要指定该任务不应以root用户身份运行,以便SSH代理转发可以工作:

- name: clone repo
  become: no # to use ssh agent forwarding, must not be root
  git:
    repo: 'git@bitbucket.org:myuser/myrepo.git'
    dest: /path/to/myrepo

在我的例子中,这导致了权限问题,因为一旦我不再以root身份运行
git clone
,我就不再有创建目标目录的权限。因此,我添加了一个先前的
文件
任务,以创建具有可编辑权限的root目录。

这在OSX上非常有效,但由于某些原因无法在Windows上运行