对于sudo用户

时间:2015-12-18 07:46:39

标签: linux shell ansible

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

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

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

2 个答案:

答案 0 :(得分:2)

根据系统的配置,当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"

您可以在其文档的Setting the Environment部分详细了解如何为Ansible设置环境。

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

答案 1 :(得分:0)

这里有两件重要的事情:

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

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