繁体   English   中英

对于sudo用户,Ansible env变量不同

[英]Ansible env variable differs for sudo user

我们面临的问题是环境变量。 对于用户A, JAVA_HOME设置为1.5,对于root,它设置为1.7。 当我手动登录并检查A和root中的版本时,它反映了相同的情况。

当我通过ansible作为用户A以sudo设置为true( sudo_user=root )进行SSH时,我预计java版本为1.7但是它返回为1.5,这是用户A的版本。

任何想法为什么手动登录和安全登录之间的行为有所不同?

根据系统的配置,当Ansible通过sudo升级其权限时,环境将被“清理”,为您提供最小的env变量集。 您的/etc/sudoers文件可能具有设置env_reset

你有几个选择。

在sudoers文件中,您可以删除env_reset ,也可以为要保留的每个变量添加env_keep MY_VAR条目。

在Ansible中,您可以显式设置所需的环境变量。 在特定任务上执行此操作如下所示:

- hosts: all
  tasks:
    - cmd: echo $MY_ENV
      become: true
      environment:
        MY_ENV: "foo"

您可以在其文档的“ 设置环境”部分中阅读有关为Ansible设置环境的更多信息。

在不知道您需要的任何其他内容的情况下,我强烈建议您在Ansible代码中设置变量并单独保留sudoers文件,除非您真正需要将这些值保存在Ansible上下文之外的env中。 这有助于避免用户出现不一致的sudo环境。

这里有两件重要的事情:

  • 你是如何检查root的环境变量的? sudo env没有为root提供正确的环境变量。
  • 你是如何设置root的环境变量的?

我最好的猜测是你没有正确设置环境变量。 有关如何读取环境变量并将其设置在正确的位置,请参阅答案。

暂无
暂无

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

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