如何从Ubuntu连接到Windows上的Ansible?

让我快速向您展示如何从运行在Ubuntu上的Ansible连接Windows服务器。

要按照以下步骤操作,您需要在两个系统上都安装Python 3.x和Ansible。如果需要帮助,可以参考以下文章。

How to Install and Configure Ansible on Ubuntu?

How to install Ansible on Windows?

下面是我正在使用的两个服务器的详细信息:

  • Ansible控制器 – 192.168.0.108
  • Windows服务器 – 192.168.0.102

步骤1:创建Ansible Windows用户

为Ansible Windows连接设置创建一个新用户。

  • 在Windows系统上打开计算机管理,转到本地用户和组。
  • 右键单击用户,创建一个新用户。
  • 选择“密码永不过期”复选框,然后点击创建。

  • 现在,在可用的组中,右键单击Administrators组,然后点击属性。
  • 点击添加,并输入ansible作为对象名称。
  • 点击检查名称选项,然后点击确定。

现在,在Windows机器上有一个ansible用户。

步骤2:设置库和WinRM

转到您的ansible控制器机器,更新并安装下面提到的库。

yaoweibin@yaoweibin:~$ sudo apt-get update
yaoweibin@yaoweibin:~$ sudo apt-get install gcc python-dev
yaoweibin@yaoweibin:~$ sudo apt install python3-pip

WinRM代表Windows远程管理。它允许您在远程Windows系统上执行管理任务。我们将安装python3-winrm,这是一个用于与Windows系统建立连接的Python客户端。

yaoweibin@yaoweibin:~$ sudo apt-get install python3-winrm
正在读取软件包列表... 完成
正在解析依赖关系树
正在读取状态信息... 完成
以下软件包是自动安装的并且现在不再需要:
gyp libc-ares2 libhttp-parser2.8 libjs-async libjs-inherits libjs-is-typedarray libjs-node-uuid libuv1 libuv1-dev node-abbrev node-ajv
node-ansi node-ansi-color-table node-ansi-regex node-ansi-styles node-ansistyles node-aproba node-archy node-are-we-there-yet node-async
node-validate-npm-package-license node-wcwidth.js node-which node-which-module node-wide-align node-wrap-ansi node-wrappy node-y18n
node-yallist node-yargs node-yargs-parser nodejs nodejs-doc
使用'sudo apt autoremove'来卸载它们。
将会安装下列额外的软件包:
python3-kerberos python3-ntlm-auth python3-requests-kerberos python3-requests-ntlm python3-xmltodict
下列新软件包将被安装:
python3-kerberos python3-ntlm-auth python3-requests-kerberos python3-requests-ntlm python3-winrm python3-xmltodict
升级了 0 个软件包,新安装了 6 个软件包,要卸载 0 个软件包,有 231 个软件包未被升级。
需要下载 84.8 kB 的归档文件。
解包后将占用 442 kB 的额外空间。
是否继续? [Y/n] Y
获取:1 http://old-releases.ubuntu.com/ubuntu cosmic/universe amd64 python3-kerberos amd64 1.1.14-1build1 [16.8 kB]
获取:2 http://old-releases.ubuntu.com/ubuntu cosmic/universe amd64 python3-ntlm-auth all 1.1.0-1 [19.6 kB]
获取:3 http://old-releases.ubuntu.com/ubuntu cosmic/universe amd64 python3-requests-kerberos all 0.11.0-2 [10.1 kB]
获取:4 http://old-releases.ubuntu.com/ubuntu cosmic/universe amd64 python3-requests-ntlm all 1.1.0-1 [6,004 B]
获取:5 http://old-releases.ubuntu.com/ubuntu cosmic/universe amd64 python3-xmltodict all 0.11.0-2 [10.6 kB]
获取:6 http://old-releases.ubuntu.com/ubuntu cosmic/universe amd64 python3-winrm all 0.3.0-2 [21.7 kB]
已下载 84.8 kB,共 1s (70.3 kB/s)
正在选择未选择的软件包 python3-kerberos。
(正在读取数据库 ... 系统当前共安装有 244430 个文件和目录。)
准备解包 .../0-python3-kerberos_1.1.14-1build1_amd64.deb ...
正在解包 python3-kerberos (1.1.14-1build1) ...
正在选择未选择的软件包 python3-ntlm-auth。
(正在读取数据库 ... 系统当前共安装有 244431 个文件和目录。)
正在解包 python3-ntlm-auth (1.1.0-1) ...
正在选择未选择的软件包 python3-xmltodict。
准备解包 .../4-python3-xmltodict_0.11.0-2_all.deb ...
正在解包 python3-xmltodict (0.11.0-2) ...
正在选择未选择的软件包 python3-winrm。
正在解包 python3-winrm (0.3.0-2) ...
正在设置 python3-kerberos (1.1.14-1build1) ...
正在设置 python3-winrm (0.3.0-2) ...

步骤3:更新Ansible Inventory文件

现在,我将使用windows system IP address编辑ansible hosts文件。因此,现在ansible将知道它需要连接的Windows系统。

yaoweibin@yaoweibin:~$ sudo gedit /etc/ansible/hosts

[win]
192.168.0.102

步骤4:更新Ansible组变量

创建一个目录,用于存放连接到Windows系统所需的变量。

yaoweibin@yaoweibin:~$ mkdir /etc/ansible/group_vars
yaoweibin@yaoweibin:~$ sudo chmod -R 777 /etc/ansible/

创建一个名为win.yaml的文件,并将在第一步创建的用户详细信息以及连接到Windows系统所需的其他变量放入其中。

yaoweibin@yaoweibin:~$ gedit /etc/ansible/group_vars/win.yaml
---

ansible_user: ansible

ansible_password: ansible

ansible_connection: winrm

ansible_winrm_server_cert_validation: ignore

ansible_winrm_transport: basic

ansible_winrm_port: 5985

ansible_python_interpreter: C:UsersyaoweibinAppDataLocalProgramsPythonPython37python

步骤5:配置要管理的Windows服务器

打开Windows PowerShell并进行升级。您的Windows机器需要安装Powershell 3.0和.NET Framework 4.0。

PS C:WINDOWSsystem32> $url = "https://raw.githubusercontent.com/jborean93/ansible-windows/master/scripts/Upgrade-PowerShell.ps1"
PS C:WINDOWSsystem32> $file = "$env:tempUpgrade-PowerShell.ps1"
PS C:WINDOWSsystem32> $username = "ansible"
PS C:WINDOWSsystem32> $password = "ansible"
PS C:WINDOWSsystem32> (New-Object -TypeName System.Net.WebClient).DownloadFile($url, $file)
PS C:WINDOWSsystem32> Set-ExecutionPolicy -ExecutionPolicy Unrestricted -Force
PS C:WINDOWSsystem32> &$file -Version 5.1 -Username $username -Password $password -Verbose

为了在Windows系统上配置WinRM,ansible提供了一个远程配置脚本。在PowerShell中运行该脚本。

PS C:WINDOWSsystem32> $url = "https://raw.githubusercontent.com/ansible/ansible/devel/examples/scripts/ConfigureRemotingForAnsible.ps1"
PS C:WINDOWSsystem32> $file = "$env:tempConfigureRemotingForAnsible.ps1"
PS C:WINDOWSsystem32> (New-Object -TypeName System.Net.WebClient).DownloadFile($url, $file)
PS C:WINDOWSsystem32> powershell.exe -ExecutionPolicy ByPass -File $file
PS C:WINDOWSsystem32> winrm enumerate winrm/config/Listener

Listener
Address = *
Transport = HTTP
Port = 5985
Hostname
Enabled = true
URLPrefix = wsman

CertificateThumbprint
ListeningOn = 127.0.0.1, 169.254.8.240, 169.254.36.9, 169.254.102.217, 169.254.215.170, 192.168.0.102, ::1, fe80::3131:c6d7:9ef5:8f0%7, fe80::51b7:9134:550d:d7aa%22, fe80::88f1:1229:e1dd:2409%16, fe80::99cf:5796:4f8e:f5c1%15, fe80::fd77:c19d:e0f2:66d9%9

Listener
Address = *
Transport = HTTPS
Port = 5986
Hostname = DESKTOP-2L8QMI6
Enabled = true
URLPrefix = wsman

CertificateThumbprint = C83B3FC8B274D0B650F0FD647DC7AC129BBE3FA0
ListeningOn = 127.0.0.1, 169.254.8.240, 169.254.36.9, 169.254.102.217, 169.254.215.170, 192.168.0.102, ::1, fe80::3131:c6d7:9ef5:8f0%7, fe80::51b7:9134:550d:d7aa%22, fe80::88f1:1229:e1dd:2409%16, fe80::99cf:5796:4f8e:f5c1%15, fe80::fd77:c19d:e0f2:66d9%9

设置winrm以允许HTTP流量。

PS C:WINDOWSsystem32> winrm set winrm/config/service '@{AllowUnencrypted="true"}'
Service
RootSDDL = O:NSG:BAD:P(A;;GA;;;BA)(A;;GR;;;IU)S:P(AU;FA;GA;;;WD)(AU;SA;GXGW;;;WD)

MaxConcurrentOperations = 4294967295

MaxConcurrentOperationsPerUser = 1500

EnumerationTimeoutms = 240000
MaxConnections = 300

MaxPacketRetrievalTimeSeconds = 120
AllowUnencrypted = true
Auth
Basic = true
Kerberos = true
Negotiate = true
Certificate = false
CredSSP = false

CbtHardeningLevel = Relaxed
DefaultPorts
HTTP = 5985
HTTPS = 5986
IPv4Filter = *
IPv6Filter = *

EnableCompatibilityHttpListener = false

EnableCompatibilityHttpsListener = false

CertificateThumbprint
AllowRemoteAccess = true

在winrm中将身份验证设置为基本。

PS C:WINDOWSsystem32> winrm set winrm/config/service/auth '@{Basic="true"}'
Auth
Basic = true
Kerberos = true
Negotiate = true
Certificate = false
CredSSP = false
CbtHardeningLevel = Relaxed

步骤6:测试与Windows服务器的连接

现在机器上的所有步骤都已完成。转到ansible控制器机器并使用win_ping ansible模块对Windows服务器机器进行ping测试。

yaoweibin@yaoweibin:~$ ansible win -m win_ping
192.168.0.102 | SUCCESS => {

"changed": false,
"ping": "pong"
}

成功的消息表明连接已建立。现在,可以从在Ubuntu上运行的Ansible远程管理Windows系统。

类似文章