在使用Ansible的Git模块进行克隆,推送或拉取内部托管的私有git存储库(例如在GitLab实例上)时,如何指定用户名和密码以通过Git服务器进行身份验证?
我在documentation中找不到任何方法。
答案 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's和F. 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