sudo - ansible playbooks 中的 user vs sudo vs sudo_user

标签 sudo ansible

我已阅读 Ansible 文档,但对 ansible playbook 中的以下三个参数仍然有点困惑:user、sudo、sudo_user。

我尝试了以下具有不同参数组合的剧本:

  1. user:deploy => 有效

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

  3. user:deploy、sudo: True 和 sudo_user:deploy => 有效

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

谢谢

最佳答案

  • user是您进行 ssh 操作的用户。根据您的配置,您可以 ssh 作为 deploy .

  • sudo_user是当 sudo: yes 时您在主机上 sudo 的用户已设置。

所以我认为在你的情况下没有 sudosudo_user如果您可以 ssh 作为 deploy ,则这是必要的.

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

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

请注意user已被弃用(因为它令人困惑)。您应该使用remote_user相反。

编辑:情况 #2 可能因 ssh 确认问题而挂起:您可能在 ~deploy/.ssh/known_hosts 中有 bitbucket.org 主机 key 但~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

关于sudo - ansible playbooks 中的 user vs sudo vs sudo_user,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20176957/

相关文章:

ansible - Ansible 中长时间运行的命令以失败状态结束且主机无法访问

Ansible:仅当 Python 模块不存在时才安装它

bash - 如何让 sudo 访问 bash 脚本?

macos - 我的sudo命令无法正常工作

java - sudo: java: 从 root 用户退出后找不到命令

linux - 在 Ubuntu 16.04 中,如果没有 sudo 用户,则无法运行 Docker 命令

python - 以 root 身份运行 subprocess.run 不起作用

pip - 使用 Ansible pip 模块安装 python 软件包时出现问题

Ansible 内联 jinja 模板化为列表

python - 我收到消息 : "The pexpect python module is required" when running pexpect module on ansible