【Ansible】基于windows主机,采用NTLM+HTTPS 认证部署

我们现在准备Linux centos7(Ansible控制机)和Windows(客户机)环境下的详细部署步骤:

一、Windows客户机配置

1. 准备SSL证书

1.1 生成自签名证书(测试用)

以管理员身份打开PowerShell:

powershell 复制代码
# 创建自签名证书
$cert = New-SelfSignedCertificate -DnsName $env:COMPUTERNAME -CertStoreLocation Cert:\LocalMachine\My

# 查看证书指纹(记录下来,后面要用)
$cert.Thumbprint
1.2 导出证书(供Ansible控制机验证)
powershell 复制代码
# 导出证书(不导出私钥)
Export-Certificate -Cert $cert -FilePath C:\winrm-cert.cer

# 将证书复制到Ansible控制机(根据实际IP修改)
scp C:\winrm-cert.cer root@<ansible控制机IP>:/etc/ansible/certs/

2. 配置WinRM HTTPS监听器

继续在PowerShell中执行:

powershell 复制代码
# 创建HTTPS监听器(使用刚才生成的证书)
winrm create winrm/config/listener?Address=*+Transport=HTTPS "@{Hostname=`"$env:COMPUTERNAME`"; CertificateThumbprint=`"$($cert.Thumbprint)`"}"

# 启用NTLM认证
winrm set winrm/config/service/auth '@{NTLM="true"}'
winrm set winrm/config/service/auth '@{Negotiate="true"}'

# 禁用非加密通信
winrm set winrm/config/service '@{AllowUnencrypted="false"}'

# 配置服务允许远程管理
winrm set winrm/config/service '@{MaxConcurrentOperationsPerUser="100"}'

# 重启WinRM服务
Restart-Service WinRM

3. 配置防火墙

powershell 复制代码
# 允许5986端口(HTTPS WinRM)
New-NetFirewallRule -DisplayName "WinRM HTTPS" -Name "WinRM-HTTPS" -Protocol TCP -LocalPort 5986 -Action Allow

二、Linux Ansible控制机配置

1. 安装必要组件

bash 复制代码
# 安装pywinrm(Ansible WinRM连接插件)
pip install pywinrm

# 安装OpenSSL(用于证书验证)
sudo apt-get install openssl -y

2. 配置证书信任

bash 复制代码
# 创建证书目录(前面windows主机,如果拷贝到不是/etc/ansible/certs目录的话)
sudo mkdir -p /etc/ansible/certs

# 将Windows证书复制到信任存储(假设证书已通过scp传到控制机)
sudo cp /tmp/winrm-cert.cer /etc/ansible/certs/

# 用于在指定目录中创建或更新证书文件的哈希符号链接
sudo cacertdir_rehash /etc/ansible/certs/

3. 创建Ansible Inventory文件

创建 /etc/ansible/hosts 文件(注意:该目录的路径,一定需要和ansible.cfg中配置的一致,方可生效),内容如下:

ini 复制代码
[windows]
win-server ansible_host=<Windows服务器IP>

[windows:vars]
ansible_user=Administrator
ansible_password=您的Windows管理员密码  # 建议使用ansible-vault加密
ansible_connection=winrm
ansible_winrm_transport=ntlm
ansible_winrm_server_cert_validation=validate  # 生产环境建议启用验证
ansible_winrm_ca_trust_path=/etc/ansible/certs/
ansible_winrm_port=5986

注意!注意!注意!

该hosts文件或者inventory.ini文件中,不允许出现 注释信息。不然,依然会报错!

4. 加密密码(可选但推荐)

bash 复制代码
# 创建加密密码
ansible-vault encrypt_string '您的明文密码' --name 'ansible_password'

# 然后将输出结果替换inventory文件中的ansible_password值

三、连接测试

1. 基本连接测试

bash 复制代码
ansible windows -m win_ping -vvv

2. 验证加密连接

bash 复制代码
# 查看实际连接是否使用HTTPS
ansible windows -m raw -a "netsh advfirewall firewall show rule name=WinRM-HTTPS"

四、排错指南

如果咱们测试连接失败,请检查以下内容:

Windows端检查:

powershell 复制代码
# 检查WinRM服务状态
Get-Service WinRM

# 检查监听器
winrm enumerate winrm/config/listener

# 查看安全日志(认证问题)
Get-EventLog -LogName Security -Newest 20 | Where-Object {$_.EventID -eq 4625}

Linux端检查:

bash 复制代码
# 测试端口连通性
telnet <WindowsIP> 5986

# 手动测试WinRM连接
curl -vk --ntlm -u "Administrator:密码" https://<WindowsIP>:5986/wsman

五、最终验证Playbook

创建一个文件 test_connection.yml

yaml 复制代码
---
- name: 测试Windows安全连接
  hosts: windows
  gather_facts: no

  tasks:
    - name: 执行whoami命令验证身份
      ansible.windows.win_command: whoami
      register: result

    - name: 显示结果
      debug:
        var: result.stdout

运行测试:

bash 复制代码
ansible-playbook test_connection.yml

六、生产环境建议

  1. 证书:替换自签名证书为CA签发的正式证书
  2. 认证:考虑使用域账户代替本地管理员账户
  3. 加固:配置WinRM的IP限制和访问控制列表
  4. 监控:设置WinRM服务的日志监控

以上步骤完成后,我们的Ansible控制机,将通过加密的HTTPS通道,使用NTLM认证安全地管理Windows服务器。

相关推荐
Lucky高1 小时前
HTTP和HTTPS复习
网络协议·http·https
吳所畏惧2 小时前
NVM踩坑实录:配置了npm的阿里云cdn之后,下载nodejs老版本(如:12.18.4)时,报404异常,下载失败的问题解决
前端·windows·阿里云·npm·node.js·batch命令
leese2332 小时前
FreeMarker模板引擎
windows
love530love2 小时前
命令行创建 UV 环境及本地化实战演示—— 基于《Python 多版本与开发环境治理架构设计》的最佳实践
开发语言·人工智能·windows·python·conda·uv
呉師傅3 小时前
佳能iR-ADV C5560复印机如何扫描文件到电脑
运维·网络·windows·计算机外设·电脑
程序视点3 小时前
【最新专业评测】PDF Reducer专业版:85%超高压缩率的PDF压缩神器|Windows最佳PDF压缩工具推荐
windows
IT成长日记6 小时前
【自动化运维神器Ansible】Ansible常用模块之File模块详解
运维·自动化·ansible·file·常用模块
qyhua6 小时前
Windows 平台源码部署 Dify教程(不依赖 Docker)
人工智能·windows·python
女程序猿!!!8 小时前
网址收集总结
windows
love530love10 小时前
Windows 如何更改 ModelScope 的模型下载缓存位置?
运维·人工智能·windows·python·缓存·modelscope