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

Powershell 如果从Ansible调用,Chocolate无法访问Synology Diskstation上的Windows共享,powershell,ansible,powershell-remoting,chocolatey,synology,Powershell,Ansible,Powershell Remoting,Chocolatey,Synology,这个问题让我很困惑,我很难提出正确的问题。所以在我的努力之下。如果你能帮我改进这个问题,我很高兴 背景: 我通过Chocolate管理安装在Windows 10客户端上的软件,Ansible会远程调用Chocolate。巧克力包的存储库位于NAS上的Windows共享上。我首先遇到了第二跳问题,该问题通过使用kerberos票证成功解决(请参阅)。客户端和Synology连接到一个AD域 我现在面临的问题是,如果存储库是Synology Diskstation上的Windows共享,那么如果通过

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

背景: 我通过Chocolate管理安装在Windows 10客户端上的软件,Ansible会远程调用Chocolate。巧克力包的存储库位于NAS上的Windows共享上。我首先遇到了第二跳问题,该问题通过使用kerberos票证成功解决(请参阅)。客户端和Synology连接到一个AD域

我现在面临的问题是,如果存储库是Synology Diskstation上的Windows共享,那么如果通过Ansible远程调用,Chocolate就看不到包。该命令实际上已成功运行,但返回一个空列表。如果在本地调用相同的命令(choco list),则一切正常。如果存储库位于OpenMediaVault(OMV)NAS上托管的共享上,则它可以与Ansible一起工作,但前提是启用了Samba选项allow guest。我试着在大纲上找到类似的设置。我启用了Guest访问,这似乎也可以作为客户端连接到共享而不提供用户名/密码

通过使用Wireshark,我发现在本地运行choco list时,会提供用户名/域(这是预期的)。如果通过Ansible远程调用该命令,则不提供用户名/域(值为NULL)(这实际上不是预期的)。这解释了为什么只有启用了允许来宾访问时,它才能在OMV上工作

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

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

    • 如何配置远程执行的PowerShell脚本(如Chocolate uses),以便在连接到共享时使用实际执行脚本的用户的user-/domainname
  • 让Synology Diskstation也从远程执行的脚本接受不带用户名的登录

    • 这其实是我最困惑的。Guest访问原则上是有效的,因为我可以连接到允许用户Guest从Linux和Windows框访问的共享,而无需提示输入密码/用户名
    • 有人知道如果远程调用choco命令,它为什么不工作,以及如何修复它吗

  • 我很乐意提供更多信息…

    WinRM会话以“批量”登录方式运行,这意味着凭据缓存中没有添加您的用户名/密码,而且Microsoft很难做到这一点。我们计划在Ansible中添加Windows
    Been
    支持,以部分解决该问题(在运行Ansible模块之前在WinRM会话中创建一个新的交互式登录会话,以便更直观地进行操作)。如果Synology理解Kerberos,那么您可以通过在pywinrm上启用Kerberos委派(在pywinrm 0.2.0和ansible 2.1+上的清单中设置
    ansible\u winrm\u Kerberos\u delegation=true
    )来实现。否则,您就有点为难了-一些模块通过添加自己的身份验证解决了这个问题(请参见
    win\u package
    ),但这是不可持续的-我们希望在整个范围内解决这个问题,而不是逐个模块。

    嗨,Matt,非常感谢您的快速响应!它确实有效!我们非常期待在Ansible中获得更好的WinRM支持!你干得真好!