最近工作中需要统一管理一批Linux和Windows机器,实现应用的自动化部署。刚开始直接使用的ssh登录到目标机器进行部署,Linux机器上面没什么问题,但是Windows上面需要提前安装并配置好ssh server。当时选用freesshd作为ssh server,虽然成功实现了自动化,但是因为freesshd已经很久没更新了,不符合公司的安全规范,所以就重新调研,最后选择了Ansible。

Ansible从1.7+版本之后提供了对Windows机器的支持,而且管理方式和管理Linux机器大同小异,这一点非常棒。不过不同的是,与Linux机器通信是采用的ssh,而与Windows的通信方式则采用了Windows机器自带的powershell。因此在Windows机器上只需完成很少的配置即可使用Ansible进行管理。

Ansible可用于管理Windows集群,不过管理节点需要部署在Linux机器上,而且需要预装python winrm模块。同时,Windows机器上的powershell版本需要满足3.0+,且Management Framework也需要满足3.0+版本。

Windows机器配置

Windows机器需要完成如下几步简单配置才能实现与管理节点通信。

启用Administrator账户

要想使用Ansible管理windows主机,需要使用Administrator账户进行登录。
默认情况下,windows系统是不允许使用Administrator管理员账户进行登录的,在开机登录界面也将Administrator账户隐藏了。我们需要启用Administrator账户,如果已经可以使用Administrator进行登录,则跳过这一步。

我们从如下路径进行配置:计算机 –> 管理 –> 系统工具 –> 本地用户和组 –> 用户 –> Administrator,双击然后我们可以看到如下界面。

ansible 如何用windows ansible能用在windows上吗_windows集群

取消”账户已禁用”选项,应用。
然后我们再右键Administrator,为该账户设置密码。完成之后重启即可使用Administrator账户进行登录了。

安装Microsoft .NET Framework 4

下载.Net Framework 4到本地进行安装。

升级powershell版本为3.0+

我们首先在powershell中运行get-host命令查看powershell版本,win7默认安装的powershell为2.0版本,我们需要升级到3.0+版本。

下载安装Windows Management Framework 3.0,这里选择Windows6.1-KB2506143-x64.msu下载安装。安装完成之后,重启系统,之后查看powershell版本会发现已经更新到了3.0版本。

配置winrm服务

Windows上winrm服务默认是未启用的,使用如下命令可以查看状态。

> winrm enumerate winrm/config/listener

使用如下命令配置winrm服务

> winrm quickconfig
> winrm set winrm/config/service/auth '@{Basic="true"}'
> winrm set winrm/config/service '@{AllowUnencrypted="true"}'

至此,windows主机的配置就完成了,接下来我们配置linux管理节点进行验证。

Linux管理节点配置

首先参考前一篇文章安装好ansible。

然后需要使用pip安装pywinrm模块。如果没有安装pip,则先参考前面的文章安装并配置pip。

$ pip install "pywinrm>=0.2.2"

然后我们在/etc/ansible/hosts文件中增加windows主机的配置信息,如下:

[win1]
192.168.1.7  ansible_ssh_user="Administrator" ansible_ssh_pass="admin123" ansible_ssh_port=5985 ansible_connection="winrm" ansible_winrm_server_cert_validation=ignore

然后使用如下命令进行验证,我们看到,此时可以使用win_ping模块连到之前配置的windows主机上了。

$ ansible win1 -m win_ping
192.168.1.7 | SUCCESS => {
    "changed": false, 
    "failed": false, 
    "ping": "pong"
}

Windows下可用模块

Windows下的可用模块并没有linux下那么多,不过常用的功能已经有了,例如:

#测试联通性
$ ansible win1 -m win_ping
192.168.1.7 | SUCCESS => {
    "changed": false, 
    "failed": false, 
    "ping": "pong"
}

#拷贝文件
$ ansible win1 -m win_copy -a 'src=/etc/passwd dest=C:\'
192.168.1.7 | SUCCESS => {
    "changed": true, 
    "checksum": "395a02d7cd0aa830be63b4bbc6d2ee082bb14934", 
    "dest": "'C:\\passwd'", 
    "failed": false, 
    "operation": "file_copy", 
    "original_basename": "passwd", 
    "size": 1150, 
    "src": "/etc/passwd"
}

#创建删除文件/目录
$ ansible win1 -m win_file -a "path=C:\passwd state=absent"
192.168.1.7 | SUCCESS => {
    "changed": true, 
    "failed": false
}

Windows下更多的可用模块可以参考官方文档