ansible控制管理Windows主机
ansible控制管理Windows主机
环境介绍
控制端: centos 7.5 Python 2.7 ansible 2.4.2.0 受控制端: Windows server 2012 R2
1、ansible服务器端的配置
服务端一定是LINUX的服务器,实验采用了CENTOS7,先安装python的一些模块
安装pip
首先安装EPEL yum -y install epel-release 然后再安装pip yum -y install python-pip
配置pip源
首先到~/.config/.pip目录下新建(或修改)pip.conf文件。 然后在文件中输入如下信息: [global] index-url = http://mirrors.aliyun.com/pypi/simple/
安装pywinrm及依赖包
pip install pywinrm paramiko PyYAML Jinja2 httplib2 six pywinrm下载地址 https://files.pythonhosted.org/packages/73/ad/ec5951e3b489c44f41cabc015bb64dea901f8ec805c825fe4b8d86d27fb7/pywinrm-0.2.1-py2.py3-none-any.whl https://files.pythonhosted.org/packages/74/a7/1093100bcff3857035798f55b34640befb3179da38001e181995f4fdc1da/pywinrm-0.2.1.tar.gz
修改/etc/ansible/hosts,添加以下内容
[windows] 10.0.0.66 [windows:vars] ansible_connection=winrm ansible_user=administrator ansible_ssh_pass=密码 ansible_ssh_port=5985 ansible_winrm_server_cert_validation=ignore ansible_winrm_transport=ntlm
2、配置WINDOWS
如果需要升级.NET4.5和POWERSHELL4.0
https://download.microsoft.com/download/B/A/4/BA4A7E71-2906-4B2D-A0E1-80CF16844F5F/dotNetFx45_Full_setup.exe https://download.microsoft.com/download/3/D/6/3D61D262-8549-4769-A660-230B67E15B25/Windows6.1-KB2819745-x64-MultiPkg.msu 安装好以后重启
注意:在使用Windows7测试的时候,遇到了升级不上去的问题,经过了好长时间的测试,终于得以解决。Windows7自带powershell2.0 ,需要先升级 .net,将.net升级到4.5.2,然后去升级powershell,我是一个版本一个版本进行升级的,因为我遇到了直接升级升级不上去的问题。2.0升级到了3.0一直升级到5.1,下面是我升级参考的几个文档。假如你的系统不是正版系统,也是升级不上去的,会提示 此更新不适用于您的计算机 ,被这个问题困扰了3天。
NDP452-KB2901954-Web.exe .net升级到4.5.2的程序
https://cloud.tencent.com/developer/article/1032275 升级到3.0
https://blog.csdn.net/I_am_wangbo/article/details/50033473 升级到4.0
https://www.cnblogs.com/xueweisuoyong/p/11915554.html 升级到5.1,可以直接运行mus文件,不需要执行ps1文件。
升级powershell所用到的软件包,可以自己到百度云下载。 链接:https://pan.baidu.com/s/1P4rWxneX4r_gSrBnmBMpNA 提取码:dp58
打开powershell,执行命令
查看当前powershell版本
1. 查看powershell执行策略
get-executionpolicy
2. 更改powershell执行策略为remotesigned
set-executionpolicy remotesigned
执行策略更改
执行策略可帮助你防止执行不信任的脚本。更改执行策略可能会产生安全风险,如 http://go.microsoft.com/fwl
中的 about_Execution_Policies 帮助主题所述。是否要更改执行策略?
[Y] 是(Y) [N] 否(N) [S] 挂起(S) [?] 帮助 (默认值为“Y”): y
在计算机上运行 WinRM 服务
PS C:\Users\Administrator> winrm quickconfig
查看winrm service启动监听状态
PS C:\Users\Administrator> winrm enumerate winrm/config/listener Listener Address = * Transport = HTTP Port = 5985 Hostname Enabled = true URLPrefix = wsman CertificateThumbprint ListeningOn = 10.0.0.66, 127.0.0.1, ::1, fe80::5efe:10.0.0.66%14, fe80::19df:c8eb:579c:24ab%12dfe6
修改winrm配置,启用远程连接认证
PS C:\Users\Administrator> winrm set winrm/config/service/auth '@{Basic="true"}' Auth Basic = true Kerberos = true Negotiate = true Certificate = false CredSSP = false CbtHardeningLevel = Relaxed
修改winrm配置,启用远程连接认证
PS C:\Users\Administrator> 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 = false Kerberos = true Negotiate = true Certificate = false CredSSP = false CbtHardeningLevel = Relaxed DefaultPorts HTTP = 5985 HTTPS = 5986 IPv4Filter = * IPv6Filter = * EnableCompatibilityHttpListener = false EnableCompatibilityHttpsListener = false CertificateThumbprint AllowRemoteAccess = true
**注意后面的命令是配置允许非加密方式,不改的话可能会出现错误**
Windows客户端防火墙配置
通过命令winrm enumerate winrm/config/listener检查winrm服务正确启动之后 添加防火墙信任规则,允许5985端口通过 打开防火墙高级配置,选择入站规则,在点击新建规则
填写信任端口5985
填写新建规则名称
Ansible服务端配置和测试管理Windows服务器(服务端操作)
[root@zabbix ansible]# ansible winds -m win_ping 10.0.0.66 | SUCCESS => { "changed": false, "ping": "pong" } 或者 [root@zabbix ansible]# ansible 10.0.0.66 -m raw -a 'ipconfig' 10.0.0.66 | SUCCESS | rc=0 >> Windows IP Configuration Ethernet adapter Ethernet0: Connection-specific DNS Suffix . : Link-local IPv6 Address . . . . . : fe80::19df:c8eb:579c:24ab%12 IPv4 Address. . . . . . . . . . . : 10.0.0.66 Subnet Mask . . . . . . . . . . . : 255.255.255.0 Default Gateway . . . . . . . . . : 10.0.0.254 Tunnel adapter isatap.{D8F1F515-5978-4B62-AE70-0028D47798EA}: Media State . . . . . . . . . . . : Media disconnected Connection-specific DNS Suffix . :
拷贝文件
[root@zabbix ansible]# ansible winds -m win_copy -a "src=/etc/passwd dest=c:\passwd" 10.0.0.66 | SUCCESS => { "changed": true, "checksum": "6d72ea23476284b9df8120626496e186ca73a96e", "dest": "c:\\passwd", "operation": "file_copy", "original_basename": "passwd", "size": 1260, "src": "/etc/passwd" }
进行查看
文件已拷贝,配置成功了
遇到问题
1.下载pywinrm时,失败,找不到资源
重新配置pip源,将pip的国外源,就改为国内原。在上文中已修改完成
2.获取到的数据中文乱码
修改winrm字符集
sed -i "s#tdout_buffer.append(stdout)#tdout_buffer.append(stdout.decode('gbk').encode('utf-8'))#g" /usr/lib/python2.7/site-packages/winrm/protocol.py sed -i "s#stderr_buffer.append(stderr)#stderr_buffer.append(stderr.decode('gbk').encode('utf-8'))#g" /usr/lib/python2.7/site-packages/winrm/protocol.py
我现实配置完该字符集后,报错gbk无法转换,一直未解决,但网上说这种方法是没问题的,后来我是用另一种参数去取ipconfig的值,未报错,也就没有再去研究什么原因。
自我感觉winrm这个模块限制比较多,去管理winds主机,有比较多的格式,还是需要去注意的,没有像管理Linux主机那样的灵活,那样的随心所欲。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 葡萄城 AI 搜索升级:DeepSeek 加持,客户体验更智能
· 什么是nginx的强缓存和协商缓存
· 一文读懂知识蒸馏