Ansible,windows - 如何访问网络文件夹?

时间:2016-11-24 11:51:06

标签: security ansible kerberos delegation winrm

我想使用Ansible自动化我的部署过程。让我说几句话。在我的案例中,部署过程包括两个步骤:

  • 更新数据库(SQL脚本)

  • 将预定义的文件集复制到各种网络文件夹(在不同的计算机上)

为此,我使用名为Installer.exe的特殊自写程序。如果我自己运行它会使用我的凭据执行操作。所以它拥有我的所有权利,例如访问网络文件夹和SQL Databese。 enter image description here 我想使用Ansible作为我的程序(Installer.exe)的包装器,而不是它。我的目标场景 - Ansible准备配置文件并在远程Windows机器上运行我的安装程序。我遇到了一个问题 - 我的Ansible运行程序没有我的全部权利。它可以在同一台计算机上成功访问SQL数据库1,但无法访问远程计算机上的SQL数据库2或访问网络文件夹。我总是被拒绝访问"在网络访问方面,SQL数据库说了一些关于NT AUTHORITY \ ANONYMOUS LOGON的内容。 它看起来像双跳问题,但据我所知它并不完全正确。双跳是关于服务帐户,但我试图用我自己的个人帐户访问远程服务器。

UPD 1 : 我对该组的变量是:

ansible_user: qtros@ABC.RU
ansible_port: 5986
ansible_connection: winrm
ansible_winrm_server_cert_validation: ignore
ansible_winrm_operation_timeout_sec: 120
ansible_winrm_read_timeout_sec: 150
ansible_winrm_transport: kerberos
ansible_winrm_kerberos_delegation: yes

在使用Ansible执行任何操作之前,我运行以下命令:

$> kinit qtros@ABC.RU

并输入我的密码。稍后如果运行klist我可以看到一些有效的票。我打算使用域帐户,但不使用本地系统帐户。我做得对吗?

UPD 2 :如果我在playbook中添加这样的命令:

...
raw: "klist"
...

我得到类似的东西:

fatal: [targetserver.abc.ru]: FAILED! => {"changed": true, "failed": true, "rc": 1, "stderr": "", "stdout": "\r\nCurrent LogonId is 0:0x20265db4\r\nError calling API LsaCallAuthenticationPackage (ShowTickets substatus): 1312\r\n\r\nklist failed with 0xc000005f/-1073741729: A specified logon session does not exist. It may already have been terminated.\r\n\r\n\r\n", "stdout_lines": ["", "Current LogonId is 0:0x20265db4", "Error calling API LsaCallAuthenticationPackage (ShowTickets substatus): 1312", "", "klist failed with 0xc000005f/-1073741729: A specified logon session does not exist. It may already have been terminated.", "", ""]}

1 个答案:

答案 0 :(得分:3)

根据您的问题陈述,听起来Windows机器在本地系统帐户下运行installer.exe,该帐户在Windows机器本身之外没有任何权限,并且总是无法尝试在SQL数据库2上运行任何过程。这不是Kerberos双跳场景。首先,在运行installer.exe和SQL数据库2的图中间的Windows机器之间只有一跳。因为你的Ansible程序正在将installer.exe包装在其中,那么除非我遗漏了什么,否则运行具有AD域凭据的Windows计算机上的Ansible程序具有SQL数据库2的相应权限。

编辑:由于您的问题的焦点是基于解决有关NT AUTHORITY \ ANONYMOUS LOGON的SQL数据库2消息,以及这是否是Kerberos双跃点问题(看起来不像),这就是我的意思回答。请注意,您已定义ansible_user但未定义ansible_ssh_pass。文档中存在明显的错误(http://docs.ansible.com/ansible/intro_windows.html),因此请使用ansible_ssh_pass而不是ansible_ssh_password。