借助Ansible和其他功能驯服WSUS


好了,现在该让Windows Update与“开源世界”成为朋友了。 在本文中,我们通过将Ansible与Windows计算机的所有可能的更新源集成来使生活多样化。 尽管该系统的功能远不只是将更新发布到服务器和工作站上那样广泛,但是您必须从某个地方开始。


同时,如果您喜欢“老派”,我们将消除WSUS带来的不便之处。


为什么我们不喜欢WSUS


因为它很简单,所以我不会谈论设置Windows Server Update Services。 专注于缺点。



在整个历史上,WSUS界面都没有太大变化。


无法按需安装 。 实际上,WSUS可以很好地用于常规操作-当计算机关闭时,更新易于配置并安装在本地网络上。 但是,如果您迫切需要安装安全补丁,则必须使用脚本和解决方案来运行这些脚本。 我们的材料“ 在远程计算机上运行命令的1000 ++方式 ”可以为您提供帮助。


缺少安装第三方软件更新的常规方法 。 如果有更新服务器,则不仅可以将其用于MS软件更新,而且还可以用于其他解决方案。 例如,在上述Adobe Flash Player中不会定期发现漏洞,并且我也想用新的FireFox功能使用户满意。 为了通过WSUS安装更新,您必须使用WSUS Package Publisher之类的第三方解决方案。 您可以在“ 使用WSUS-2安装任何软件 ”一文中看到配置示例。


使用内置的Windows数据库 。 在标准安装中,WSUS使用WID-Windows Internal Database。 这本质上是带有数据库的小型嵌入式SQL Server。 如果发生任何故障或冲突,例如,如果您在同一台服务器上具有Remote Desktop Connection Broker和WSUS,则必须修复该数据库,配置访问权限,并从各个方面获得乐趣。 是的,备份不会造成伤害。 幸运的是,WSUS也可以使用经典SQL。 要迁移WSUS数据库,可以使用Microsoft 将WSUS数据库从WID迁移到SQL的说明。


需要进行服务以及故障客户端的非显而易见的设置。 与Microsoft产品一样,WSUS迟早会开始放慢速度:客户无法长期使用它并下载更新。 技巧和优化的集合可以在文章“ 加速WSUS ”及其评论中找到。


当然,您可以忍受这些缺点,但是也可以通过将其他工具与WSUS结合使用以及不使用它们来使生活更轻松。


使用Ansible安装更新


几乎任何配置管理系统都可以促进更新工作。 让我们分析一个基于Ansible的示例,该示例用于按需安装更新。


安排一个从自由系统(Ansible,Chef,Puppet甚至是Salt)中获取更好的holivar,没有丝毫欲望。 选择Ansible是因为不需要代理并且易于配置。 而且,当然是由于Python:毕竟,与Ruby不同,对于初学者自动化而言,这种语言要容易得多。

值得注意的是,除了解决问题之外,熟悉此类系统的操作原理也将是一个有益的帮助。 除非,当然,除非您有安装Streisand的乐趣,尤其是当过程中出现问题时。 并且,如果您已经使用Ansible或其他流行的解决方案,则可以轻松安装更新。 我建议阅读文章“ Ansible Manual ”中的Ansible基础知识,下面是有关使用更新的分步说明。


首先,准备Ansible服务器。 几乎所有GNU \ Linux发行版都可以使用,但是我将提供Ubuntu Server命令示例(从历史上来看)。


首先,为Python应用程序安装软件包管理器:


apt-get install python-pip pip install --upgrade pip pip install --upgrade virtualenv 

然后,我们需要安装pywinrm软件包以直接连接到Windows系统和Ansible系统:


 sudo pip install pywinrm sudo pip install ansible 

您可以使用ansible --version命令验证安装。



验证安装。


您可以使用任何其他工具来从Linux计算机管理Windows,而不是pywinrm理论中的软件包。 在“ 异花授粉:从Windows下管理Linux,反之亦然 ”一文中讨论了其中的一些。

现在,您需要启用通过WinRM与Windows的连接。 为此,在GitHub上有一个现成的ConfigureRemotingForAnsible.ps1脚本。 好了,您已经知道如何在远程计算机上运行脚本。


您可以使用以下命令检查与Windows的连接:


 ansible windows -m win_ping 


连接检查成功。


现在,您可以开始创建剧本了。 Ansible开发人员已经为我们着想并制作了win_updates模块(仅用于解决此类问题),这一事实将使我们的生活更加轻松。


该手册是一条“指令”,告诉配置管理系统该怎么做。 当然,要逐步进行。

任何剧本都是yml文件,并且是一组指令-每个模块都有自己的指令。 winupdate模块允许您使用以下指令(默认值以粗体显示):


职称价值内容描述
category_names申请书
连接器
关键更新
定义更新
开发人员套件
功能包
指导
安全更新
服务包
工具类
UpdateRollups
更新内容
更新类别。
白名单更新编号或名称模板。直接安装的更新数为KB01234或PowerShell正则表达式名称模式。
黑名单更新编号或名称模板。直接不需要安装的更新数量,例如KB01234或PowerShell正则表达式形式的名称模板。
重新启动是的
没有啦
升级后是否需要重新启动?
reboot_timeout秒,1200重新启动后要等什么时间?
已安装
搜索过
是安装更新还是仅搜索。
log_path文件路径安装日志和文件夹必须存在。

因此,以下剧本适用于安装某些更新:


 - name: Install specific updates based on the KBs for those updates win_updates: category_name: - SecurityUpdates whitelist: - KB4073819 - KB4074228 

而且,如果您只需要计算缺少的更新数量,则剧本将如下所示:


  – name: Check for missing updates win_updates: state=searched register: update_count 

要安装所有可用的更新,然后重新启动,将有一个类似的剧本:


 - name: Install all critical and security updates win_updates: category_names: - CriticalUpdates - SecurityUpdates - UpdateRollups state: installed register: update_result - name: reboot host if required win_reboot: when: update_result.reboot_required 

让我提醒您,您需要一个清单文件才能使用服务器列表。 例如,这:


 [DCs] dc1.mydomain.local dc2.mydomain.local [AppServers] app1.mydomain.local app2.mydomain.local [DBServers] db1.mydomain.local db2.mydomain.local 

现在,要仅在域控制器上安装更新,可以使用剧本:


 - hosts: DCs tasks: - name: Choose which Windows updates to install win_updates: category_names: - SecurityUpdates - CriticalUpdates - UpdateRollups 

将执行所有这些操作的团队将如下所示:


 ansible-playbook -i inventory.yml -s windowsupdates.yml 

细心的读者可能会询问下载的更新的来源。 源将是计算机上配置的源:无论是Internet上的Windows Update还是本地WSUS。 即使您的双手尚未达到WSUS设置,您也可以发出命令来安装必要的紧急更新,尤其是在Lego零件已经溅到脚下的情况下。


需要补充的是,没有必要使用完全Ansible。 例如,对于Chef配置管理系统,您可以使用Cookbook Wsus Client或更复杂的boxstarter 。 Puppet存在类似的模块 。 通常,几乎任何配置管理系统都可以执行类似的操作,包括MS SCCM。


最后,我将提供更多我感兴趣的工具。


其他系统和解决方案


WSUS脱机 。 ISO可以打包一个程序,该程序可让您在一个程序包中下载必要的更新。 您也可以将程序包放在网络文件夹中,并使用脚本安装更新,而无需部署完整的WSUS。


补丁管理 (Comodo)。 用于安装Windows和其他软件更新的系统。 与其他解决方案不同,它是免费的。



界面Comodo补丁管理。


Opsi 。 一个免费,有趣的系统,它不仅支持安装更新,还支持安装操作系统以及清单。


BatchPatch 。 列表中唯一的付费系统。 允许您安装软件,更新软件(例如Windows)等。 它在老式设计上有所不同,费用也不同,不是托管主机的数量,而是程序用户(即管理员)的费用。 也许这是将自己定位为WSUS类似物的少数解决方案之一。 价格从400美元起。



BatchPatch接口。


在评论中,添加您喜欢的工具来进行更新等。

Source: https://habr.com/ru/post/zh-CN414751/


All Articles