首页 > 解决方案 > Ansible systemctl --user 另一个用户

问题描述

我正在以非特权用户身份登录另一台计算机ansible,我希望 ansible 为 user 启用 systemd 用户服务bob

没有 ansible,解决方案将ssh bob@machine遵循systemctl --user enable service

但是,使用ansible,有两个问题:

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

一个非常难看的解决方法是执行 shell 命令,将远程主机 ssh 以 bob 的身份登录,然后在那里运行 systemctl raw 命令。

有没有更好的方法来完成这项工作?

标签: ansiblesystemd

解决方案


两种选择都是可行的。

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)流水线=真正引用成为非特权用户

使用流水线。启用流水线后,Ansible 不会将模块保存到客户端上的临时文件中。相反,它将模块通过管道传输到远程 python 解释器的标准输入。流水线不适用于涉及文件传输的 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

推荐阅读