1盾似、背景
目前行業(yè)中很多企業(yè)使用Windows Server, 由于管理的規(guī)模的增長(zhǎng)windows服務(wù)器已達(dá)到成百上千臺(tái)落午,比如所有服務(wù)器修改一個(gè)簡(jiǎn)單配置,就要重復(fù)操作耗費(fèi)很多時(shí)間和精力,為了減輕讓運(yùn)維人員管理壓力坷衍,可以用ansible來(lái)實(shí)現(xiàn)批量運(yùn)維管理windows服務(wù)器靶瘸,特意研究winrm服務(wù)(windows server下PowerShell的遠(yuǎn)程管理服務(wù))苫亦。
2、winrm服務(wù)配置過(guò)程
2.1 被管理對(duì)象的概況
由于目前Windows Server服務(wù)器版本為:Windows Server 2008R2怨咪、Windows Server 2012 R2屋剑、Windows Server 2016、Windows Server 2019诗眨。 據(jù)了解Windows Server 2008R2比較常用的版本唉匾。
2.2 配置winrm必須滿足以下5個(gè)條件
由于Windows Server 2008R2版本PowerShell 版本為2.0,需升級(jí)PowerShell版本3.0以上匠楚,建議升級(jí)到PowerShell 4.0+(被管理端版本過(guò)低巍膘,造成與管理端ansbile版本兼容性很差)。Windows Server 2008R2 需要執(zhí)行如下前4個(gè)步驟芋簿,而win2012r2峡懈,win2016,win2019系統(tǒng)原生開啟winrm服務(wù)与斤,只需執(zhí)行第5步肪康。
2.2.1 Management Framework版本需要3.0+ (微軟的框架3.0以上)
- Framework4.0: http://go.microsoft.com/fwlink/?linkid=247962
- Framework4.5: http://go.microsoft.com/fwlink/?LinkId=255995 【推薦版本】
2.2.2 底層通信基于PowerShell,其中版本3.0+ {通過(guò) Get-Host /$PSVersionTable命令查看powershell版本}幽告。
2.2.3 更改powershell策略為remotesigned梅鹦。(注意以管理員身份運(yùn)行)
- 查看策略命令:get-executionpolicy一般情況下默認(rèn)為Restricted
- 更改命令: set-executionpolicy remotesigned
2.2.4 開啟Windows遠(yuǎn)端管理服務(wù)(WS-Management,WinRM)(注意以管理員身份運(yùn)行)
手工執(zhí)行開啟htttp
1冗锁、查看服務(wù)狀態(tài):winrm enumerate winrm /config/listener {先查看狀態(tài)齐唆;如無(wú)返回信息,則是沒(méi)有啟動(dòng)}
2冻河、開啟 winrm service步驟如下:
-基礎(chǔ)配置: winrm quickconfig
-查看listener: winrm e winrm/config/listener
-配置auth:winrm set winrm/config/service/auth '@{Basic="true"}'
-配置加密方式為允許非加密:winrm set winrm/config/service '@{AllowUnencrypted="true"}'
腳本執(zhí)行開啟htttp/https 【推薦方式】
#下載開啟服務(wù)腳本:
https://github.com/ansible/ansible/blob/devel/examples/scripts/ConfigureRemotingForAnsible.ps1
#比如放在C:/Temp下箍邮,然后用CMD命令,切換到對(duì)應(yīng)的目錄
>cd C:/Temp
# 開啟WinRM服務(wù)
C:\Temp>powershell -ExecutionPolicy RemoteSigned .\ConfigureRemotingForAnsible.ps1 -SkipNetworkProfileCheck
2.2.5 管理端ansible安裝winrm模塊
使用ansible命令執(zhí)行為如下結(jié)果叨叙,請(qǐng)按照pywinrm模塊
ansible [IP] -m win_ping
[IP] | FAILED! => { "msg": "winrm or requests is not installed: No module named xmltodict" }
pywinrm模塊下載地址
安裝方法在這就不贅述了
注意事項(xiàng)
1.如果windows Server 2008R2 升級(jí)PowerShell版本之后涉及到需要重啟锭弊。
2.操作系統(tǒng)防火墻或外部防火墻是否對(duì)服務(wù)器5985/5986端口放行。
3.建議采用5986 https加密的方式進(jìn)行批量管理擂错。
3味滞、ansible批量管理
3.1 配置文件
----------------------------------hosts/inventory.ini配置文件--------------------------------
模式一:
[windows]
192.168.1.105 ansible_ssh_user="Administrator" ansible_ssh_pass="123456" ansible_ssh_port=5986 ansible_connection="winrm" ansible_winrm_server_cert_validation=ignore
模式二:
[testwin]
192.168.10.105
192.168.10.106
[testwin:vars]
ansible_user: Administrator
ansible_password: Admin~123
ansible_port: 5986
ansible_connection: winrm
ansible_winrm_transport: ntlm
ansible_winrm_server_cert_validation: ignore
3.2 windows常用模塊
win_acl (E) —設(shè)置文件/目錄屬主屬組權(quán)限;
win_copy—拷貝文件到遠(yuǎn)程Windows主機(jī);
win_file —?jiǎng)?chuàng)建剑鞍,刪除文件或目錄昨凡;
win_lineinfile—匹配替換文件內(nèi)容;
win_package (E) —安裝/卸載本地或網(wǎng)絡(luò)軟件包蚁署;
win_ping —Windows系統(tǒng)下的ping模塊便脊,常用來(lái)測(cè)試主機(jī)是否存活;
win_service—管理Windows Services服務(wù)光戈;
win_user —管理Windows本地用戶哪痰。
I、系統(tǒng)常規(guī)操作模塊
【主機(jī)是否存活】
ansible testwin -m win_ping
【獲取window主機(jī)信息】
ansible testwin -m setup
【重啟操作系統(tǒng)】
ansible testwin -m win_reboot
ansible testwin -m win_shell -a "shutdown -r -t 1"
【創(chuàng)建標(biāo)準(zhǔn)用戶】
ansible testwin -m win_user -a "name=test1 passwd=tes@123"
【創(chuàng)建管理員用戶,并且能遠(yuǎn)程訪問(wèn)】
ansible testwin -m win_user -a "name=test1 passwd=tes@123 group='Administrators,Remote Desktop Users'"
【修改用戶密碼】
ansible windows -m win_user -a "name=Administrator update_password=always password="Admin~123""
【結(jié)束程序】
ansible testwin -m raw -a "taskkill /F /IM QQ.exe /T"
II久妆、命令晌杰、腳本和服務(wù)操作模塊
【獲取身份】
ansible windows -m win_command -a "whoami"
【獲取windows網(wǎng)卡信息】
ansible testwin -m win_command -a "ipconfig"
【啟動(dòng)redis腳本】
ansible testwin -m win_command -a "chdir=C:\Redis server-start.bat "
【執(zhí)行ps腳本】
ansible testwin -m script -a "E://test.ps1"
【重啟windows主機(jī)服務(wù)】
ansible windowstest -m win_service -a "name=nscp state=restarted" //重啟監(jiān)控客戶端程序
III、文件模塊操作
【查看文件狀態(tài)】
ansible testwin -m win_stat -a "path='C://Windows/win.ini'"
【創(chuàng)建文件夾】
ansible testwin -m win_file -a 'dest=c:\config_dir state=directory'
ansible testwin -m raw -a "mkdir c:\config_dir"
【復(fù)制拷貝文件到windows】
ansible testwin -m win_copy -a "src=/etc/passwd dest=E:filepasswd"
ansible testwin -m win_copy -a 'src=/opt/telnet-0.17-64.el7.x86_64.rpm dest=E:\config_dir\'
【刪除windows文件或目錄】
ansible testwin -m win_file -a "path=E:\\\config_dir\\\telnet-0.17-64.el7.x86_64.rpm state=absent"
ansible testwin -m win_file -a "dest=D:\Tomcat8630\logs\ state=absent"
ansible windows -m raw -a "cmd /c ’move /y E:\test E:\config_dir\"
【window上解壓文件到指定目錄下】
ansible testwin -m win_unzip -a"creates=no src=D:\web.zip dest=D:\app\webapps"
本篇技術(shù)文章僅供參考
有更多技術(shù)干貨請(qǐng)關(guān)注微信公眾號(hào) “壹周技藝”