You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ansible中set_fact定义的LAPS密码无法用于WinRM连接问题

问题分析与解决

核心问题

你遇到的两个错误根源都是变量引用方式错误:

  • 直接写ansible_password: lapsPass时,Ansible会把字符串lapsPass当作密码发送,而非你通过set_fact定义的变量值,所以服务器拒绝认证。
  • 若写成ansible_password: '{{ lapsPass }}'却提示变量未定义,大概率是语法格式问题(比如引号嵌套错误),而非变量真的不存在。

修正后的Playbook

---
- name: LAPS Test Playbook
  hosts: localhost
  vars:
    host: myserver
    kdc: dc01.domain.com

  tasks:
  - name: Clear existing Kerberos tokens
    command: kdestroy
    ignore_errors: True

  - name: Get password using simple auth over LDAPS
    set_fact:
      lapsPass: "{{ lookup('laps_password', host, domain=kdc, scheme='ldaps', auth='simple', username='user@DOMAIN.COM', password='mypassword') }}"

  - name: Test output
    debug:
      var: lapsPass

  - name: Get disk facts
    community.windows.win_disk_facts:
    delegate_to: myserver
    vars:
      ansible_user: localadmin
      ansible_password: "{{ lapsPass }}"  # 关键修正:正确引用变量
      ansible_port: 5985
      ansible_connection: winrm
      ansible_winrm_transport: basic  # 修正错误参数名:原参数ansible_connection_transport无效
      ansible_winrm_server_cert_validation: ignore
      ansible_winrm_operation_timeout_sec: 600
      ansible_winrm_read_timeout_sec: 660

  - name: Output disk facts
    debug:
      var: ansible_facts.disks[0]

额外注意事项

  1. 参数名修正:原Playbook中的ansible_connection_transport是无效参数,WinRM传输方式的正确参数为ansible_winrm_transport,这个错误也可能导致连接异常。
  2. 特殊字符处理:如果LAPS返回的密码包含特殊字符(如$、!等),无需额外转义,Ansible模板引擎会自动处理,保持{{ lapsPass }}的引用方式即可。
  3. 变量作用域验证:若仍提示变量未定义,可在Get disk facts任务前添加验证步骤,确认变量可正常访问:
    - name: Verify variable accessibility
      debug:
        var: lapsPass
      delegate_to: myserver
    

内容的提问来源于stack exchange,提问作者Lagamorph

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 10:53:24