You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在单台服务器上针对多用户运行Ansible Playbook?

解决Ansible同一服务器多用户执行任务的问题

这个问题我之前也踩过坑!你原来的inventory写法里重复定义了server1四次,Ansible在解析inventory时,会自动合并同一主机的变量配置,后面的设置会直接覆盖前面的,所以最后只有user4的配置生效,前面三个用户的设置都被忽略了。

下面给你两种实用的解决办法,按需选择即可:

方法1:用主机别名映射同一服务器(推荐)

这种方法通过修改inventory,给每个用户创建独立的主机别名,所有别名都指向同一个server1,这样Ansible会把它们当作不同的主机条目处理,每个条目用对应的用户执行任务。

修改后的inventory内容如下:

[TEST]
server1_user1 ansible_host=server1 ansible_user=user1
server1_user2 ansible_host=server1 ansible_user=user2
server1_user3 ansible_host=server1 ansible_user=user3
server1_user4 ansible_host=server1 ansible_user=user4

运行playbook时直接指定该inventory即可:

ansible-playbook -i your_inventory_file playbook.yml

这样playbook会针对TEST组里的四个别名主机(实际都是server1)分别执行一遍任务,每个任务对应不同的用户。

方法2:在Playbook中循环用户列表

如果不想修改inventory结构,可以在playbook里定义用户列表,通过循环让任务以每个用户身份执行。

假设你的原inventory保留基础的server1记录即可:

[TEST]
server1

然后编写playbook,用loop遍历用户列表,每次执行任务时切换ansible_user:

- name: 以不同用户身份执行任务
  hosts: server1
  vars:
    target_users:
      - user1
      - user2
      - user3
      - user4
  tasks:
    - name: 示例任务(查看当前用户)
      command: whoami
      become: false
      vars:
        ansible_user: "{{ item }}"
      loop: "{{ target_users }}"
      register: whoami_result
    - name: 打印每个用户的执行结果
      debug:
        msg: "用户 {{ item.item }} 执行结果: {{ item.stdout }}"
      loop: "{{ whoami_result.results }}"

运行这个playbook时,每个任务会循环四次,分别用四个用户身份执行。


内容的提问来源于stack exchange,提问作者Jitu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 10:00:25