(一)Ansible简介

Ansible 是一款轻量级的开源的自动化运维工具,支持 linux 和 windows(只支持 client,并且部分模块),利用 Ansible 可以简单批量的配置系统,安装软件,或者更高级的运维任务(比如滚动升级)。

Ansible 之类的运维工具对运维工作进行抽象及规范,能够极大的降低运维难度。本文只是为了演示如何通过 ansible 的各模块对 windows 进行传输文件,管理账号,执行脚本等批量自动化管理工作。

(二)注意事项

Ansible 只支持 Powershell 4.0 及以上(用 3.0 会报 Process is terminated due to StackOverflowException.),所以要求最低要求 Win7,或者 Win server 2008,详见
《Ansible Doc host requirements》

配置winrm之前检查系统版本,以及powershell版本。
需要:Microsoft .NET Framework 4.5以上,
powershell5.0(Windows Management Framework 5.0 )

我建议大家使用5.0以上版本,4.0版本官网上已经找不到了。下载地址见另一篇文章《Ansible配置成功但报错Process is terminated due to StackOverflowException问题记录》

注意: 先安装.NET Framework 4.5 ,然后安装powershell4.0,安装完成之后重启windows服务器

(三)winrm配置

Windows客户端配置winrm,开启powershell远程管理权限

管理员权限打开powershell终端,按如下步骤执行命令:

① 查看powershell执行策略

get-executionpolicy

ansible windows版本 ansible能用在windows上吗_windows

② 更改powershell执行策略为remotesigned

set-executionpolicy remotesigned

ansible windows版本 ansible能用在windows上吗_Windows_02

③ 配置winrm service并启动服务

winrm quickconfig

ansible windows版本 ansible能用在windows上吗_Ansible_03

④ 查看winrm service启动监听状态

我这里之前已经配置过了,如果第一次配记得这5步执行完之后再运行此命令检查一下是否开启

winrm enumerate winrm/config/listener

ansible windows版本 ansible能用在windows上吗_Ansible_04

⑤ 修改winrm配置,启用远程连接认证

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

winrm set winrm/config/service '@{AllowUnencrypted="true"}'

ansible windows版本 ansible能用在windows上吗_运维_05

(四)Windows客户端防火墙设置

添加防火墙信任规则,允许5985端口通过

① 新建入站规则

打开防火墙高级配置,选择入站规则,在点击新建规则

ansible windows版本 ansible能用在windows上吗_Windows_06

②填写特定信任端口5985

ansible windows版本 ansible能用在windows上吗_Windows_07

③ 填写新建规则名称

ansible windows版本 ansible能用在windows上吗_ansible windows版本_08

(五) Ansible服务端配置和测试管理Windows服务器

① 添加windows客户端连接信息

编辑/etc/ansible/hosts,添加客户端主机信息

别名 ansible_host=192.168.3.159 ansible_ssh_user="Administrator" ansible_ssh_pass="XXX"
ansible_ssh_port=5985 ansible_connection="winrm" 
ansible_winrm_server_cert_validation=ignore

也可以不起别名:(那么下图windows组里就可以写ip了)

192.168.3.159 ansible_ssh_user="Administrator" ansible_ssh_pass="XXX"
ansible_ssh_port=5985 ansible_connection="winrm" 
ansible_winrm_server_cert_validation=ignore

ansible windows版本 ansible能用在windows上吗_运维_09

② ping测试windows客户主机组是否存活

ansible windows -m win_ping -u Administrator

ansible windows版本 ansible能用在windows上吗_Ansible_10


单独ping某个主机 (我在配置文件/etc/ansible/hosts中,给主机起了别名,就可以ping别名了)

ansible haha3 -m win_ping -u Administrator

ansible windows版本 ansible能用在windows上吗_Ansible_11

③ 创建文件夹

ansible windows -m win_file -a 'dest=C:/mikasa8 state=directory' -u Administrator

ansible windows版本 ansible能用在windows上吗_windows_12

查看C盘目录下已经有了 mikasa8 文件夹

ansible windows版本 ansible能用在windows上吗_windows_13

④ 传输文件到windows组中的所有主机

ansible windows -m win_copy -a 'src=/etc/hosts dest=c:\mikasa8\hosts.txt' -u Administrator

ansible windows版本 ansible能用在windows上吗_Ansible_14

⑤ 删除主机 haha1 中的某个目录

只想对某个主机生效的话,将windows改为ip或是自己定义的别名就可以了(如果定义了别名写ip没用)

ansible haha1 -m win_file -a 'dest=c:\mikasa8 state=absent' -u Administrator

ansible windows版本 ansible能用在windows上吗_Ansible_15

⑥ 批量远程执行远程执行 cmd 命令

ansible windows -m win_shell -a 'ipconfig' -u Administrator

⑦ 远程批量重启windows服务器

ansible windows -m win_reboot -u Administrator
ansible windows -m win_shell -a 'shutdown -r -t 0' -u Administrator

⑧ 其他常用命令

# 重启远程windows主机的服务
ansible windows -m win_service -a 'name=httpd state=restarted' -u Administrator

# 获取某个主机的信息:
ansible haha1 -m setup -u Administrator

# 给192.168.3.160(haha3)创建用户
ansible haha3 -m win_user -a "name=haha3 passwd=123456" -u Administrator

# 同时删除 windows 组中所有主机的某个文件
ansible windows -m win_file -a 'dest=c:\mikasa8\hosts.txt state=absent' -u Administrator

# 批量执行ps脚本:
ansible windows -m script -a "C://test.ps1" -u Administrator

# 批量修改密码
ansible windows -m win_user -a "name=Administrator update_password=always password="Admin123456""
-u Administrator

# 获取身份
ansible windows -m win_command -a "whoami" -u Administrator