如何配置Ansible跨多Realm管理Windows系统?krb5.conf配置遇阻
Ansible跨多域(Realm)管理Windows系统配置指南及问题排查
先修正你的krb5.conf语法错误
你提供的krb5.conf存在语法错误:DOMAIN1.COM的配置块未闭合大括号,直接嵌套了DOMAIN2.COM的配置,这会导致Kerberos客户端解析失败,进而触发异常认证请求,大概率是账号锁定的直接原因。修正后的配置如下:
[libdefaults] default_realm = DOMAIN1.COM allow_weak_crypto = true dns_lookup_realm = true dns_lookup_kdc = true forward = true forwardable = true ticket_lifetime = 24h renew_lifetime = 7d dns_lookup_realm = false [realms] DOMAIN1.COM = { kdc = DOMAIN1_DC.DOMAIN1.COM admin_server = DOMAIN1_DC.DOMAIN1.COM default_domain = DOMAIN1.COM kpasswd_server = DOMAIN1_DC.DOMAIN1.COM } # 补上DOMAIN1配置块的闭合大括号 DOMAIN2.COM = { kdc = DOMAIN2_DC.DOMAIN2.COM admin_server = DOMAIN2_DC.DOMAIN2.COM default_domain = DOMAIN2.COM kpasswd_server = DOMAIN2_DC.DOMAIN2.COM } [domain_realm] domain1.com = DOMAIN1.COM .domain1.com = DOMAIN1.COM domain2.com = DOMAIN2.COM .domain2.com = DOMAIN2.COM [logging] default = FILE:/var/log/krb5libs.log kdc = FILE:/var/log/krb5kdc.log admin_server = FILE:/var/log/kadmin.log
注:原配置中KDC地址写为DOMAIN1_DC.COM.COM,修正为DOMAIN1_DC.DOMAIN1.COM,避免DNS解析错误。
Ansible跨多Realm的核心配置要求
Kerberos连通性验证
- 确保Ansible服务器能ping通两个域的DC,且KDC端口(UDP/TCP 88)、LDAP端口(389)、WinRM端口(5985/5986)均开放
- 修正krb5.conf后,用
kinit测试双域账号认证:
能成功获取票据则说明Kerberos配置正常kinit user@DOMAIN1.COM kinit user@DOMAIN2.COM
Ansible Inventory分组配置
不要依赖默认Realm自动适配,给不同域的主机分组并配置专属变量,避免认证混淆:[domain1_win] server1.domain1.com [domain2_win] server2.domain2.com [domain1_win:vars] ansible_connection=winrm ansible_winrm_transport=kerberos ansible_winrm_server_cert_validation=ignore ansible_user=admin@DOMAIN1.COM ansible_kerberos_realm=DOMAIN1.COM [domain2_win:vars] ansible_connection=winrm ansible_winrm_transport=kerberos ansible_winrm_server_cert_validation=ignore ansible_user=admin@DOMAIN2.COM ansible_kerberos_realm=DOMAIN2.COMDomain2 Windows主机WinRM配置补全
除了Enable-PSRemoting,还要确认:- 允许域用户访问WinRM:执行
Set-PSSessionConfiguration -Name Microsoft.PowerShell -ShowSecurityDescriptorUI,给Domain2的用户组添加权限 - WinRM已启用Kerberos认证:执行
winrm get winrm/config/service/auth,确认Kerberos项为true
- 允许域用户访问WinRM:执行
实现Ansible认证失败自动尝试不同域
Ansible无内置多Realm fallback机制,但可通过Playbook的block/rescue结构实现:
- name: 多域认证尝试 hosts: all_win_hosts block: - name: 尝试Domain1账号认证 win_ping: vars: ansible_user: admin@DOMAIN1.COM ansible_kerberos_realm: DOMAIN1.COM rescue: - name: 切换Domain2账号重试 win_ping: vars: ansible_user: admin@DOMAIN2.COM ansible_kerberos_realm: DOMAIN2.COM
注:此方式会增加认证尝试次数,测试时需注意避免触发账号锁定规则。
账号锁定问题排查步骤
- 先在对应域的AD管理工具中解锁被锁定的账号
- 检查krb5.conf语法及KDC地址的DNS解析正确性
- 用
ansible -m win_ping server2.domain2.com -vvv查看详细认证日志,定位失败具体原因 - 避免用同一跨域账号重复尝试认证,不同域的认证请求会被视为独立登录尝试,易触发锁定
内容的提问来源于stack exchange,提问作者redshoot
相关产品推荐
相关产品推荐

