Windows 上的 Ansible 身份验证

Ansible authentication on Windows

我在 windows 主机上使用 Jenkins 运行 ansible 剧本。我正在尝试在 windows 上的 NAS 共享和本地目录之间执行一个非常简单的命令,例如 robocopy。问题是我一直收到 ACCESS DENIED(5)。这不是真的,因为我 运行ning ansible 所在的用户 (domain\sysansible) 已经拥有全部权限。当我在 windows 或任何机器上启动相同的命令时没有问题。我注意到,当 Jenkins 运行ning ansible 剧本时,它被识别为不是 domain\sysansible 而是本地管理员组 windows_host\administrator 的成员,该组无权共享 NAS (他们不能拥有,因为只有域帐户被批准)。

我的库存文件如下所示:

[application_host]
lizard ansible_host=windows_host.domain.companynet.net ansible_connection=winrm ansible_winrm_transport=kerberos ansible_user=sysansible@company.com ansible_password=***** ansible_port=5986 ansible_winrm_server_cert_validation=ignore

我的ansible任务很简单。当我将源代码交换到本地目录而不是 \nas-share\applications\app-home 时,它会起作用。我也使用了 robocopy 参数的某种变体,但它们也失败了。

- name: Sync the contents of home directory to backup site, including subdirectories
  win_command: robocopy \nas-share\applications\app-home d:\application\backup\home-folder /E /w:5 /r:2 /log:D:\Applications\log.txt /XD \nas-share\applications\app-home\artifacts
    register: info_robocopy
  tags:
    - robo

我的问题是为什么我被识别为本地管理员帐户组?如何在 windows 上被识别为 domain\sysansible

您正在使用基本身份验证,它不允许您将凭据委托给您要将文件复制到的下一个主机。

(参见 https://docs.ansible.com/ansible/latest/user_guide/windows_winrm.html

尝试使用 CredSSP 连接到您的主机或与清单中的以下(示例)变量建立 Kerberos 连接:

ansible_user = user@yourdomain
ansible_password = Passwordthere
ansible_port =5985
ansible_connection = winrm
ansible_winrm_transport = kerberos
ansible_winrm_message_encryption = auto

ansible_winrm_kerberos_delegation = yes