ansible - Ansible systemctl --user 另一个用户
问题描述
我正在以非特权用户身份登录另一台计算机ansible
,我希望 ansible 为 user 启用 systemd 用户服务bob
。
没有 ansible,解决方案将ssh bob@machine
遵循systemctl --user enable service
但是,使用ansible,有两个问题:
- 如果已经作为另一个非特权用户 (ansible) 登录,较新版本的 ansible 将拒绝成为非特权用户 bob。
- 即使这有效,dbus 也不会启动,systemctl 也无法与 systemd 对话(如果我理解正确的话)。
一个非常难看的解决方法是执行 shell 命令,将远程主机 ssh 以 bob 的身份登录,然后在那里运行 systemctl raw 命令。
有没有更好的方法来完成这项工作?
解决方案
两种选择都是可行的。
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
推荐阅读
- javascript - 如何使用 bulma css 磁贴每行仅显示三篇文章?
- python - 更新 pandas 数据框并添加新列
- python - Assetion:如何在其他可能的类型中断言 None
- javascript - 当我使用变量作为“键”的“值”时,猫鼬的 findOne() 方法不返回记录
- javascript - 检索数据库值并在饼图中显示
- r - 标记R中数据框之间的公共行
- c++ - C++ 在单独的线程中调用类方法
- javascript - 从外部 JS 文件调用 Nuxt 中的组件方法
- php - 仅在 Doctrine 中尚未执行迁移时才执行迁移
- python - 将图例添加到颜色是动态的 matplotlib 散点图中