Ansible:如何将存储库克隆为其他用户

Ale*_*Grs 10 git ansible ansible-playbook

我正在尝试用Ansible编写部署规则.一些步骤是:

  1. 更新和升级服务器
  2. 创建一个名为harry的用户
  3. 将公钥和私钥添加到哈里
  4. 从bitbucket.org克隆一个Git存储库

我想将存储库作为harry用户在其主目录中克隆(这就是我复制它的公钥和私钥的原因).问题是无法指定用户必须执行git clone.所以Ansible尝试以root身份克隆存储库并失败,因为他没有访问存储库的权限.

你是如何解决这个问题的?

Wil*_*ich 20

根据Ansible关于权限提升的文档,Ansible在成为无特权用户方面存在局限性,因为它向Harry公开了一个安全漏洞.

使用Ansible git模块,您可以指定使用key_file参数的特权Ansible用户使用Harry的私钥,并使用become_user允许克隆的文件被授予Harry的所有权.例如:

- name: Clone bitbucket repo
  git:
    repo: git@bitbucket.org:your-repo.git
    dest: /var/www/
    version: master
    accept_hostkey: yes
    key_file: /home/harry/.ssh/id_rsa
  become_user: harry
Run Code Online (Sandbox Code Playgroud)

  • 添加 `become: yes` 很重要,因为如果你是 root,那么克隆的目录也将是 root,即使你 `become_user: harry` (5认同)

udo*_*dan 6

您可以为Playbook中的每个任务指定用户:

- name: Clone bitbucket repo
  git: ...
  become: yes
  become_user: harry
Run Code Online (Sandbox Code Playgroud)

有关更多详细信息,请参阅Ansible Privilege Escalation.

将私钥放在远程服务器上的一种更安全的替代方法是在服务器上的sshd配置和本地ssh配置中启用ssh密钥转发.钥匙然后永远不会离开你的本地盒子.

  • 我有ssh转发,它适用于root.但它似乎不适用于become_user (2认同)