使用 Ansible 管理 Windows

2018-05-21 15:13:09 +08:00
 wsgzao

前言

本文主要介绍在如何使用 Ansible 管理 Windows 客户端,Ansible 官方提供了一个很方便的安装脚本,对于外网用户来说安装真的很轻松,可惜我遇到的问题是如何在内网部署,有相同烦恼的小伙伴不妨参考下

轻轻松松使用 Ansible 管理 Windows 客户端

更新历史

2018 年 05 月 21 日 - 初稿

阅读原文 - https://wsgzao.github.io/post/ansible-windows/

扩展阅读

Ansible Windows Guides - http://docs.ansible.com/ansible/latest/user_guide/windows.html


Ansible Windows Support

Ansible 在 2.3 版本之前对于 Windows 支持的并不算很友好,从 2.4 版本开始已经可以使用原生模块实现很多需求

Because Windows is a non-POSIX-compliant operating system, there are differences between how Ansible interacts with them and the way Windows works. These guides will highlight some of the differences between Linux/Unix hosts and hosts running Windows.

Ansible does not support managing Windows XP or Server 2003 hosts. The supported operating system versions are:

Windows Server 2008 Windows Server 2008 R2 Windows Server 2012 Windows Server 2012 R2 Windows Server 2016 Windows 7 Windows 8.1 Windows 10

  1. 在官方文档中已经提到了在 Windows 中使用 Ansible 的最要前提,WinRM
  2. WinRM 依赖 Powershell 3.0 以上版本的支持,牵扯出 PowerShell 2.0 to PowerShell 3.0/5.0 的问题
  3. 而 Powershell 升级则带来.Net Framework 是否跟随升级至 4.6.2/4.7.2 的选择
  4. 关于 WinRM 的参数配置可以参考下面的链接 Setting up a Windows Host

https://github.com/ansible/ansible/blob/devel/examples/scripts/upgrade_to_ps3.ps1 https://github.com/ansible/ansible/blob/devel/examples/scripts/ConfigureRemotingForAnsible.ps1

Setting up a Windows Host http://docs.ansible.com/ansible/latest/user_guide/windows_setup.html

.NET Framework 4.7.2/4.6.2 https://www.microsoft.com/net/download/dotnet-framework-runtime

Powershell 3.0 https://www.microsoft.com/en-us/download/details.aspx?id=34595

Powershell 5.1 https://www.microsoft.com/en-us/download/details.aspx?id=54616

我个人目前的建议是 Win7/2008 升级至 Powershell 3.0,.Net Framework 升级至 4.6.2,其他情况需要可以参考官方文档后做决定

Ansible Windows Guides - http://docs.ansible.com/ansible/latest/user_guide/windows.html

客户端

1.客户端配置 windows 主机,以管理员身份打开 powershell, 并查看当前 ps 版本 get-host 2.系统自带的 powershell 版本是 2.0,需要更新至 powershell 3 以上版本 https://www.microsoft.com/net/download/dotnet-framework-runtime https://www.microsoft.com/en-us/download/details.aspx?id=34595 3.安装完重启服务器查看 powershell 版本

.NET Framework 4.6 以上版本无法建立到信任根颁发机构的证书链 原因:系统缺少信任 Microsoft Root Certificate Authority 2011 根证书 下载:MicrosoftRootCertificateAuthority2011.cer http://go.microsoft.com/fwlink/?LinkID=747875&clcid=0x409 运行 certmgr.msc 导入证书到“受信任的根证书颁发机构”

# 配置 winrm
mkdir C:\temp
cd C:\temp
# 下载 ConfigureRemotingForAnsible.ps1
https://raw.githubusercontent.com/ansible/ansible/devel/examples/scripts/ConfigureRemotingForAnsible.ps1
# 开启 WinRM 服务
powershell -ExecutionPolicy RemoteSigned .\ConfigureRemotingForAnsible.ps1 -SkipNetworkProfileCheck

服务端

# 服务端使用 pip 安装 pywinrm
pip install pywinrm

# 功能测试,配置 ansible 控制机
vi /etc/ansible/hosts

[windows]
192.168.67.139
[windows:vars]
ansible_user=Administrator
ansible_password=Admin123
ansible_port=5986
ansible_connection=winrm
ansible_winrm_server_cert_validation=ignore  

# 要注意的是端口方面 ssl 即 https 方式的使用 5986,http 使用 5985

# 测试 ping 通信
ansible windows -m win_ping 
# 查看 ip 地址 
ansible windows -m win_command -a "ipconfig"

网盘下载

Windows 作为客户端所需的软件包我上传到百度网盘,.Net Framework 安装失败提示证书错误记得手动导入 MicrosoftRootCertificateAuthority2011.cer

https://pan.baidu.com/s/1JNV2pXjwUn14ojAtdEH_Sg

  1. 安装 .Net Framework 4.6.2 ( NDP462-KB3151800-x86-x64-AllOS-ENU.exe )

  2. 升级 Windows 7 SP1 和 Windows 2008 R2 SP1 的 PowerShell 版本从 2.0 至 3.0 ( Windows6.1-KB2506143-x64.msu )

  3. 执行.\ConfigureRemotingForAnsible.ps1 脚本开启 WinRM 远程管理服务

    powershell -ExecutionPolicy RemoteSigned .\ConfigureRemotingForAnsible.ps1 -SkipNetworkProfileCheck

1910 次点击
所在节点    程序员
2 条回复
reboot51
2018-05-31 11:28:34 +08:00
您好,您的这个方法不错,请问可以分享转载?(会注明作者+原文链接)
wsgzao
2018-05-31 13:40:28 +08:00
@reboot51 #1 可以

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/456532

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX