Ansible任务 - 克隆没有SSH转发的私有git

时间:2017-07-07 12:25:48

标签: git ansible ansible-2.x

我正在尝试创建一个Ansible playbook,它将从我们的开发团队计算机和CI / CD服务器运行。

该手册中的任务之一是从私有git存储库获取项目的源代码。由于剧本必须从CI / CD服务器运行,我们无法使用SSH转发。

我想到的是将必要的SSH私钥复制到远程主机,然后使用密钥克隆来自私有git存储库的代码。

但是在尝试此操作时,克隆任务会挂起。尝试手动启动命令时,它会要求输入SSH私钥的密码。 SSH密钥不使用密码(空白)。

有没有人可以分享这个(可能非常常见的)问题的解决方案?

如果有人需要,这是我目前的剧本:

- name: Create SSH directory
  file: path=/root/.ssh state=directory

- name: Copy SHH key for Git access
  copy:
    content: "{{ git_ssh_key }}"
    dest: /root/.ssh/id_rsa
    owner: root
    group: root
    mode: 0600

# Also tried this, but it also hangs
#- name: Start SSH agent and add SSH key
#  shell: eval `ssh-agent -s` && ssh-add

- name: Get new source from GIT
  git: 
    key_file: /root/.ssh/id_rsa
    repo: "git@gitlab.com:user/repo.git"
    dest: "{{ staging_dir }}"
    depth: 1
    accept_hostkey: yes
    clone: yes

我正在使用ansible 2.3.1.0, python version = 2.7.12

2 个答案:

答案 0 :(得分:5)

以下是使其工作的步骤(在MacOS,Ubuntu LTS上使用Ansible 2.3.1和Python 2.7.10进行测试):

  1. 生成没有密码void onSaveInstanceState (Bundle outState, PersistableBundle outPersistentState)的新SSH密钥对。

  2. ssh-keygen -f my_ssh_key -N ''添加到您的存储库服务器用户配置文件

  3. 使用以下剧本测试:

  4. _

    my_ssh_key.pub

    重要安全通知

    如果您想在现实世界中使用此示例,请不要将您的私钥保存在纯文本中 - 请使用Ansible Vault

    您还应使用root作为您的ansible用户。创建没有sudo权限的新用户会更安全。

答案 1 :(得分:0)

我想问题是,对于自动化任务,git没有使用ssh密钥。我已经阅读(通过环顾四分钟),使用git 2.10,你可以在调用git时提供ssh东西来传递....所以我想你可以尝试类似的东西:

git -c core.sshCommand='ssh -i /path/to/private/key' fetch origin

或者您想要使用的任何其他命令。您也可以在配置中修复它:

git config core.sshCommand 'ssh -i /path/to/private/key'

无论如何,希望有所帮助

Specify private SSH-key to use when executing shell command with or without Ruby?