连接到 Windows 主机
连接到 Windows 主机
欢迎来到我们的 Windows 专属入门系列的第一期!
您是否想使用 Red Hat Ansible Tower 自动化一些 Windows 主机,但不知道如何设置一切?您是否担心 Red Hat Ansible Engine 无法与您的 Windows 服务器通信,而无需安装大量额外的软件?您是否想轻松地自动化每个人最好的朋友 Clippy?
我们无法帮助解决最后一件事情,但如果您对其他两个问题回答了肯定,那么您来对地方了。在这篇文章中,我们将引导您完成设置和使用 Ansible Engine 连接到 Windows 主机所需的所有步骤。
为什么要自动化 Windows 主机?
您可以使用 Ansible Engine 为 Windows 主机执行的众多操作中的一部分包括
- 启动、停止和管理服务
- 推送和执行自定义 PowerShell 脚本
- 使用 Chocolatey 包管理器管理包
除了使用本地或域用户连接到 Windows 主机并对其进行自动化外,您还可以使用 runas
以管理员身份执行操作(Windows 中的 sudo
或 su
的替代方案),因此不会丢失任何特权提升功能。
需要什么?
在我们开始之前,让我们回顾一下 基本要求。首先,您的控制机(Ansible Engine 将从这里执行您选择的 Windows 模块)需要运行 Linux。其次,Windows 支持一直在快速发展,因此请确保使用最新版本的 Ansible Engine 以获取最新功能!
对于目标主机,您应该至少运行 Windows 7 SP1 或更高版本或 Windows Server 2008 SP1 或更高版本。您不希望运行 90 年代的东西,比如 Windows NT,因为可能会发生这种情况
最后,由于 Ansible 通过使用 Windows 远程管理 (WinRM) 连接到 Windows 机器并运行 PowerShell 脚本(作为 Linux/Unix 机器上 SSH 的替代方案),因此应创建和激活 WinRM 监听器。好消息是,可以使用脚本非常轻松快捷地连接到 Windows 主机,我们将在下面的部分中讨论这一点。
步骤 1:设置 WinRM
什么是 WinRM?它是 Windows Vista 及更高版本的一项功能,允许管理员远程运行管理脚本;它通过实现基于 简单对象访问协议 (通常称为 SOAP) 的 WS-Management 协议来处理这些连接。使用 WinRM,您可以执行一些很酷的操作,例如作为网络管理员访问、编辑和更新本地和远程计算机上的数据。
WinRM 非常适合与 Ansible Engine 一起使用的原因是,您可以从运行在非 Windows 操作系统(在本例中为 Linux)上的 WS-Management 协议实现中获取硬件数据。它基本上就像一个翻译器,允许不同类型的操作系统协同工作。
那么,我们如何连接?
在大多数版本的 Windows 中,WinRM 都包含在系统中,但默认情况下未启用。您可以使用一个 为 Ansible 配置远程访问 脚本,在远程 Windows 机器上运行此脚本(在 PowerShell 控制台中以管理员身份运行)以启用 WinRM。要设置 https 监听器、构建自签名证书并执行 PowerShell 命令,只需像下面示例中那样运行脚本即可(如果您在本地机器上存储了 .ps1
文件)
注意:win_psexec 模块将帮助您在您环境中需要设置大量 Windows 主机的情况下,在多台机器上启用 WinRM。
有关 WinRM 和 Ansible 的更多信息,请查看 Windows 远程管理 文档页面。
步骤 2:安装 Pywinrm
由于 pywinrm 依赖项不随 Ansible Engine 一起提供(这些依赖项对于使用 WinRM 是必需的),因此请确保在安装了 Ansible 的机器上安装与 pywinrm 相关的库。最简单的方法是在您的终端中运行 pip install pywinrm
。
步骤 3:正确设置您的清单文件
为了正确连接到 Windows 主机,您需要确保在清单文件的 主机变量 部分中输入 ansible_connection=winrm
,这样 Ansible Engine 不会一直尝试通过 SSH 连接到 Windows 主机。
此外,WinRM 连接插件默认通过 https 进行通信,但它支持不同的模式,例如消息加密的 http。由于我们之前运行的“为 Ansible 配置远程访问”脚本使用自签名证书设置了内容,因此我们需要告诉 Python,“不要尝试验证此证书,因为它不是来自有效 CA 的”。因此,为了防止出现错误,您还需要在 主机变量
部分中输入:ansible_winrm_server_cert_validation=ignore
为了让您在一个地方看到它,这里是一个示例主机文件(请注意,您的特定环境的一些详细信息将有所不同)
[win] 172.16.2.5 172.16.2.6 [win:vars] ansible_user=vagrant ansible_password=password ansible_connection=winrm ansible_winrm_server_cert_validation=ignore
步骤 4:测试连接
让我们检查一下一切是否正常。为此,请转到您的控制节点的终端并键入 ansible [清单文件中主机组名称] -i hosts -m win_ping
。您的输出应如下所示
注意:所有 Windows 模块上的 win_
前缀表明它们是用 PowerShell 而不是 Python 实现的。
WinRM 故障排除
由于 WinRM 可以以多种不同的方式配置,因此看似与 Ansible Engine 相关的错误实际上可能是由于主机设置问题导致的。您可能会看到的一些 WinRM 错误示例包括 HTTP 401 或 HTTP 500 错误、超时问题或连接拒绝。要获得有关如何解决这些问题的提示,请访问 Windows 设置文档页面的 常见 WinRM 问题 部分。
结论
您现在应该可以使用 Ansible 自动化 Windows 主机,而无需安装大量额外的软件!但请记住,即使您遵循了上面的说明,一些 Windows 模块也有一些额外的规范(例如,更新的操作系统或更新的 PowerShell 版本)。找出您是否满足正确要求的最佳方法是检查 特定于模块的 文档页面。
有关如何使用 Ansible Engine 自动化 Windows 主机的更深入信息,请查看我们的 Windows 常见问题解答 和 Windows 支持 文档页面,并继续关注更多与 Windows 相关的博客文章!