我有一个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,但我不认为这直接适用于这个问题。
答案 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'