我在 vCenter 服务器中有一个实验室,该实验室包括 5 台 Windows 服务器和 3 台 Windows 10。每次我针对此实验室运行剧本(任何剧本)时,任务 [收集事实] 中都会出现 1 个错误:
[WARNING]: Error when collecting winrm facts: You cannot call a method on a null-valued expression. At line:15 char:17 + ...
$ansibleFacts.ansible_win_rm_certificate_expires = $_.Not ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo :
InvalidOperation: (:) [], RuntimeException + FullyQualifiedErrorId : InvokeMethodOnNull at <ScriptBlock>, <No file>: line 15 at <ScriptBlock>, <No file>: line
13
我的 all.yml 文件包含 winrm 详细信息
---
# WinRM Protocol Details
ansible_user: DOMAIN\hiddai
ansible_password: F01o3O4
ansible_connection: winrm
ansible_port: 5985
ansible_winrm_scheme: http
ansible_winrm_server_cert_validation: ignore
ansible_winrm_kerberos_delegation: false
ansible_winrm_transport: ntlm
ansible_winrm_read_timeout_sec: 70
ansible_winrm_operation_timeout_sec: 60
域中启用了以下策略:
Windows 组件/Windows 远程管理 (WinRM)/WinRM 客户端
- 允许基本身份验证
- 允许 CredSSP 身份验证
- 允许未解密的流量
- 受信任的主机
Windows 组件/Windows 远程管理 (WinRM)/WinRM 服务
- 允许通过 WinRM 进行远程服务器管理
- 允许 CredSSP 身份验证
- 允许基本身份验证
- 允许未加密的流量
- 开启兼容性 HTTP 侦听器
- 开启兼容性 HTTPS 侦听器
我该如何解决这些错误?
答案1
第一个错误:您是否有配置了证书的 winrm https(tcp 端口 5986)侦听器?我猜是它无法调用该方法,因为它找不到任何证书。
第二个错误:尝试双跳到 UNC 路径时,您似乎遇到了拒绝访问错误。要么 1) 不要这样做,要么 2) 如果需要,您需要配置凭据委派(每个任务、每个播放或在连接中)。您可以委派 CredSSP 或 Kerberos 凭据(从表面上看,如果使用 Kerberos,您肯定需要更多 Python 模块。
在这里阅读有关 ansible、windows 和 kerberos 的信息:https://docs.ansible.com/ansible/latest/user_guide/windows_winrm.html