(一)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
② 更改powershell执行策略为remotesigned
set-executionpolicy remotesigned
③ 配置winrm service并启动服务
winrm quickconfig
④ 查看winrm service启动监听状态
我这里之前已经配置过了,如果第一次配记得这5步执行完之后再运行此命令检查一下是否开启
winrm enumerate winrm/config/listener
⑤ 修改winrm配置,启用远程连接认证
winrm set winrm/config/service/auth '@{Basic="true"}'
winrm set winrm/config/service '@{AllowUnencrypted="true"}'
(四)Windows客户端防火墙设置
添加防火墙信任规则,允许5985端口通过
① 新建入站规则
打开防火墙高级配置,选择入站规则,在点击新建规则
②填写特定信任端口5985
③ 填写新建规则名称
(五) 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
② ping测试windows客户主机组是否存活
ansible windows -m win_ping -u Administrator
单独ping某个主机 (我在配置文件/etc/ansible/hosts
中,给主机起了别名,就可以ping别名了)
ansible haha3 -m win_ping -u Administrator
③ 创建文件夹
ansible windows -m win_file -a 'dest=C:/mikasa8 state=directory' -u Administrator
查看C盘目录下已经有了 mikasa8 文件夹
④ 传输文件到windows组中的所有主机
ansible windows -m win_copy -a 'src=/etc/hosts dest=c:\mikasa8\hosts.txt' -u Administrator
⑤ 删除主机 haha1 中的某个目录
只想对某个主机生效的话,将windows改为ip或是自己定义的别名就可以了(如果定义了别名写ip没用)
ansible haha1 -m win_file -a 'dest=c:\mikasa8 state=absent' -u Administrator
⑥ 批量远程执行远程执行 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