在具有域用户的Windows上使用Ansible

时间:2017-01-29 15:24:30

标签: authentication ssl ldap ansible kerberos

我开始学习Ansible,但文档不太有用。

我已在RHEL上安装了控制台并创建了必要的主机文件和 windows.yml

但是当尝试连接到远程Windows服务器以获得回拨时,我收到以下错误:

[root@myd666 ansible_test]# ansible windows -i hosts -m win_ping
hostname | UNREACHABLE! => {
    "changed": false,
    "msg": "ssl: the specified credentials were rejected by the server",
    "unreachable": true
}

Installing python-kerberos dependencies后,

我现在收到此错误:

hostname | UNREACHABLE! => {
    "changed": false,
    "msg": "Kerberos auth failure: kinit: KDC reply did not match expectations while getting initial credentials",
    "unreachable": true
}

我的 windows.yml 文件包含:

# it is suggested that these be encrypted with ansible-vault:
# ansible-vault edit group_vars/windows.yml
ansible_ssh_user: user@MYDOMAIN.NET
ansible_ssh_pass: password
ansible_ssh_port: 5986
ansible_connection: winrm
ansible_winrm_server_cert_validation: ignore

我是否对域\用户的语法有任何错误?也许我忘了在Windows机器上安装一些东西?我只运行了 ConfigureRemotingForAnsible.ps1 脚本,并且没有安装Python。

这是我的 krb5.conf 文件:

[libdefaults]
default_realm = MYDOMAIN.NET
#dns_lookup_realm = true
#dns_lookup_kdc = true

[realms]
MYDOMAIN.NET = {
kdc = dc1.mydomain.net
default_domain = hpeswlab.net
}

[domain_realm]
.mydomain.net = MYDOMAIN.NET
 mydomain.net = MYDOMAIN.NET

我确实使用Kinit获得了一个令牌:

kinit -C user@MYDOMAIN.NET

klist

Klist输出:

Valid starting       Expires              Service principal
01/31/2017 11:25:33  01/31/2017 21:25:33  krbtgt/MYDOMAIN.NET@MYDOMAIN.NET
        renew until 02/01/2017 11:25:29

1 个答案:

答案 0 :(得分:9)

windows.yml 中,请仔细检查并确保ansible_ssh_user: user@MYDOMAIN.NET行确实具有大写字母MYDOMAIN.NET。在某个地方,对KDC的领域请求是以小写而不是大写发送的,导致'KDC回复与期望值不匹配'错误。

krb5.conf 中,区分大小写也很重要。首先我要注意,由于KDC名称是IP主机的名称,因此需要将其指定为完全限定的主机名,如下例所示。假设您的KDC名为“dc1.mydomain.net”。接下来,域名应仅在 lower 的情况下。另一方面,Kerberos Realm名称需要在 upper 的情况下 - 如果在此文件中以小写错误地指定了域名,这是您可能收到此错误消息的另一个原因。请将整个krb5.conf修改为如下所示(仅将“dc1”更改为实际名称),它应该可以正常工作。附注:你的krb5.conf中不一定需要两行dns_lookup_,所以请按照下面的说法对它们进行评论。这些只是MIT Kerberos Documentation的后备机制,实际上可能会在您的简单用例中引起问题。修改任一配置文件后,请确保在再次测试之前重新启动Ansible引擎。

[libdefaults]
default_realm = MYDOMAIN.NET
#dns_lookup_realm = true
#dns_lookup_kdc = true

[realms]
MYDOMAIN.NET = {
kdc = dc1.mydomain.net
default_domain = mydomain.net
        }

[domain_realm]
.mydomain.net = MYDOMAIN.NET 
mydomain.net = MYDOMAIN.NET

请参阅此麻省理工学院的参考资料,了解如何正确设置krb5.conf:Sample krb5.conf File

主机文件中,检查以确保您的IP名称映射是正确的。根据RFC,Kerberos需要一个正常运行的DNS,如果您的Hosts文件中有过时的条目,您就有可能会缩短它。

最后,虽然我无法分辨你正在使用哪个版本的Ansible,但我做了一些研究,发现“Ansible 2.0已经弃用了来自ansible_ssh_user,ansible_ssh_host和ansible_ssh_port的”ssh“成为ansible_user,ansible_host,和ansible_port。“这肯定是问题的一部分。请参阅:Ansible on Windows Documentation