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

标签 powershell ansible powershell-remoting chocolatey synology

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

背景: 我通过 Chocolatey 管理安装在 Windows 10 客户端上的软件,而该软件又由 Ansible 远程调用。 Chocolatey 包的存储库驻留在 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 接受来自远程执行脚本的无用户名登录

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

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

最佳答案

WinRM session 作为“批量”登录运行,这意味着凭据缓存不会使用您的用户名/密码进行播种,而 Microsoft 很难做到这一点。我们计划在 Ansible 中添加 Windows become 支持,以部分解决该问题(在运行 Ansible 模块之前在 WinRM session 中创建一个新的交互式登录 session ,以便操作更加直观)。如果 Synology 支持 Kerberos,您可以通过在 pywinrm 上启用 kerberos 委派(在 pywinrm 0.2.0 和 Ansible 2.1+ 上的 list 中设置 ansible_winrm_kerberos_delegation=true)来实现此目的。否则,你就有点不知所措了——一些模块已经通过添加自己的身份验证解决了这个问题(参见 win_package),但这是不可持续的——我们希望在 Ansible 范围内解决这个问题,而不是模块——按模块。

关于powershell - 如果从 Ansible 调用,Chocolatey 无法访问 Synology Diskstation 上的 Windows 共享,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39276196/

相关文章:

regex - 使用 Ansible 从页面中提取过滤后的链接

git - 仅当从 git 存储库中提取更改时才运行构建任务

function - 将字符串传入和传出函数

powershell - 为什么在 Powershell switch 语句中对变量进行奇怪的赋值?

powershell - 如何使用 Powershell 获取本地 NT 服务 SID?

ansible - 在 Ansible 中将 roles/rolename/tasks/main.yml 重命名为 rolename.yml

powershell - 如何调用表达式来调用带有变量的函数或脚本?

powershell - 带有脚本 block 的 Invoke-Command 在没有错误的远程机器上不起作用

powershell - 使用 Invoke-Command 格式化输出

azure - 如何在特定资源组上添加标签?