【发布时间】: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