我以非特权用户ansible
的身份登录另一台计算机,并且希望能够为该用户bob
启用系统用户服务。
没有烦人,解决方案将是ssh bob@machine
,然后是systemctl --user enable service
但是,在ansible中,存在两个问题:
一个非常丑陋的解决方法是执行shell命令,将远程主机ssh作为bob并在其中运行systemctl raw命令。
是否有更好的方法来完成此任务?
答案 0 :(得分:1)
两种选择都是可行的。
1)远程用户:鲍勃
- hosts: test_01
become: no
remote_user: admin
tasks:
- command: whoami
register: result
- debug:
var: result.stdout
- command: whoami
remote_user: bob
register: result
- debug:
var: result.stdout
给予:
"result.stdout": "admin"
"result.stdout": "bob"
2)引用Becoming an Unprivileged User
的 pipelining = true使用流水线。启用流水线后,Ansible不会将模块保存到客户端上的临时文件中。而是将模块通过管道传递到远程python解释器的stdin。管道传输不适用于涉及文件传输的python模块(例如:复制,获取,模板)或非python模块。
- hosts: test_01
become: no
remote_user: admin
tasks:
- command: whoami
register: result
- debug:
var: result.stdout
- command: whoami
become_user: bob
become_method: sudo
become: yes
register: result
- debug:
var: result.stdout
给予
"result.stdout": "admin"
"result.stdout": "bob"
使用
$ grep pipe ansible.cfg
pipelining = true