Ansible 如何更改用户ID并获取该用户的主目录?

Ansible 如何更改用户ID并获取该用户的主目录?,ansible,Ansible,我希望能够在playbook中更改用户ID,然后在主机上获取该用户ID的主目录。我该怎么做 我知道我可以用“been:”和“been_user:”来更改userid,但这在任务级别有效。我可以使用{{lookup('env','home)}}变量获取主目录,但这似乎在playbook级别起作用。这是我最近的一次尝试: --- - hosts: all vars: user_id: "{{ userid }}" tasks: - set_fact: hom

我希望能够在playbook中更改用户ID,然后在主机上获取该用户ID的主目录。我该怎么做

我知道我可以用“been:”和“been_user:”来更改userid,但这在任务级别有效。我可以使用{{lookup('env','home)}}变量获取主目录,但这似乎在playbook级别起作用。这是我最近的一次尝试:

---
- hosts: all
  vars:
       user_id: "{{ userid }}"
  tasks:
  - set_fact:
        home_dir: "{{ lookup('env', 'HOME') }}"
    become: yes
    become_user: "{{ user_id }}"
  - debug:
        msg: "Variable values: user_id: {{ user_id }}  home_dir: {{ home_dir }}"
我的命令是这样的:

$ ansible-playbook myplaybook.yaml --limit MYHOSTS --extra-vars "userid=myid"
答复如下:

ok: [host-01] => {
    "msg": "Variable values: user_id: myid  home_dir: /root"
 }
ok: [host-02] => {
    "msg": "Variable values: user_id: myid  home_dir: /root"
}
ok: [host-03] => {
    "msg": "Variable values: user_id: myid home_dir: /root"
}
有没有办法将userid更改为“myid”并让playbook知道主目录是“/home/myid”


谢谢

当您使用
been
been\u user
时,实际上是在告诉Ansible从最初登录的用户更改当前用户。
根据:

这些指令(Been、Been_user等)可以从播放到任务级别进行设置,但会被连接变量覆盖,因为它们可能是特定于主机的

您还必须注意,通过使用上述语法,实际上您正在激活一个特权升级方法,以成为一个非特权用户。这是相当危险的,有相当多的限制。请阅读这里:

我希望下面的剧本能给你更清晰的画面:

您应该通过执行以下命令来运行上述命令:

# ansible-playbook playbook.yaml -i /path/to/inventory/hosts -e "userid=myid"
# ansible-playbook myplaybook.yaml -i path/to/inventory/hosts --limit MYHOSTS --become-user=myid --extra-vars "userid=myid"
它将返回:
第一个任务-->myid

成为根-->根

最终任务-->myid

注意:您还可以为每个任务分别覆盖
远程用户。


但是,如果您仍然需要以自己的方式进行,您可以尝试以下方法:

使用以下命令运行:

# ansible-playbook playbook.yaml -i /path/to/inventory/hosts -e "userid=myid"
# ansible-playbook myplaybook.yaml -i path/to/inventory/hosts --limit MYHOSTS --become-user=myid --extra-vars "userid=myid"

最后,如果这些都没有达到您想要的效果,请尝试获取主目录,方法是使用
命令
模块,然后首先注册它,然后使用
{{registered_name.stdout_lines}
:

使用最后一种解决方法,您甚至不需要更改用户,因为它会打印用户
userid
的主目录

# ansible-playbook myplaybook.yaml -i path/to/inventory/hosts --limit MYHOSTS -e "userid=myid"
希望有帮助;但这个问题以前也被问过。您可能可以在此处找到更多详细信息:

# ansible-playbook myplaybook.yaml -i path/to/inventory/hosts --limit MYHOSTS -e "userid=myid"