【问题标题】:Ansible systemctl --user for another userAnsible systemctl --user 另一个用户
【发布时间】:2019-07-10 08:17:01
【问题描述】:

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

没有ansible,解决方案是ssh bob@machine,后跟systemctl --user enable service

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

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

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

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

【问题讨论】:

  • bob 是否有 ssh 密钥来 ssh 到机器?如果是这样,不确定但也许 remote_user 设置可用于直接以“bob”而不是“ansible”身份登录机器
  • 听起来很有趣,这是否适用于剧本中由用户ansible 执行的单个角色/任务?

标签: ansible systemd


【解决方案1】:

这两种选择都是可行的。

1) remote_user: bob

- 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) pipelining = true 引用 Becoming an Unprivileged User

使用流水线。启用流水线后,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

【讨论】:

    猜你喜欢
    • 2017-05-09
    • 1970-01-01
    • 1970-01-01
    • 2019-11-18
    • 2016-03-14
    • 2012-07-22
    • 2016-05-08
    • 2014-04-18
    • 1970-01-01
    相关资源
    最近更新 更多