Ansible win_copy无法访问UNC路径文件报错,如何解决?
解决Ansible win_copy从UNC路径复制文件失败的问题
排查与修复步骤
1. 修正YAML路径转义问题
YAML中双引号会解析转义字符,你当前的src路径写法会导致实际传递给Windows的路径缺失反斜杠,这是常见的隐性错误。两种修复方式:
- 使用单引号包裹路径,避免YAML解析转义:
src: '\\someshare.example.com\somefolder\mysql_hg.exe' - 或者在双引号内将反斜杠转义为双反斜杠:
src: "\\\\someshare.example.com\\somefolder\\mysql_hg.exe"
2. 验证AD用户对共享的访问权限
先排除权限或网络层面的问题:
- 在目标VM上,手动执行
runas /user:someaduser@example.com "cmd.exe",在弹出的命令行中运行dir \\someshare.example.com\somefolder,确认能看到mysql_hg.exe文件。 - 如果访问失败,检查AD用户的共享权限、NTFS权限,以及VM与共享服务器之间的网络连通性(比如ping域名、测试SMB端口)。
3. 启用Kerberos委派
如果你的WinRM连接使用Kerberos认证(而非NTLM),必须启用Kerberos委派才能让Ansible在远程主机上用指定AD用户访问网络资源:
- 取消注释
ansible_winrm_kerberos_delegation: true参数:
注:Kerberos委派需要域环境中正确注册WinRM服务的SPN,若未配置需先完成这一步。vars: ansible_winrm_kerberos_delegation: true ansible_become: True ansible_become_method: runas ansible_become_flags: logon_type=new_credentials logon_flags=netcredentials_only ansible_become_user: "someaduser@example.com" ansible_become_password: "adpass of someaduser"
4. 临时替换模块测试
如果上述步骤无效,用win_command直接执行系统复制命令,排查是否是win_copy模块的适配问题:
- name: Copy via command line ansible.windows.win_command: copy "\\someshare.example.com\somefolder\mysql_hg.exe" "C:\Windows\Temp\mysql_hg.exe" vars: ansible_winrm_kerberos_delegation: true ansible_become: True ansible_become_method: runas ansible_become_flags: logon_type=new_credentials logon_flags=netcredentials_only ansible_become_user: "someaduser@example.com" ansible_become_password: "adpass of someaduser"
内容的提问来源于stack exchange,提问作者WindowsGuy
相关产品推荐
相关产品推荐

