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

标签 authentication ansible active-directory ldap kerberos

我开始学习 Ansible,但文档不是很有帮助。

我已经在 RHEL 上安装了控制机器,并创建了必要的 hosts 文件和 windows.yml

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

[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

我在 Domain\user 的语法上做错了吗?也许我忘了在 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 获得了一个 token :

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

最佳答案

windows.yml 中,请仔细检查并确保 ansible_ssh_user: user@MYDOMAIN.NET 行确实具有大写的领域 MYDOMAIN.NET。在某处,KDC 的领域请求以小写字母而不是大写字母发送,导致“KDC 回复与预期不符..”错误。

krb5.conf中,区分大小写也很重要。首先我会注意到,由于 KDC 名称是 IP 主机的名称,因此需要将其指定为完全限定的主机名,如下例所示。它假定您的 KDC 名为“dc1.mydomain.net”。接下来,域名只能是小写。另一方面,Kerberos 领域名称需要使用大写 - 如果在此文件中错误地以小写形式指定了领域名称,这是您可能会收到此错误消息的另一个原因。请将您的整个 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,请参阅此 MIT 引用资料:Sample krb5.conf File

Hosts 文件中,检查以确保您的 IP 到名称的映射是正确的。根据 RFC,Kerberos 需要一个正常运行的 DNS,如果您的 Hosts 文件中有过时的条目,您将面临更改该 DNS 的风险。

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

关于authentication - 在具有域用户的 Windows 上使用 Ansible,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41922521/

相关文章:

objective-c - 使用 Storyboard 从任何 View 执行到初始 View 的转换

ansible - 获取 csv 列表并使用序列对其进行迭代

azure - 如何获取 Azure AD 经过身份验证的用户的用户名和电子邮件

c++ - 如何判断ADsOpenObject绑定(bind)的DC?

powershell - 导入 CSV 和 Foreach 以使用 Get-ADUser

asp.net - 通过 ADFS 和 WIF 进行 WS-Federation 的身份验证生命周期

python - 登录凭据不适用于 Gmail SMTP

ansible - 我怎么知道我的 ansible 使用的是哪个版本的 Jinja2?

api - Spotify API 非法的redirect_uri

linux - 我如何在linux中使用ansible安装模块