我已经为这个问题苦苦挣扎了一周,阅读了网上关于这个问题的每篇帖子。
我们有什么
- 安装了 Hyper-V 角色的 Windows Server 2016 数据中心(netbios:hv)
- Windows Server 2016 DataCenter 上的虚拟机(netbios:web、fs、dc)
- 安装了 Linux 子系统的 Windows 10 专业笔记本电脑(netbios:asuslin)
- dc.goodpeople.local 上的域以及所有服务器和客户端(包括 hv)都加入了 Active Directory 域
- 在域控制器上安装了 AD CA 和中间颁发 CA
- 所有服务器都已获得具有自动注册策略的证书以进行 Kerberos 身份验证
我想使用装有 kerberos 的 Windows 10 笔记本电脑通过 ansible 配置所有服务器(包括 hv)。目前,我只需要成功对所有服务器执行 win_ping 即可。
配置
- 在所有服务器上配置 winrm:hv、web、fs、dc 和 clinet:asuslin 方式相同:kerberos 身份验证已打开,https 侦听器具有有效证书,防火墙端口 5986 已打开
- 与所有 Windows 2016/win10 一样 - powershell 是最新版本,.NET 至少为 4.5
- 客户端上的 ansible 已根据文档安装在 Linux 子系统上,并安装了所有必要的库,并使用了 asuslin 客户端的有效证书
实际误差
ansible hv -m win_ping -vvvv
ansible 2.5.0
config file = /etc/ansible/ansible.cfg
configured module search path = [u'/home/alexsuslin/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
ansible python module location = /usr/lib/python2.7/dist-packages/ansible
executable location = /usr/bin/ansible
python version = 2.7.12 (default, Dec 4 2017, 14:50:18) [GCC 5.4.0 20160609]
Using /etc/ansible/ansible.cfg as config file
setting up inventory plugins
Parsed /etc/ansible/hosts inventory source with ini plugin
Loading callback plugin minimal of type stdout, v2.0 from /usr/lib/python2.7/dist-packages/ansible/plugins/callback/minimal.pyc
META: ran handlers
Using module file /usr/lib/python2.7/dist-packages/ansible/modules/windows/win_ping.ps1
<hv.goodpeople.local> ESTABLISH WINRM CONNECTION FOR USER: [email protected] on PORT 5986 TO hv.goodpeople.local
checking if winrm_host hv.goodpeople.local is an IPv6 address
calling kinit with subprocess for principal [email protected]
hv.goodpeople.local | UNREACHABLE! => {
"changed": false,
"msg": "kerberos: authGSSClientStep() failed: (('Unspecified GSS failure. Minor code may provide more information', 851968), ('Server not found in Kerberos database', -1765328377))",
"unreachable": true
}
正在发挥作用
- 我成功地用 win_ping 了所有服务器 fs、dc、web 和客户端 asuslin
- 我可以
Enter-PSSession hv.goodpeople.local -UseSSL -Authentication Kerberos
- 由于我可以对其他服务器执行 win_ping 操作,因此我假设我的 krb5.conf 和 ansible inventory 文件配置正确。例如,如果我在组内运行 win_ping,则除 hv.goodpeople.local 之外的所有服务器都可以
我已经检查过
- 使用 kerberos 和 SSL 将 winrm 从 powershell 传输到 hv.goodpeople.local --- 确定
- hv.goodpeople.local 的 SPN 与其他服务器的比较:dc、web、fs --- 几乎相同(实际上,由于 hv 是 hyper-v 角色,因此还有一些额外的角色)
- 我的账户凭证,尝试使用域管理员
- winrm SDDL 在 hv.goodpeople.local 上 --- 看起来没问题
- hv.goodpeople.local 和代表团的 SPN --- 确定
- Linux 子系统和 hv.goodpeople.local 之间的 SSL 证书密码类型不同 --- 确定
- kinit --- 好的,24 小时票始终有效
kvno HTTP/[email protected]
-->HTTP/[email protected]: kvno = 17
- 谷歌上关于该问题的每个页面(包括[serverfault.com])
- dns 正在解析每台机器,包括 hv
- krb5.conf 领域已正确配置大写字母和 FQDN 以及 ansible inventory
最让我困惑的是为什么相同的配置在一台服务器上不起作用,而在另一台服务器上却可以正常工作?我已经使用 powershell 应用了配置以确保一切都相同。如果有人能指出我应该检查哪些内容?
答案1
我做了一件非常愚蠢的事情
在 Windows(主机)计算机上,C:\WINDOWS\System32\Drivers\etc\hosts 文件中有一个条目
192.168.88.20 srv-gp
那是我的 hv 服务器...我已将其删除,一切运行正常...
PS我发现https://github.com/bgamble/pykerberos/blob/master/test.py脚本来测试我的 Kerberos 身份验证和错误
sudo ./test.py -s [email protected] -r GOODPEOPLE.LOCAL -p 5986 gssapi
我发现与 gp-srv 的奇怪连接...立即检查 /etc/host 和 windows hosts 文件并发现问题。