繁体   English   中英

Ansible 以另一个用户身份运行命令

[英]Ansible Run Command As Another User

我知道我的问题是become旨在解决什么问题。 我确实使用它。 但是,我的命令似乎仍以 ssh 用户身份运行。 我正在尝试执行which psql命令来获取可执行路径。 以 ssh 用户身份运行which psql会得到不同的 output 与以我成为用户身份运行相同的命令,即我想要的 output。

编辑问题是 $PATH 变量 ansible 按照评论中的建议使用。 它没有使用正确的 $PATH 变量。 如何指示 ansible 使用postgres用户 $PATH 变量? 按照此处的建议,使用环境模块对我不起作用 https://serverfault.com/questions/734560/ansible-become-user-not-picking-up-path-correctly

EDIT2所以一个解决方案是使用环境模块并将路径设置为我知道有 psql 可执行文件的路径,但这看起来很老套。 理想情况下,我希望能够使用 become users 路径而不必显式设置它。 这是骇人听闻的解决方案:

- name: Check if new or existing host
  command: which psql
  environment:
    PATH: "/usr/pgsql-13/bin/:{{ansible_env.PATH}}"
  become: yes
  become_user: postgres

剧本

---
- name: Playbook Control
  hosts: all
  become: yes
  become_user: postgres

  tasks:
    - name: Check if new or existing host
      shell: whoami && which psql
      register: output

相关 Output(就像我在 myhost.net 上以 my_user 身份运行任务命令一样)

"stdout_lines": [
    "postgres",
    "/usr/bin/psql"
]

预期为 Output(如果我以 myhost.net 上的 postgres 用户身份运行任务命令,则为 output)

"stdout_lines": [
    "postgres",
    "/usr/pgsql-13/bin/psql"
]

存货

myhost.net 

[all:vars]
ansible_connection=ssh
ansible_user=my_user

命令

ansible-playbook --ask-vault-pass  -vvv -i temp_hosts playbook.yml

在保险库中,我只有 my_user 的 ssh 通行证。

运行带有-vvv标志的剧本显示升级成功,并且此任务的 output 是作为 ssh 用户运行命令的 output,而不是成为用户。 有任何想法吗?

Ansible 默认使用sudo作为默认的become方法。 根据 linux 系统的配置方式(检查/etc/sudoers ),可能是为 sudo 命令保留了$PATH变量。

您可以更改此设置,或强制 ansible 使用不同的become方法,例如suhttps://docs.ansible.com/ansible/latest/user_guide/become.html#become-directives

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM