Ansible基于Windows的管理架构

一、前言

如《第1章Ansible发展史》介绍,作为关注度最高的集中化管理工具,Ansible同样支持Windows系统,只是相对Linux发行版无论在配置还是管理方式都有较大差别,本章来为大家详细介绍。

二、Windows下Ansible工作原理

Ansible 从1.7+版本开始支持Windows,但前提是管理机必须为Linux系统,远程主机的通信方式也由SSH变更为PowerShell,基于Kerberos认证方式,同时管理机必须预安装Python的Winrm模块,方可和远程Windows主机正常通信,但PowerShell需3.0+版本且Management Framework 3.0+版本,实测Windows 7 SP1和Windows Server 2008 R2及以上版本系统经简单配置可正常与Ansible通信。简单总结如下:

  • 管理机必须为Linux系统且需预安装Python Winrm模块
  • 底层通信基于PowerShell,认证基于Kerberos
  • 远程主机PowerShell版本为3.0+,Management Framework版本为3.0+。

如上条件满足后,方可正常和Ansible通信,下面章节我们逐步深入。

三、 Ansible管理机(linux)部署安装

如上节介绍,基于Windows管理但管理机系统需为Linux系统,且需预先安装Python 的Winrm模块:

pip install "pywinrm>=0.1.1"

如远程Windows主机是基于Active Directory(后文统一简称为AD)的管理方式,管理机和远程主机基于Kerbero认证,需额外安装python-kerbero和MIT krb5依赖库。

步骤1、 安装python-kerberos依赖,命令如下:

Yum方式(Centos,RedHat,Fedora)

yum -y install python-devel krb5-devel krb5-libs krb5-workstation

Apt方式 (Ubuntu)

sudo apt-get install python-dev libkrb5-dev

Portage方式 (Gentoo)

emerge -av app-crypt/mit-krb5emerge -av dev-python/setuptools

pkg 方式(FreeBSD)

sudo pkg install security/krb5

OpenCSW方式 (Solaris)

pkgadd -d http://get.opencsw.org/now/opt/csw/bin/pkgutil -U/opt/csw/bin/pkgutil -y -i libkrb5_3

Pacman方式 (Arch Linux)

pacman -S krb5
步骤2 、安装python-kerberos,OSX和Linux发行版均默认安装,安装命令如下:
pip install Kerberos
步骤3、配置Kerberos,配置/etc/krb5.conf,添加如下内容
[realms] MY.DOMAIN.COM = {  kdc = domain-controller1.my.domain.com  kdc = domain-controller2.my.domain.com }

之后于 [domain_realm] 后添加如下内容:

[domain_realm]    .my.domain.com = MY.DOMAIN.COM

通过以下命令验证域账户认证情况:

kinit user@MY.DOMAIN.COM
步骤4、同理配置Inventory主机信息和group_vars/windows.yml变量信息,Inventory添加如下信息:
[windows]win1.magedu.comwin2.magedu.com

group_vars/windows.yml添加如下信息:

ansible_user: Administratoransible_password: magedu@beijingansible_port: 5986ansible_connection: winrmansible_winrm_server_cert_validation: ignore

若windows使用本地账号连接,则可直接在/etc/ansible/hosts上配置(如下 ):

xw-win ansible_user="Administrator" ansible_password="0" ansible_port="5986" ansible_connection="winrm" ansible_winrm_server_cert_validation="ignore"

至此,服务端配置完毕,如需和远程Windows正常通信仍需对Windows做一定配置修改。详细如下

四、Windows系统预配置

(使用ansible官方自动配置脚本ConfigureRemotingForAnsible.ps1和自动升级powershell的脚本upgrade_to_ps3.ps1即可完成配置,记录要允许powershell执行脚本:set-executionpolicy -executionpolicy unrestricted)
和Linux发版版稍有区别,远程主机系统如为Windows需预先如下配置:

  • 安装Framework 3.0+
  • 设置PowerShell本地脚本运行权限为remotesigned
  • 升级PowerShell至3.0+
  • 自动设置Windows远端管理,英文全称WS-Management(WinRM)

我们逐一介绍:

安装Framework 3.0+

下载链接为:http://download.microsoft.com/download/B/A/4/BA4A7E71-2906-4B2D-A0E1-80CF16844F5F/dotNetFx45_Full_x86_x64.exe。 下载至本地后双击左键安装即可,期间可能会多次重启,电脑需正常连接Internet。

设置PowerShell本地脚本运行权限为remotesigned

因Windows系统默认不允许非Adminitor外的普通用户执行SP脚本,即使是管理员,如下开放P脚本执行权限。
步骤1 打开CMD输入regedit.exe 如下图打开注册表。


步骤2 设置SP脚本系统可运行。

依次打开注册表目录HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell
如图下图修改SP脚本可执行权限为remotesigned。


或者,打开PowerShell执行命令:set-executionpolicy -executionpolicy unrestricted 返回结果如图


这里共4种权限:

  • Restricted—默认的设置, 不允许任何script运行;
  • AllSigned—只能运行经过数字证书签名的script;
  • RemoteSigned—运行本地的script不需要数字签名,但是运行从网络上下载的script就必须要有数字签名;
  • Unrestricted—允许所有的script运行。
升级PowerShell至3.0+

PowerShell 3.0+ 需基于Windows 7 Sp1安装,Windows7系统Sp1补丁升级请参考http://windows.microsoft.com/installwindows7sp1,这里不作详细介绍。Window 7和Windows Server 2008 R2默认安装的有PowerShell,但版本号一般为2.0版本,所以我们需升级至3.0+,如下图中数字1部分表示PowerShell版本过低需3.0+版本,数字2部分表示当前PowerShell版本为2.0

PowerShell至3.0+版本,下载地址如下:
https://github.com/cchurch/ansible/blob/devel/examples/scripts/upgrade_to_ps3.ps1。下载至本地后,如图10-5右键选择“使用PowerShell运行”,执行完毕重启系统后,在PowerShell执行Get-Host命令结果如下图所示PowerShell版本为3.0为正常。


步骤4、自动设置Windows远端管理(WS-Management,WinRM)

下载补丁脚本

https://github.com/ansible/ansible/blob/devel/examples/scripts/ConfigureRemotingForAnsible.ps1,下载至本地,右击后选择“使用PowerShell运行”,执行结果没有返回错误即为正常。
如执行出现“由于此计算机上的网络连接类型之一设置为公用,因此 WinRM防火墙例外将不运行”类似报错,请在PowerShell中执行命令尝试解决。

Enable-PSRemoting – SkipNetworkProfileCheck –Force

好了,远程Windows主机配置到此结束,我们验证配置的是否有问题,在Master机做如下设置:
步骤1、配置Inventory 添加/etc/ansible/hosts配置。

[windows]192.168.37.146 ansible_ssh_user="Administrator" ansible_ssh_pass="magedu@beijing" ansible_ssh_port=5986 ansible_connection="winrm"

步骤2、在Master上执行命令:

ansible windows -m win_ping

返回结果如下图所示:



注意:Windows系统建议使用Administrator用户,避免不可预知的问题。命令运行前请设置Administrator可登录且登录密码为magedu@beijjing。

五、Windows下可用模块

  • Windows下可用模块虽不及Linux丰富,但基础功能均包括在内,如下介绍日常工作常用到的模块,请参考。
  • win_acl (E) —设置文件/目录属主属组权限;
  • win_copy—拷贝文件到远程Windows主机;
  • win_file —创建,删除文件或目录;
  • win_lineinfile—匹配替换文件内容;
  • win_package (E) —安装/卸载本地或网络软件包;
  • win_ping —Windows系统下的ping模块,常用来测试主机是否存活;
  • win_service—管理Windows Services服务;
  • win_user —管理Windows本地用户。

更多模块及详细功能介绍请参考官网:http://docs.ansible.com/ansible/list_of_windows_modules.html除win开头的模块外,scripts,raw,slurp,setup模块在Windows 下也可正常使用。

六、Windows Ansible模块使用实战

本节通过几个实战案例为大家演示一些常用模块用法。

案例1: 传输/etc/passwd文件至远程E:\file\目录下

执行命令:

ansible windows -m win_copy -a 'src=/etc/passwd dest=E:\file\passwd'

返回结果:

192.168.37.146 | success >> {    "changed": true,    "checksum": "896d4c79f49b42ff24f93abc25c38bc1aa20afa0",    "operation": "file_copy",    "original_basename": "passwd",    "size": 2563}

部分返回结果诠释:

  • “operation”: “file_copy”—执行的操作为 file_copy;
  • “original_basename”: “passwd”—件名为 passwd;
  • “size”: 2563—文件大小为 2563 bytes。

Playbook写法如下:

---- name: windows module example  hosts: windows  tasks:     - name: Move file on remote Windows Server from one location to another       win_file: src=/etc/passwd dest=E:\file\passwd
案例2: 删除案例1中的E:\file\passwd。

执行命令:

ansible windows -m win_file -a "path=E:\file\passwd state=absent"

返回结果:

192.168.37.146 | success >> {    "changed": true}
案例3: 新增用户stanley,密码为magedu@123,属组为Administrators。

执行命令:

ansible windows -m win_user -a "name=stanley passwd=magedu@123 group=Administrators"

返回结果:

192.168.37.146 | success >> {    "account_disabled": false,    "account_locked": false,    "changed": true,    "description": "",    "fullname": "stanley",    "groups": [        {            "name": "Administrators",            "path": "WinNT://WORKGROUP/LINUXLST/Administrators"        }    ],    "name": "stanley",    "password_expired": true,    "password_never_expires": false,    "path": "WinNT://WORKGROUP/LINUXLST/stanley",    "sid": "S-1-5-21-3965499365-1200628009-3594530176-1004",    "state": "present", "user_cannot_change_password": false}

部分返回结果诠释:

  • account_disabled—禁用用户登录;
  • account_locked—解锁用户;
  • groups—用户所属组;
  • name—用户名;
  • password_expired—下次登录修改密码;
  • user_cannot_change_password—用户是否可修改密码。
案例4:重启Windows spooler服务

执行命令:

ansible windows -m win_service -a "name=spooler state=restarted"

返回结果:

192.168.37.146 | success >> {    "changed": true,    "display_name": "Print Spooler",    "name": "spooler",    "start_mode": "auto",    "state": "running"}

本章小结

本章为大家介绍了当远程主机为Windows时Ansible的管理机制,从整体配置复杂程度上相对Linux要麻烦些,现如今服务器市场Linux大为流行的背景下,各软件对Windows的支持力度确实不如预期,也曾收到业界Windows应用者反馈Ansible管理Windows期间存在意想不到的问题,其实何止Ansible,现流行的集中化管理工具对Windows的支持力度均一般。笔者Windows的维护经历提醒各位:珍爱生命,远离Windows。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,088评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,715评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,361评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,099评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 60,987评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,063评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,486评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,175评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,440评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,518评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,305评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,190评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,550评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,880评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,152评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,451评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,637评论 2 335

推荐阅读更多精彩内容