如果从Ansible

时间:2016-09-01 16:03:00

标签: powershell ansible powershell-remoting chocolatey synology

这个问题令我很困惑,我很难制定正确的问题。所以低于我的最大努力。如果你能帮我改进这个问题,我很高兴。

背景: 我通过Chocolatey管理安装在Windows 10客户端上的软件,而后者又由Ansible远程调用。 Chocolatey Packages的存储库驻留在NAS上的Windows共享上。我首先遇到了第二跳问题,这个问题通过使用kerberos门票成功解决(见https://github.com/ansible/ansible/issues/15682)。客户和Synology加入AD域。

我现在面临的问题是,如果存储库是Synology Diskstation上的Windows共享,如果通过Ansible远程调用,Chocolatey不会看到包。该命令实际上成功运行但返回一个空列表。如果在本地调用相同的命令(choco list),一切都很好。如果存储库位于OpenMediaVault(OMV)NAS上托管的共享上,则它与Ansible一起使用,但前提是Samba选项允许guest虚拟机启用。我试图在Synology上找到类似的设置。我启用了访客访问,这似乎也起作用,因为客户端可以连接到共享而无需提供用户名/密码。

通过使用Wireshark我发现当在本地运行choco list时,提供了用户名/域(这是预期的)。如果通过Ansible远程调用该命令,则不提供用户名/域(值为NULL)(这不是真正期望的)。这解释了为什么只有在启用了访客访问权限的情况下才能在OMV上运行。

目前我看到两种可能的解决方案路径:

  1. 获取远程执行的choco命令,以便在访问共享时发送用户凭据(首选解决方案更安全)

    • 如何配置远程执行的PowerShell脚本(例如Chocolatey使用),以便在连接到共享时使用实际执行脚本的用户的用户/域名?
  2. 让Synology Diskstation接受远程执行脚本中没有用户名的登录

    • 这实际上让我很困惑。访客访问原则上是可行的,因为我可以连接到允许用户访客从Linux和Windows框中的共享,而不会被提示输入密码/用户名。
    • 如果远程调用choco命令以及如何修复它,有没有人知道为什么它不起作用?
  3. 我很乐意提供更多信息......

1 个答案:

答案 0 :(得分:2)

WinRM会话作为“批处理”登录运行,这意味着凭据缓存不会使用您的用户名/密码进行播种,而且Microsoft很难这样做。我们计划在Ansible中添加Windows become支持以部分解决该问题(在运行Ansible模块之前在WinRM会话中创建一个新的交互式登录会话,这样事情会更直观)。如果Synology了解Kerberos,您可以通过在pywinrm上启用kerberos授权(在pywinrm 0.2.0和Ansible 2.1+上的库存中设置ansible_winrm_kerberos_delegation=true)来实现目标。否则,你就像小溪一样 - 有些模块通过添加自己的身份验证(参见win_package)来解决这个问题,但这是不可持续的 - 我们想要解决它整个问题,而不是模块逐个模块