为何Ansible ec2_win_password模块在Windows 2022超时失败,Windows 2019正常?
Ansible ec2_win_password模块在Windows 2022上的超时问题排查
问题背景
相同的Ansible代码在Windows Server 2019上运行正常,但在Windows Server 2022实例上执行时触发致命错误,错误提示为密码等待超时。
执行的Ansible代码
name: Grab the windows password we need from AWS to write to inventory ec2_win_password: aws_access_key: "{{ assumed_role.sts_creds.access_key }}" aws_secret_key: "{{ assumed_role.sts_creds.secret_key }}" security_token: "{{ assumed_role.sts_creds.session_token }}" instance_id: "{{ created_instance.instance_ids.0 }}" key_file: "{{ secret_key }}" region: "{{ target_region }}" wait: yes register: win_password
错误信息
fatal: [localhost]: FAILED! => { "changed": false, "invocation": { "module_args": { "access_key": "A.....", "aws_access_key": "A.....", "aws_ca_bundle": null, "aws_config": null, "aws_secret_key": "VALUE_SPECIFIED_IN_NO_LOG_PARAMETER", "debug_botocore_endpoint_logs": false, "endpoint_url": null, "instance_id": "i-0123456789", "key_data": null, "key_file": "/runner/env/tmpeol1opcf", "key_passphrase": null, "profile": null, "region": "us-east-1", "secret_key": "VALUE_SPECIFIED_IN_NO_LOG_PARAMETER", "security_token": "VALUE_SPECIFIED_IN_NO_LOG_PARAMETER", "session_token": "VALUE_SPECIFIED_IN_NO_LOG_PARAMETER", "validate_certs": true, "wait": true, "wait_timeout": 120 } }, "msg": "wait for password timeout after 120 seconds" }
问题分析与解决方案
ec2_win_password模块本身不存在Windows 2022不兼容的官方说明,超时问题通常由以下原因导致,对应解决方案如下:
- Windows 2022初始化耗时更长:Windows Server 2022镜像的初始化流程(如预装更新、安全策略配置)比2019版本更复杂,默认120秒的
wait_timeout不足以等待密码生成完成。可尝试延长超时时间,例如将参数修改为wait_timeout: 300(5分钟)。 - EC2实例规格或AMI延迟:低配实例(如t2.micro)或部分第三方Windows 2022 AMI可能在首次启动时,密码生成服务启动较慢。可尝试更换更高规格的实例,或使用AWS官方发布的Windows 2022 AMI测试。
- 密钥文件权限问题:确保执行环境中
key_file指向的私钥文件权限为600(Linux系统),避免因权限过高导致无法解密密码。 - AWS权限验证:确认Assumed Role的IAM策略包含
ec2:GetPasswordData动作,虽然2019实例能正常运行,但需排查2022实例所在资源组的权限是否有差异。
验证步骤
- 登录AWS控制台,手动尝试获取该Windows 2022实例的密码,如果控制台也无法解密,说明是实例本身的密码生成问题,与Ansible模块无关。
- 延长
wait_timeout参数后重新执行Playbook,观察是否能成功获取密码。
内容的提问来源于stack exchange,提问作者Brian G
相关产品推荐
相关产品推荐

