Ansible Kerberos认证报错求助及无域Linux节点配置指导
问题解答
1. Ansible中Kerberos认证的配置步骤
(1)Linux节点Kerberos客户端配置
确保/etc/krb5.conf配置正确,核心参数示例如下:
[libdefaults] default_realm = YOUR_DOMAIN.COM # 替换为你的AD域名称(需大写) dns_lookup_kdc = true dns_lookup_realm = true [realms] YOUR_DOMAIN.COM = { kdc = dc.your_domain.com # 替换为域控制器的地址 admin_server = dc.your_domain.com } [domain_realm] .your_domain.com = YOUR_DOMAIN.COM your_domain.com = YOUR_DOMAIN.COM
配置完成后,执行kinit domain_user@YOUR_DOMAIN.COM获取Kerberos票据,再用klist命令验证票据是否成功生成。
(2)Ansible inventory/playbook配置
在Ansible主机清单(如hosts文件)中配置Windows节点的WinRM参数:
[windows] win-host.your_domain.com [windows:vars] ansible_connection=winrm ansible_winrm_transport=kerberos ansible_winrm_server_cert_validation=ignore ansible_user=domain_user@YOUR_DOMAIN.COM # 注:Kerberos认证优先使用kinit获取的票据,无需明文密码;若要自动获取票据,可添加ansible_password,但不推荐明文存储
或在playbook中直接指定变量:
- name: 管理Windows节点 hosts: windows vars: ansible_connection: winrm ansible_winrm_transport: kerberos ansible_winrm_server_cert_validation: ignore ansible_user: "domain_user@YOUR_DOMAIN.COM" tasks: - name: 连通性测试 win_ping:
(3)Windows节点WinRM认证检查
确保Windows节点WinRM已启用Kerberos认证:
# 查看当前WinRM认证方式 Get-WSManInstance -ResourceURI winrm/config/service/auth -Enumerate
若Kerberos值为false,执行以下命令启用:
Set-Item -Path WSMan:\localhost\Service\Auth\Kerberos -Value $true
2. Kerberos对虚拟机域加入的要求
- Windows受控节点必须加入域:Kerberos认证依赖Active Directory(AD)作为密钥分发中心(KDC),Windows节点加入域后才能纳入Kerberos信任体系,获取KDC颁发的认证票据。
- Linux Ansible运行节点无需加入域:但必须保证与AD域控制器网络连通,且Kerberos客户端配置正确,能正常向KDC请求并获取有效票据。
3. 使用本地用户名密码登录的方案
Kerberos认证不支持本地账号,因为其依赖域KDC的信任体系,本地账号无对应域票据。这种场景下,应改用NTLM或Basic认证:
(1)Windows节点启用对应认证方式
# 启用NTLM认证(推荐,安全性优于Basic) Set-Item -Path WSMan:\localhost\Service\Auth\NTLM -Value $true # 若使用Basic认证(明文传输,需配合HTTPS,不推荐) Set-Item -Path WSMan:\localhost\Service\Auth\Basic -Value $true
(2)Ansible配置调整
在主机清单或playbook中修改认证参数:
[windows:vars] ansible_connection=winrm ansible_winrm_transport=ntlm ansible_winrm_server_cert_validation=ignore ansible_user=.\local_username # 本地账号格式:.\用户名 或 机器名\用户名 ansible_password=local_user_password
或playbook示例:
- name: 用本地账号管理Windows节点 hosts: windows vars: ansible_connection: winrm ansible_winrm_transport: ntlm ansible_winrm_server_cert_validation: ignore ansible_user: ".\local_admin" ansible_password: "local_pass123" tasks: - win_ping:
内容的提问来源于stack exchange,提问作者subbareddy
相关产品推荐
相关产品推荐

