收集 winrm 事实时出现 Ansible WinRM 错误:您无法在空值表达式消息上调用方法

收集 winrm 事实时出现 Ansible WinRM 错误:您无法在空值表达式消息上调用方法

我在 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

相关内容