gpt4 book ai didi

python - Ansible 到 Windows 使用 Kerberos 不工作

转载 作者:可可西里 更新时间:2023-11-01 09:28:40 24 4
gpt4 key购买 nike

我正在尝试使用 Ansible 1.9.0.1 通过域用户名配置 Windows 服务器。我已经成功设置了 Linux Ansible 控制盒,并且能够使用基本身份验证来运行 ansible/ansible-playbook plays。但是,与域用户一起运行失败。在 Windows 节点上启用了 Kerberos:

winrm 获取 winrm/config/client/auth
授权
基本=真
摘要 = 真
Kerberos = 真
协商=真
证书 = 真
CredSSP = true

我尝试运行的 playbook 仅引用了 ansible 的 win_ping 模块,以下是输出:

PLAY [Manage SMI] *************************************************************

TASK: [Ping] ******************************************************************
<host1> ESTABLISH WINRM CONNECTION FOR USER: on PORT 5985 TO >host1
<host1> ESTABLISH WINRM CONNECTION FOR USER: on PORT 5985 TO >host2
<host1> REMOTE_MODULE win_ping
<host1> EXEC (New-Item -Type Directory -Path $env:temp -Name >"ansible-tmp-1429639247.03-231225138744234").FullName | Write-Host -Separator >'';
<host2> REMOTE_MODULE win_ping
<host2> EXEC (New-Item -Type Directory -Path $env:temp -Name >"ansible-tmp-1429639247.03-8060403929807").FullName | Write-Host -Separator '';

FATAL: all hosts have already failed -- aborting

PLAY RECAP ********************************************************************
to retry, use: --limit @/home/deck/test.retry

host1 : ok=0 changed=0 unreachable=1 failed=0
host2 : ok=0 changed=0 unreachable=1 failed=0

根据系统事件日志,用户已正确进行身份验证,因此看起来向 tmp 目录的文件传输失败。

非常感谢任何帮助。

最佳答案

一位同事找到了解决此问题的方法。使用 kerberos 时,pywinrm 中似乎存在问题,导致模块在尝试调用 Transport.py 内的 KerbosTicket 时死机。如果您使用以下内容修补 transport.py:

class KerberosTicket:
"""
Implementation based on http://ncoghlan_devs-python-notes.readthedocs.org/en/latest/python_kerberos.html
"""
def __init__(self, service):
# added line below
self.test=1
ignored_code, krb_context = kerberos.authGSSClientInit(service)
kerberos.authGSSClientStep(krb_context, '')
# TODO authGSSClientStep may raise following error:
#GSSError: (('Unspecified GSS failure. Minor code may provide more information', 851968),
# ("Credentials cache file '/tmp/krb5cc_1000' not found", -1765328189))
self._krb_context = krb_context
gss_response = kerberos.authGSSClientResponse(krb_context)
self.auth_header = 'Negotiate {0}'.format(gss_response)

我们不是 100% 确定为什么会这样,但目前这是我们的解决方法。

关于python - Ansible 到 Windows 使用 Kerberos 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29780048/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com