【问题标题】:Ansible, windows - how to access network folder?Ansible,windows - 如何访问网络文件夹?
【发布时间】:2017-04-08 17:09:51
【问题描述】:

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

  • 更新数据库(SQL 脚本)

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

为此,我使用了名为 Installer.exe 的特殊自写程序。如果我自己运行它,它会使用我的凭据执行操作。所以它拥有我所有的权利,例如访问网络文件夹和 SQL 数据库。 我想使用 Ansible 作为我的程序 (Installer.exe) 的包装器,而不是代替它。我的目标场景 - Ansible 准备配置文件并在远程 Windows 机器上运行我的安装程序。我遇到了一个问题 - 我由 Ansible 运行的程序没有我的全部权利。它可以成功访问同一台机器上的 SQL Database 1,但无法访问远程机器上的 SQL Database 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:如果我在剧本中添加这样的命令:

...
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.", "", ""]}

【问题讨论】:

  • 有同样的问题。尝试访问网络文件夹时,我被拒绝访问。另外: win_command: whoami 显示了我为 ansible_user 设置的正确域用户,而 win_command: 'net use s: //some.server.name/a_network_folder /user:domain\username password' 给出“成功完成”运行 win_command : net use 将驱动器 s: 显示为“不可用”。你设法解决了这个问题吗?怎么样?

标签: security ansible kerberos delegation winrm


【解决方案1】:

根据您的问题陈述,听起来 Windows 机器正在本地系统帐户下运行 installer.exe,该帐户在 Windows 机器本身之外没有任何权限,并且尝试在 SQL 数据库 2 上运行任何过程总是会失败。这不会是 Kerberos 双跳方案。一方面,运行 installer.exe 和 SQL 数据库 2 的图表中间的 Windows 机器之间只有一跳。由于您的 Ansible 程序将 installer.exe 包装在其中,那么除非我遗漏了什么,否则运行Windows 机器上的 Ansible 程序,具有 AD 域凭据,具有 SQL 数据库 2 的适当权限。

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

【讨论】:

  • 我打算使用域帐户,但不确定我是否正确。我更新了我的问题,你能看到“UPD 1”部分吗?
  • 我已经尝试了所有可能的组合,有/没有 ansible_user/ansible_ssh_pass,但没有运气。再次更新帖子。
  • 似乎 'ansible_ssh_pass' 没有任何效果,因为我使用了 'ansible_winrm_transport: kerberos'。你同意吗?我还注意到,从目标服务器我什至无法访问我自己的共享文件夹:\\qtros\share,但可以访问目标服务器的共享文件夹:\\targetserver\share。我的错误在哪里?我做错了什么?
  • 在您的声明中:“似乎 'ansible_ssh_pass' 没有任何效果,因为我使用了 'ansible_winrm_transport: kerberos'。”我同意。使用 Kerberos,密码不会通过网络传递,也不需要保存在配置文件中。现在,您能否澄清一下这是什么意思:“我还注意到,我什至无法从目标服务器访问我自己的共享文件夹”?
  • 我的意思是从“某台机器”我无法访问 \\qtros\。这是我自己的共享文件夹,我使用我的凭据通过 Ansible 登录到“某些机器”。令人惊讶的是,我无法使用我的凭据访问我自己的机器。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-08-17
  • 1970-01-01
  • 2011-11-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多