如果从 Ansible 调用,Chocolatey 无法访问 Synology Diskstation 上的 Windows 共享

Chocolatey is unable to access Windows share on a Synology Diskstation if invoked from Ansible

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

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

我现在面临的问题是,如果存储库是 Synology Diskstation 上的 Windows 共享,如果通过 Ansible 远程调用,Chocolatey 将看不到软件包。该命令实际上已成功运行,但 returns 是一个空列表。如果在本地调用相同的命令(choco list),一切都很好。如果存储库位于 OpenMediaVault (OMV) NAS 上托管的共享上,它可以与 Ansible 一起使用,但前提是启用了 Samba 选项允许来宾。我试图在 Synology 上找到类似的设置。我启用了来宾访问,这似乎也有效,因为客户端无需提供 username/password.

即可连接到共享

通过使用 Wireshark,我发现当 运行 本地 choco 列表时,会提供 username/domain(这是预期的)。如果命令是通过 Ansible 远程调用的,则不提供 username/domain(值 NULL)(这不是真正期望的)。这解释了为什么它仅在启用允许来宾访问时才适用于 OMV。

目前我看到两个可能的解决路径:

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

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

    • 这其实是我最不解的地方。来宾访问原则上是有效的,因为我可以连接到允许用户从 Linux 和 Windows 框中访问的共享,而不会提示输入 password/username.
    • 有没有人知道如果远程调用 choco 命令为什么它不起作用以及如何修复它?

我很乐意提供更多信息...

WinRM 会话 运行 作为 "batch" 登录,这意味着凭据缓存未使用您的 username/password 播种,Microsoft 很难做到这一点。我们计划在 Ansible 中添加 Windows become 支持以部分解决该问题(在 运行ning Ansible 模块之前在 WinRM 会话中创建一个新的交互式登录会话,这样事情会更直观).如果 Synology 理解 Kerberos,您可以通过在 pywinrm 上启用 kerberos 委派(在 pywinrm 0.2.0 和 Ansible 2.1+ 的清单中设置 ansible_winrm_kerberos_delegation=true)来实现。否则,你有点过火了 - 一些模块通过添加自己的身份验证解决了这个问题(参见 win_package),但这是不可持续的 - 我们想在 Ansible 范围内解决它,而不是逐个模块.