Ansible systemctl-另一个用户的用户

时间:2019-07-10 08:17:01

标签: ansible systemd

我以非特权用户ansible的身份登录另一台计算机,并且希望能够为该用户bob启用系统用户服务。

没有烦人,解决方案将是ssh bob@machine,然后是systemctl --user enable service

但是,在ansible中,存在两个问题:

  1. 较新版本的ansible如果已经以另一个非特权用户(ansible)身份登录,则将拒绝成为非特权用户bob。
  2. 即使这样做有效,dbus也不会启动,systemctl也将无法与systemd通信(如果我正确理解的话)。

一个非常丑陋的解决方法是执行shell命令,将远程主机ssh作为bob并在其中运行systemctl raw命令。

是否有更好的方法来完成此任务?

1 个答案:

答案 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