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

能否简化Ansible microsoft.ad模块配置,无需指定domain_username和domain_password?

解决Microsoft.AD模块自动复用Ansible连接凭据的方案

核心思路

既然无法使用委托或CredSSP,也不能在域控制器上执行Playbook,我们可以通过模块默认参数绑定的方式,让microsoft.ad.group和microsoft.ad.ou自动复用Ansible连接目标主机时使用的ansible_user和ansible_password,无需手动重复指定凭据参数。

方法1:在Playbook内设置模块默认值

直接在Playbook开头定义模块的默认参数,将连接凭据映射到模块的域凭据参数上:

- name: 管理AD组与OU
  hosts: 非域控制器主机组
  # 根据环境配置WinRM传输方式,示例为Kerberos
  vars:
    ansible_winrm_transport: kerberos
  # 绑定模块默认参数,自动复用连接凭据
  module_defaults:
    microsoft.ad.group:
      domain_username: "{{ ansible_user }}"
      domain_password: "{{ ansible_password }}"
    microsoft.ad.ou:
      domain_username: "{{ ansible_user }}"
      domain_password: "{{ ansible_password }}"
  tasks:
    - name: 创建测试AD组
      microsoft.ad.group:
        name: Test_Engineering_Group
        state: present
        description: 测试工程组
        # 无需手动指定domain_username和domain_password

    - name: 创建测试OU
      microsoft.ad.ou:
        name: Test_OU
        path: "DC=corp,DC=com"
        state: present
        # 同样无需重复指定凭据参数

方法2:全局配置(所有Playbook生效)

如果所有涉及AD模块的Playbook都需要复用连接凭据,可以在ansible.cfg中配置全局模块默认值:

打开ansible.cfg,在[defaults]段添加以下内容:

module_defaults =
  microsoft.ad.group:
    domain_username = {{ ansible_user }}
    domain_password = {{ ansible_password }}
  microsoft.ad.ou:
    domain_username = {{ ansible_user }}
    domain_password = {{ ansible_password }}

关键注意事项

  • 凭据格式要求:ansible_user必须是有效的域账号格式,比如CORP\john_doe或john_doe@corp.com,且该账号拥有管理AD组/OU的权限。
  • 密码安全:ansible_password建议用Ansible Vault加密存储,避免明文泄露,示例命令:
    ansible-vault encrypt_string 'your_domain_password' --name 'ansible_password'
    
  • 目标主机要求:执行Playbook的非DC主机必须能正常解析域控制器的DNS,且网络上可访问AD的LDAP(389)或LDAPS(636)端口。
  • 传输方式验证:确保WinRM连接使用的传输方式(如Kerberos)能正常验证ansible_user的域身份,避免认证失败。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 23:21:20