我们面临的问题是环境变量。对于用户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的版本。
任何想法为什么手动登录和手机之间的行为不同安全登录?
答案 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)
这里有两件重要的事情:
sudo env
没有为root提供正确的环境变量。我最好的猜测是你没有正确设置环境变量。请参阅this答案,了解如何读取环境变量并将其设置在正确的位置。