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主机那样的灵活,那样的随心所欲。
posted @   帅帅啊  阅读(280)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 葡萄城 AI 搜索升级:DeepSeek 加持,客户体验更智能
· 什么是nginx的强缓存和协商缓存
· 一文读懂知识蒸馏
点击右上角即可分享
微信分享提示