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服务器
管理员权限打开powershell终端,按如下步骤执行命令:
get-executionpolicy
set-executionpolicy remotesigned
winrm quickconfig
我这里之前已经配置过了,如果第一次配记得这5步执行完之后再运行此命令检查一下是否开启
winrm enumerate winrm/config/listener
winrm set winrm/config/service/auth '@{Basic="true"}'
winrm set winrm/config/service '@{AllowUnencrypted="true"}'
添加防火墙信任规则,允许5985端口通过
编辑/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 -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
ansible windows -m win_copy -a 'src=/etc/hosts dest=c:\mikasa8\hosts.txt' -u Administrator
只想对某个主机生效的话,将windows改为ip或是自己定义的别名就可以了(如果定义了别名写ip没用)
ansible haha1 -m win_file -a 'dest=c:\mikasa8 state=absent' -u Administrator
ansible windows -m win_shell -a 'ipconfig' -u Administrator
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