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