shell實現批量在多臺windows服務器上執行同一命令並獲取返回結果

1.    需求

在對windows服務器的運維當中,如果要查看當前的主機名、資源使用、軟件安裝情況等,大家是怎麼操作呢,是登進去鼠標挨着點擊查看,還是通過命令呢?貌似命令的方法比較專業一點。但是,如果要查看50臺、100臺甚至更多服務器的這些信息,好像就不這麼簡單了。

有沒有想過,敲一條命令,十幾秒鐘,就可以查看多臺windows服務器的主機名、資源使用、軟件安裝情況等信息呢;或者還是通過一條命令,就可以啓動或者停止Nwindows服務器的系統服務、重啓\關機、修改註冊表等等,你能想到的大部分操作,在經過前期簡單部署後,以後只通過一條命令,就可以實現同時對多臺windows服務器的管理。下面就把這個設想實現。

 

2.    實現原理及展示

2.1原理

通過我在shell下寫的腳本程序,利用Python中的paramiko模塊,通過ssh協議驗證windows的登錄信息,然後調用windowsPowerShell來實現命令的執行。目前測試過windows server2008R2 2012R2 服務器,可以正常執行。

2.2展示2個簡單例子:執行腳本後,輸入windowsPowerShell命令即可

查詢主機名

1.jpg

查看CPU使用率

2.jpg

只要是PowerShell支持的,都可以批量執行了。我這裏只是2臺測試,當然100臺也一樣出結果。

3.    準備

3.1   一臺Centos系統:   我使用的虛擬機centos6.6 用來執行腳本,然後執行windows命令。需要有python(一般已經安裝了)

3.2   軟件:freesshd        官網上下載即可,主要是在被管理的windows服務器上安裝,實現ssh驗證

3.3  軟件:SecureCRT或者Xshell   用來連接Centos虛擬機

3.4  可選軟件:WinSCP     如果需要分發文件功能的話,windows服務器上還要需要安裝此軟件

 

4.    實現步驟及示例

4.1   windows服務器安裝freesshdwinscp(winscp可選)  測試中我使用了2windows虛擬機

Winscpfreesshd的安裝直接默認下一步即可;

Winscp安裝完成後先在powershell裏面執行命令,緩存主機密鑰

cd 'C:\Program Files (x86)\WinSCP\' ; ./winscp.exe /console /command 'option batch continue' 'option confirm off' 'open sftp://root:root密碼@centos主機IP:centos主機ssh端口

執行後按Y即可,如圖:

3.png

freesshd安裝完成後需要稍作設置,如圖:

4.png

5.png

6.png

7.png

第一次運行freesshd如圖

8.png

然後點擊右下角的freesshd圖標進行相關設置,SSH選項卡中,將Command shell設置成C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe如圖:

9.png

Users選項卡中點擊“Add…

10.png

在彈出的窗口加入windows服務器的管理員賬號,然後將Shell打上√ 如圖:

11.png

最後可選擇是否在Automatic updates裏面關閉自動更新,我一般選擇關閉

12.png

設置完成後,在開始-運行 裏面鍵入services.mscfreesshd服務重啓一下

13.png

Sshdwindows服務器上設置完成,可以通過telnet ssh端口的方式測試到windows的sshd服務是否正常,如telnet X.X.X.X 22

4.2   安全設置(可選):各windows服務器上配置ipsec只允許我們的centos服務器連接sshd22端口,這樣就避免了其他未授權的ssh連接,建議設置(不設置或者會設置的可跳過此步驟下列內容)。

       開始-運行 裏面鍵入gpedit.msc進入 Windows設置-安全設置-IP安全策略,在本地計算機  創建策略即可:

            先設置允許的主機,這裏我們需要把centos主機加入允許,如部分截圖,沒截圖的步驟默認點擊“下一步”:

14.png

15.png

16.png

17.png

18.png

19.png

20.png

21.png

22.png

23.png

24.png

完成後“確定”即可,然後開始建立一條拒絕任何地址(源地址:任何IP地址)到windows本機地址sshd端口的策略,如圖:

25.png

26.png

27.png

28.png

29.png

30.png

確定後安全設置完成,然後分配策略使其生效,如圖:

31.png

如果啓用了防火牆的話,還需要在防火牆裏面設置允許freesshd程序通過防火牆,設置完成後可以在centos服務器上telnet X.X.X.Xwindows服務器IP 22 的方式來測試連接是否OK,如圖測試正常:

32.png

 

4.3腳本準備

1)在本文後面下載shell腳本

2)在centos服務器中上傳腳本,命令rz然後選擇腳本上傳即可(沒有rz命令的通過yum install -y lrzsz命令安裝),如圖:

33.png

3vim run_win_same_cmd.sh命令修改腳本,將後續要管理的各個服務器IP、用戶名、密碼加入其中,如圖格式加入,然後保存即可。

 34.png

注意ip,user,pwd的順序是一一對應的,對應錯誤的話是無法通過驗證的:

35.png

   也可在windows中修改好了再上傳到centos服務器,但是要注意最好運行下dos2unix命令轉換一下。

 

4.4運行命令

1)在centos服務器中執行sh run_win_same_cmd.sh即可(注意腳本路徑正確),如圖,運行後提示選擇,我們選擇 1.批量運行windows命令 ,回車後提示輸入windows命令,這裏我們用一個簡單的命令hostname來查看,如圖:

36.jpg

再來個複雜點的命令(當然這種有點長的命令直接複製黏貼過來就行了),我們需要查看N臺服務器各自的磁盤剩餘空間:

37.png

不熟悉powershell命令的話可以參考下面鏈接裏面一些常用的Powershell運維命令,當然,更多的強大命令就根據自己需要去發現了。

鏈接:Windows PowerShell運維人員常用命令收集整理

2)如果需要分發文件或者軟件的話,可以在運行腳本後,選擇2.批量分發文件到windows ,可以實現把文件批量分發到各個windows服務器,如圖:

38.png

windows服務器上查看文件已經複製過來了

39.png

5.    腳本下載地址


  




 


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章