求助:如何通过Ansible批量连接证书过期的Windows服务器并重新部署证书
求助:如何通过Ansible批量连接证书过期的Windows服务器并重新部署证书
兄弟,太懂你这种面对上百台证书过期服务器的崩溃感了!手动一台台操作绝对是噩梦,我来给你捋捋可能的解决办法,毕竟之前也踩过类似的WinRM证书坑。
首先你提到用了validate_certs: false和-k没生效,大概率是参数的配置位置不对,或者漏了其他WinRM相关的必要配置,毕竟Windows的WinRM连接逻辑和Linux的SSH不太一样。
给你几个具体的操作方向:
1. 确保正确配置WinRM绕过证书验证的参数
你得把证书禁用验证的参数放在正确的位置,比如直接在inventory文件里给目标主机组统一配置变量,这样Ansible连接时会自动读取:
[expired_cert_servers] My-Server ansible_host=xx.xxx.xxx.xxx # 这里把所有证书过期的服务器都列进来,或者用通配符批量匹配 [expired_cert_servers:vars] ansible_connection=winrm ansible_winrm_validate_certs=false # 核心:禁用证书验证 ansible_winrm_port=5986 # 如果你用的是WinRM HTTPS端口 ansible_user=你的Windows管理员用户名 ansible_password=你的管理员密码 # 或者用--ask-pass(-k)交互式输入,记得要和验证参数配合
或者在playbook里直接定义这些变量,这样更灵活:
- name: 批量替换Windows过期证书 hosts: expired_cert_servers vars: ansible_connection: winrm ansible_winrm_validate_certs: false ansible_winrm_port: 5986 tasks: # 第一步:把新证书传到目标服务器的临时目录 - name: 复制新证书到服务器 win_copy: src: /本地存放新证书的路径/new_cert.pfx dest: C:\Temp\new_cert.pfx force: yes # 第二步:导入证书到本地计算机的个人存储区 - name: 导入证书到系统存储 win_certificate_store: path: C:\Temp\new_cert.pfx store_location: LocalMachine store_name: My state: present # 如果证书是带密码的PFX文件,加上下面这行 # password: "{{ your_cert_password }}" # 第三步:重启WinRM服务让新证书生效 - name: 重启WinRM服务 win_service: name: WinRM state: restarted
2. 排查为什么之前的参数没生效
你说validate_certs: false没用,可能是这几个原因:
- 参数位置错了:比如放在了task里而不是全局vars或inventory里,Ansible连接阶段就会验证证书,task里的参数根本没机会生效
- 连错了端口:如果环境禁用了WinRM HTTPS但你还在连5986,可以试试切换到HTTP的5985端口(如果环境允许),同时把
ansible_winrm_port改成5985 - Ansible版本太老:比如2.9及以前的版本,
ansible_winrm_validate_certs参数的逻辑可能有问题,建议升级到2.10+的版本再试试
3. 备选方案:用SMB/PSEXEC绕过WinRM的证书验证
如果WinRM的HTTPS端口死活连不上,还可以试试用SMB协议连接,配合psexec模块操作(前提是目标服务器的SMB服务还能正常访问):
- name: 用SMB批量部署证书 hosts: expired_cert_servers vars: ansible_connection: smb ansible_smb_validate_certs: false tasks: - name: 复制证书到服务器临时目录 win_copy: src: /本地证书路径/new_cert.pfx dest: C:\Temp\new_cert.pfx - name: 用psexec执行证书导入命令 win_psexec: command: certutil -importpfx -p {{ your_cert_password }} C:\Temp\new_cert.pfx
最后提醒一句:操作前一定要找一台测试机先验证流程,确保没问题再批量执行,避免搞砸所有机器!
备注:内容来源于stack exchange,提问作者Dan
相关产品推荐
相关产品推荐

