Ansible 批量管理Windows Server服務器

Ansible批量管理Windows Server

        Ansible是一款爲類Unix系統開發的自由開源的配置和自動化工具,  它用Python寫成,相似於saltstack和Puppet,可是有一個不一樣和優勢是咱們不須要在節點中安裝任何客戶端 , 它使用SSH來和節點進行通訊  Ansible基於 Python paramiko 開發,分佈式,無需客戶端,輕量級,配置語法使用 YMAL 及 Jinja2模板語言,更強的遠程命令執行操做node

 

ansible命令參數python

anisble命令語法: ansible [-i 主機文件] [-f 批次] [組名] [-m 模塊名稱] [-a 模塊參數]linux

ansible詳細參數:web

 -v,–verbose           #  詳細模式,若是命令執行成功,輸出詳細的結果 (-vv -vvv -vvvv)redis

 -i PATH, -inventory=PATH      #  指定 host 文件的路徑,默認是在 /etc/ansible/hostsshell

 -f NUM,-forks=NUM         # NUM 是指定一個整數,默認是 5 ,指定 fork 開啓同步進程的個數。vim

 -m NAME,-module-name=NAME    #   指定使用的 module 名稱,默認使用 command模塊windows

 -a,MODULE_ARGS         # 指定 module 模塊的參數app

 -k,-ask-pass                 # 提示輸入 ssh 的密碼,而不是使用基於 ssh 的密鑰認證ssh

 -s, sudo                  # 指定使用 sudo 得到 root 權限

 -K,-ask-sudo-pass               # 提示輸入 sudo 密碼,與 -sudo 一塊兒使用

 -u USERNAME,-user=USERNAME          # 指定移動端的執行用戶

 -C,–check                 # 測試此命令執行會改變什麼內容,不會真正的去執行

ansible-doc詳細參數:

ansible-doc -l             # 列出全部的模塊列表

ansible-doc -s 模塊名    # 查看指定模塊的參數 

環境要求:Win Server的PowerShell版本須要知足3.0+ , Management Framework版本須要3.0+

使用get-host命令查看powershell版本

使用winrm enumerate winrm/config/listener命令查看狀態

使用以下命令配置winrm服務

winrm quickconfig

winrm set winrm/config/service/auth '@{Basic="true"}'

winrm set winrm/config/service '@{AllowUnencrypted="true"}'

Windows Server 2016 默認開啓以上操做,無需配置

發佈機必需要linux系統,上面須要安裝ansible pip 和python的相應模塊

yum install ansible epel-release python-pip paramiko PyYAML Jinja2 httplib2 six -y

 

編輯主機文件用於管理windows server

vim /etc/ansible/hosts

手動添加主機內容 , 配置文件是YAML格式,因此縮進很是嚴格,不要用tab,要使用空格.

主機模板有兩種

 1. 主機IP ansible_user="用戶名" ansible_password="密碼" ansible_port=5985 ansible_connection="winrm" ansible_winrm_server_cert_validation=ignore

all:

  children:

    windows: #主機組

      hosts:

        10.123.102.180: #主機

        10.123.102.181:

      vars:  #此變量只在windows主機組裏生效,windows2主機組須要從新定義

            ansible_user: Administrator

            ansible_password: Admin~123

            ansible_port: 5985

            ansible_connection: winrm

            ansible_winrm_transport: ntlm 

            ansible_winrm_server_cert_validation: ignore

    windows2:

      hosts:

        10.123.102.207:

        10.123.102.208:

      vars:

            ansible_user: Administrator

            ansible_password: Admin~123

            ansible_port: 5985

            ansible_connection: winrm

            ansible_winrm_transport: ntlm

            ansible_winrm_server_cert_validation: ignore

測試:

ansible 主機組或單個主機IP -i / etc/ansible/hosts -m win_ping

-i    #  指定 host 文件的路徑,默認是在 /etc/ansible/hosts 定義的主機清單寫在該文件下 , 那麼能夠不加 -i

    -m   #  指定使用的ping模塊

下面是windows經常使用模塊

 

獲取window主機信息:

ansible windows -m setup

 

執行ps腳本:

ansible windows -m script -a "E://test.ps1"

 

查看文件狀態:

ansible windows -m win_stat -a "path='C://Windows/win.ini'"

 

結束程序:

ansible windows-m raw -a "taskkill /F /IM QQ.exe /T"

 

若是window主機傳回來的中文是亂碼,則修改ansible控制機上的python編碼:

sed -i "s#tdout_buffer.append(stdout)#tdout_buffer.append(stdout.decode('gbk').encode('utf-8'))#g" /usr/lib/python2.6/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.6/site-packages/winrm/protocol.py

 

指定配置文件獲取win網卡信息

ansible -i win_hosts windows -m raw -a "ipconfig"

  

使用默認的配置文件獲取網卡信息

ansible windows -m raw -a "ipconfig"

  

拷貝文件到遠程Windows主機

ansible windows -m win_copy -a 'src=/etc/passwd dest=F:\file\passwd'

  

ansible windows -m win_copy -a "src=/usr/local/src/PayChannels20.35.zip dest=D:\Tomcat8630\webapps\PayChannels20.35.zip"

  

ansible windows -m win_copy -a "src=/usr/local/src/SupplierPay.zip dest=D:\SupplierPay.zip

  

將.zip解壓到遠程Windows主機,遠程主機上必須存在須要解壓的源文件

ansible windows -m win_unzip -a"creates=no src=D:\Tomcat8620\webapps\PayChannels-8630.zip dest=D:\Tomcat8620\webapps"

解壓到D盤:ansible windows -m win_unzip -a"creates=no src=D:\SupplierPay.zip dest=D:"

  

  

重啓遠程windows主機的服務

ansible windows -m win_service -a "name=Tomcat8630 state=restarted"

 

重啓node.js(.bat命令)

ansible windows -m win_command -a "chdir=D:\SupplierPay .\http_restart.bat"

 

執行win_command模塊命令

啓動redis

ansible windows -m win_command -a "chdir=D:\Redis server-start.bat "

 

ansible win -m win_command -a "chdir=C:\ a.bat "

ps:"chdir=C:\ a.bat " 以前有空格

 

刪除文件或者目錄

ansible windows -m win_file -a "dest=D:\Tomcat8630\log\ state=absent"

ansible windows -m win_file -a "dest=D:\Tomcat8630\logs\ state=absent"

  

建立用戶

ansible windows -m win_user -a "name=aa passwd=123456"

  

建立一個名叫user1的管理員用戶,要求可以遠程訪問

ansible windows -m win_user -a "name=user1 password=123 groups='Administrators,Remote Desktop Users'"

  

重啓的第一種方式

ansible windows -m win_shell -a "shutdown -r -t 1"

 

重啓的第二種方式

ansible windows -m win_reboot

 

 

獲取ip地址

ansible windows -m raw -a "ipconfig"

 

獲取身份

ansible windows -m win_command -a "whoami"

 

移動文件

ansible windows -m raw -a "cmd /c 'move /y D:\Ansible\product\DBFPlus.exe D:\Ansible\back\'"

 

移動文件目標端也須要制定到文件,而不能只制定到所在目錄位置

ansible windows -m raw -a "cmd /c 'move /y D:\Ansible\product D:\Ansible\back'"

移動文件夾源端和目標端目錄都不能帶反斜槓/。且將源的整個目錄移到目的端目錄裏。

 

建立文件夾

ansible windows -m raw -a "md d:\Ansible\justin"

 

刪除文件或目錄

ansible windows -m win_file -a "path=d:\Ansible\justin state=absent"

 

結束某程序

ansible windows -m raw -a "taskkill /F /IM snmp.exe /T"

 

文件傳輸

ansible windows -m win_copy -a 'src=/app/svn/127_Client/118919/zjcfg.zip dest=D:\soft\'

 

修改密碼

ansible windows -m win_user -a "name=Administrator update_password=always password="Admin~123""

相關文章
相關標籤/搜索