如何在使用Ansible Git模块时传递用户名和密码?

时间:2016-06-15 17:22:56

标签: ansible ansible-playbook ansible-2.x

在使用Ansible的Git模块进行克隆,推送或拉取内部托管的私有git存储库(例如在GitLab实例上)时,如何指定用户名和密码以通过Git服务器进行身份验证?

我在documentation中找不到任何方法。

4 个答案:

答案 0 :(得分:37)

您可以使用以下内容:

---
- hosts: all 
  gather_facts: no
  become: yes
  tasks:
    - name: install git package
      apt:
        name: git

    - name: Get updated files from git repository 
      git: 
        repo: "https://{{ githubuser | urlencode }}:{{ githubpassword }}@github.com/privrepo.git"
        dest: /tmp

注意:如果您的密码还包含@,#,$ etc等特殊字符,请同时使用urlencode密码:{{ githubpassword | urlencode }}

然后执行以下剧本:

ansible-playbook -i hosts github.yml -e "githubuser=arbabname" -e "githubpassword=xxxxxxx"

答案 1 :(得分:17)

改进Arbab Nazar的答案,您可以通过提示输入凭据来避免在终端中泄露您的密码。

playbook.yml

--- 
- name: ANSIBLE - Shop Installation 
  hosts: '{{ target }}' 

  vars_prompt: 
    - name: "githubuser" 
      prompt: "Enter your github username" 
      private: no 
    - name: "githubpassword" 
      prompt: "Enter your github password" 
      private: yes 

  [...] 

在任务中引用变量。

task.yml

- name: Get updated files from git repository 
  git:
    repo=https://{{ githubuser | urlencode }}:{{ githubpassword | urlencode }}@github.com/privrepo.git
    dest=/tmp

这会将密码保存为.git/config中的明文url remote "origin"。 可以使用以下任务将其删除。

- name: Ensure remote URL does not contain credentials
  git_config:
    name: remote.origin.url
    value: https://github.com/privrepo.git
    scope: local
    repo: /tmp

取自:Clone a private git repository with Ansible (using password prompt)

答案 2 :(得分:1)

这里的所有答案都使得将用户名/密码泄漏到日志或错误消息中太容易了,即使在我的情况下这是一个只读的部署令牌,这似乎也是不可取的。

这是另一种选择:

    - name: Configure Git credential storage
      command: "git config --global credential.helper store"
    - name: Populate the Git credential store
      template:
        src: files/git_credentials.j2
        dest: /home/appuser/.git-credentials
        owner: appuser
        group: appuser
        mode: u=rw,g=,o=
      no_log: true

模板如下:

https://{{ gitlab_username|urlencode }}:{{ gitlab_password|urlencode }}@gitlab.example.org

答案 3 :(得分:0)

虽然Arbab'sF. Santiago's的答案是正确的,但有一个重要警告:使用[('245|CALENDAR_DATE-DATE'), ('129|AREA-VARCHAR'),('450|DIVISION-VARCHAR'),('678|CALENDAR_DATE-DATE'),('298|DIVISION-VARCHAR')] 作为签出URL,Git会将密码以明文形式存储在[('245,678|CALENDAR_DATE-DATE'), ('129|AREA-VARCHAR'),('450,298|DIVISION-VARCHAR')] 内夹。这已在评论中提到,但我认为它值得更多关注。您可能要删除Git模块并使用原始Git,例如:

https://{{ githubuser | urlencode }}:{{ githubpassword | urlencode }}@github.com/privrepo.git