[英]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
方法,例如su
: https://docs.ansible.com/ansible/latest/user_guide/become.html#become-directives
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.