【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服务器。

相关推荐
YCOSA20252 小时前
雨晨 Windows 10 企业版 LTSC x64 中度精简 1809 迎双节 17763.9257 特别版
windows
sukalot2 小时前
windows 驱动实例分析系列: HidHide 驱动分析 - drivers 篇(四)
windows·驱动开发
ι:7 小时前
NUC12 Pro 安装 Ubuntu 24.04 LTS 详细教程
linux·windows·ubuntu·nuc
YCOSA20258 小时前
微软宣布将于10月7日举行Windows与Surface发布会,聚焦“Windows、NVIDIA RTX Spark、Surface,以及更广泛PC生态”
windows
Source.Liu8 小时前
【A11】 labelprinter(Tauri 版)新建步骤
windows·rust
Punchline2789 小时前
解决 Windows 环境变量 Path 设置时提示“字符太长”的完整指南
windows·环境变量·path
chushiyunen10 小时前
claude code笔记(二)、claude桌面端(内网不好用)
windows
d_benhua10 小时前
以太网测试步骤
windows
冯一川11 小时前
DeepSeek在Windows系统上部署
windows·python
解道Jdon12 小时前
JDK 27发布:紧凑对象头、G1默认、量子安全TLS
ide·windows·git·svn·eclipse·github·visual studio