Ansible sudo_user没有使用正确的$ HOME目录

时间:2014-04-04 21:33:53

标签: git solaris ansible ansible-playbook

我有一个git目录,由我不能ssh的用户拥有。我目前正在使用sudo_user: user,但它似乎没有正确设置$ HOME。我的用户帐户在〜/ .ssh / known_hosts文件中有github,但它被添加到我的~ssh_user / .ssh / known_hosts文件中(来自accept_hostkey = yes)。

http://docs.ansible.com/git_module.html

- hosts: myhost
  sudo_user: user
  tasks:
    - name: git
      git: repo=git@github.com:user/repo.git dest=/home/user/repo update=no accept_hostkey=yes

我是否需要做些什么来告诉ansible正确使用$ HOME?

我在Joyent上运行Solaris,但我不认为这直接适用于这个问题。

4 个答案:

答案 0 :(得分:6)

ansible.cfg 文件中添加sudo_flags

[defaults]
sudo_flags = -i

这会运行 sudo用户的登录脚本来填充environemt变量,例如$ HOME

答案 1 :(得分:1)

sudo对一堆环境变量做了一些修改,特别是HOME。您可以通过以下方式查看:

sudo -u user | grep HOME

如果你得到/home/user,那你很好,但你可能会得到/home/ssh_user

这实际上与sudo有关,而不是与ansible有关。

为了避免这种情况,您可以添加/etc/sudoers

Defaults    always_set_home
Defaults    set_home

再试一次sudo user | grep HOME,你应该得到正确的结果。

如果没有,请检查Defaults env_keep sudo指令。它也可以在这里发挥作用。在Defaults env_keep += "HOME"中搜索/etc/sudoers,然后删除(此指令要求sudo保留发送sudo的用户HOME

祝你好运。

编辑:这些指令也可能出现在/etc/sudoers.d/中。我不了解Solaris,所以YMMV。

答案 2 :(得分:0)

我们使用一些快乐的智能操作系统机器。我通过设置如下的环境解决了这个问题。这适用于某些应用程序。

- name         : Test Envirinment
  hosts        : all
  gather_facts : no
  tasks:
    - name: echo host
      shell: echo $HOME
      sudo_user: someuser
      environment:
           HOME: "/var/lib/dir"

或者您可以使用@leucos的建议解决方案,这将是一个更永久的解决方案

希望有助于欢呼

答案 3 :(得分:0)

只需在任务级别使用become_flags

- hosts: myhost
  become_user: user
  tasks:
    - name: git
      git: repo=git@github.com:user/repo.git dest=/home/user/repo update=no accept_hostkey=yes
      become_flags: '-E'