我正在使用Vagrant来设置共享开发服务器。我正在尝试使用Ansible进行配置(之前使用过bash脚本)。我似乎无法正确配置事物,因此Ansible可以在配置阶段自动克隆我们的私有gitlab repos。
我们的Vagrantfile是
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
代理有我的密钥)
权限被拒绝(publickey)。\ r \ n克隆到 '惊人的回购'... \ n许可被拒绝(公钥)。\ r 从远程存储库中读取。\ n \ n请确保您具有正确的 访问权限\ n和存储库存在。“
我读过this和this等文章(以及其他许多文章),但我无法让它发挥作用。
我只想要提供步骤来处理克隆回购。然后我会将它们同步到我的本地机器,因此任何提交/推送都将使用我本地存储的ssh密钥。
它似乎与this issue有关但我目前看不到任何解决方案。
@LukášLalinský的建议适用于OSX但不适用于Windows。在Windows上,git clone步骤在配置期间失败,但如果我然后ssh进入计算机,则ssh密钥将转发到VM并且SSH_AUTH_SOCK
存在。我可以在这个阶段克隆,而不是在配置期间。
答案 0 :(得分:1)
问题是当您运行sudo
时,您将无法访问SSH代理套接字。解决此问题的唯一方法是更改服务器上的/etc/sudoers
以保留SSH_AUTH_SOCK
环境变量。
例如,将其添加到/etc/sudoers
作为游戏手册中的第一个任务之一:
Defaults env_keep += "SSH_AUTH_SOCK"
答案 1 :(得分:0)
以下是在Ansible配置的Vagrant框中git克隆私人仓库所需的所有设置,具有以下版本:
<style> #fullWidthDiv{ width: 100% }
#halfWidthDiv{ width: 50% }
</style>
- Ubuntu 16.04.3 在ubuntu/xenial64
中,配置Ansible配置程序以使用SSH代理转发:
Vagrantfile
现在,将你的git服务器添加到guest上的已知主机:
Vagrant.configure('2') do |config|
# ...
config.ssh.forward_agent = true
# ...
end
接下来,添加任务以克隆存储库。我们需要指定任务不以root身份运行,以便SSH代理转发工作:
# 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'
在我的情况下,这导致了权限问题,因为一旦我没有以root身份运行- 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
,我就不再拥有创建目标目录的权限。所以我添加了一个先前的git clone
任务,以root身份创建具有可编辑权限的目录。