我尝试使用Ansible为Windows Server 2016进行设置
虽然现在可能有点晚了,但我决定尝试使用Ansible来配置Windows服务器。
我会在Linux上构建Ansible服务器。
安装Ansible的环境
我已经在以下环境中创建了一个Ansible执行环境。
在CentOS8中安装Ansible。
在CentOS8中安装用于操作WinRM的pywinrm。
WinRM(Windows Remote Management)是一种用于远程操作Windows的服务。
在Windows2016中,默认情况下已安装并自动启动。
如果在Windows 2016的服务列表中进行确认,会得到以下结果。
Windows服务器版本
Windows2016 -> Windows2016操作系统
安装Ansible
首先,在CentOS 8的服务器上安装Ansible。这应该是一种非常常见的步骤,以下是具体的操作步骤。
由于使用的是CentOS 8,我们使用dnf命令进行安装,如果是CentOS 7的情况,则将其替换为yum并执行相应的命令。
最后,我们将确认Ansible的版本。
# dnf install epel-release.noarch
# dnf install ansible
# ansible --version
安装pywinrm
当完成Ansible的安装后,我们需要安装pywinrm来操作Windows服务器上的WinRM。最后我们要确认pywinrm的版本。
# pip3 install pywinrm
# pip3 list | grep pywinrm
pywinrm (0.4.1)
在CentOS 7上,需要单独安装pip(Python的包管理工具),而在CentOS 8上则无需额外步骤。
Windows服务器的准备工作
为了响应Ansible服务器对Windows服务器的访问,将以下配置项添加到Windows服务器端。请以管理员模式启动Windows服务器的”PowerShell”,并执行以下命令。
PS C:\Users\Administrator> $url = "https://raw.githubusercontent.com/ansible/ansible/devel/examples/scripts/ConfigureRemotingForAnsible.ps1"
PS C:\Users\Administrator> $file = "$env:temp\ConfigureRemotingForAnsible.ps1"
PS C:\Users\Administrator> (New-Object -TypeName System.Net.WebClient).DownloadFile($url, $file)
PS C:\Users\Administrator> powershell.exe -ExecutionPolicy ByPass -File $file
执行上述的4个命令后,确认以下内容被显示出来。
PS C:\Users\Administrator> winrm enumerate winrm/config/Listener
Listener
Address = *
Transport = HTTP
Port = 5985
Hostname
Enabled = true
URLPrefix = wsman
CertificateThumbprint
ListeningOn = 127.0.0.1, 192.168.0.20, ::1, 2001:0:348b:fb58:3cb0:35ed:8ed4:1d9d, fe80::5efe:172.18.254.60%8, fe80::3cb0:35ed:8ed4:1d9d%25
Listener
Address = *
Transport = HTTPS
Port = 5986
Hostname = WIN-DOHTBU19QH6
Enabled = true
URLPrefix = wsman
CertificateThumbprint = 7DCCEC302FD098025C97F0092516C7469838471E
ListeningOn = 127.0.0.1, 192.168.0.20, ::1, 2001:0:348b:fb58:3cb0:35ed:8ed4:1d9d, fe80::5efe:172.18.254.60%8, fe80::3cb0:35ed:8ed4:1d9d%25
可以确认5985和5986端口已经被允许用于WinRM。
准备工作已经做好了。
到这里为止,准备工作完成了。接下来将会创建Ansible执行文件。我们将略过Ansible的语法细节等。
Ansible配置
首先创建一个用于Ansible的目录,并创建一个名为hosts的文件作为Windows服务器的执行目标。
在以下示例中,我们使用vi编辑器创建了一个名为hosts的文件,但如果您拥有自己喜欢的可执行Ansible的环境,文件名并不一定需要是hosts。
# mkdir ansible
# cd ansible
# vi hosts
[windows]
192.168.0.20
[windows:vars]
ansible_user=Administrator
ansible_password=xxxxxx
ansible_connection=winrm
ansible_port=5986
ansible_winrm_server_cert_validation=ignore
请在ansible_password=xxxxxx中填写Windows服务器的登录密码。
示例简报
接下来我们要创建Playbook。使用名为test.yml的文件进行创建。
这是一个执行以下3个步骤的Playbook。
・创建了一个名为ksawada1979的用户
・禁用了主题
・通过Windows更新进行了安全更新
# vi test.yml
- hosts: windows
tasks:
- win_user:
name: ksawada1979
password: xxxxxx
state: present
groups:
- Administrators
- Users
- name: Themes disabled
win_service:
name: Themes
start_mode: disabled
- name: Install all security, critical, and rollup updates without a scheduled task
win_updates:
category_names:
- SecurityUpdates
密码:请用户输入密码。
执行Ansible
# ansible-playbook -i ./hosts test.yml
Windows模块列表
在这个示例中,我们提到了用户创建和服务禁用,但是Windows模块似乎有各种各样。我们希望继续尝试,因为以下官方文档中有相关说明。
https://docs.ansible.com/ansible/2.9/modules/list_of_windows_modules.html
请参考以下网站
非常感谢您在上述网站上提供的帮助。在遇到各种问题后,在经过一番寻找后我才找到了上述的网站,但是如果一开始就按照这个网站的指示,事情可能会更顺利。