在ansible剧本中用户vs sudo vs sudo_user

Mic*_*ael 60 sudo ansible

我已经阅读了Ansible文档,但我仍然对ansible playbooks中的以下三个参数感到困惑:user,sudo,sudo_user.

我尝试了以下不同组合参数的playbooks:

  1. user:deploy => Works

  2. user:deploy和sudo:True => 挂起git任务

  3. user:deploy,sudo:True和sudo_user:deploy => Works

sudo_user实际上做了什么?何时以及为什么要使用这些组合?

- hosts: all
  user: deploy
  sudo: True
  sudo_user: deploy

  tasks:
      - name: Ensure code directory
        file: dest=/home/deploy/code state=directory

      - name: Deploy app
        git: repo=git@bitbucket.org:YAmikep/djangotutorial.git dest=/home/deploy/code
Run Code Online (Sandbox Code Playgroud)

谢谢

leu*_*cos 71

  • user是你正在使用的用户.使用你的配置,你就像ssh一样deploy.

  • sudo_user是设置时你在主机上sudo的用户sudo: yes.

所以我觉得在你的情况没有一个sudosudo_user有必要的,如果你可以用ssh deploy.

但是,如果以root身份ssh,则需要设置 sudo_user: deploysudo: yes.

如果您要求'sudo'但未指定任何用户,Ansible将使用您的~/.ansible.cfg(sudo_user)默认设置,默认为root.

请注意,user不推荐使用(因为它令人困惑).你应该使用remote_user.

编辑:案例#2可能挂起,因为SSH的问题确认:你可能有bitbucket.org主机密钥的~deploy/.ssh/known_hosts,但不是~root/.ssh/known_hosts

更新:从Ansible 2.x开始,使用becomebecome_user不是弃用sudosudo_user.用法示例:

- hosts: all
  user: deploy
  become: true
  become_user: deploy

  tasks:
      - name: Ensure code directory
        file: dest=/home/deploy/code state=directory

      - name: Deploy app
        git: repo=git@bitbucket.org:YAmikep/djangotutorial.git dest=/home/deploy/cod
Run Code Online (Sandbox Code Playgroud)

  • `sudo`现在已被弃用,并替换为```http://docs.ansible.com/ansible/become.html#for-those-from-pre-1-9-sudo-and-su-still-work (4认同)