Python自動化運維開發之paramiko(遠程批量管理服務器)

一:簡介

    paramiko是用python語言寫的一個模塊,遵循SSH2協議,支持以加密和認證的方式,進行遠程服務器的連接。它僅需要在本地上安裝相應的軟件(python以及PyCrypto),對遠程服務器沒有配置要求,對於連接多臺服務器,進行復雜的連接操作特別有幫助。

二:安裝方法

   安裝paramiko有兩個先決條件,python和另外一個名爲PyCrypto的模塊。唯一麻煩的就是安裝PyCrypto時,需要GCC庫編譯,如果沒有GCC庫會報錯,會導致PyCrypto以及paramiko無法安裝。在安裝過程中,遇到報錯,百度基本可以找到解決方法!

以下以32 位的windows 7爲例,說明paramiko的安裝過程

1:安裝python2.2以上版本都可以,我使用的是2.7,安裝過程略,並假設安裝目錄是D:\ProgramFiles\Python27

2:判斷本地是否安裝了GCC,並在PATH變量可以找到,如果沒有,可使用windows 版的GCC,即MinGW,下載地址:http://sourceforge.net/projects/mingw/,然後運行下載後的exe文件進行網絡安裝,假設目錄爲C:\mingw,在PATH中加入 C:\mingw\bin,並在D:\ProgramFiles\Python27\lib\distutils下新建一個名稱是distutils.cfg的文件,填入:

[build]
compiler=mingw32

3:下載PyCrypto ,安裝包見本文章附件

安裝PyCrypto:

·        解壓縮

·        dos下進入解壓縮的目錄,運行

D:\ProgramFiles\Python27\python.exe setup.py build
D:\ProgramFiles\Python27\python.exe setup.py install

·        安裝測試

  運行python.exe,在提示符下輸入:

import  Crypto

  如果沒有出現錯誤提示,說明Crypto安裝成功

4:下載paramiko,地址是http://www.lag.net/paramiko/,安裝包見本文章附件

·        解壓縮

·        dos下進入解壓縮的目錄,運行

D:\ProgramFiles\Python27\python.exe setup.py build
D:\ProgramFiles\Python27\python.exe setup.py install

·        測試paramiko

  運行python.exe,在提示符下輸入:

import  paramiko

  如果沒有出現錯誤提示,說明paramiko安裝成功,如下圖爲我電腦的輸出:

wKioL1eCETGQ2PY8AAM2CF3OdoE317.bmp

三:程序調用

'''
Python遠程登錄多臺Linux服務器並執行相關命令
'''
#!/usr/bin/python
import paramiko
port=22
IP="192.168.197.144"
IPs=["192.168.197.144","192.168.174.181"]
username="jtvpread"
usernames=["jtvpread","jtaepread"]
password="!QAZ2wsx"
passwords=["!QAZ2wsx","#EDC7ujm"]
#需要執行的命令
alarm_cmd="cat /cpic/jtvp/files/alarm/CPIC_P17.log|wc -l"
ctilog_cmd="cat /cpic/jtvp/vpclog/cti.log|grep 'returned value = 01'|wc -l"
port_3000_cmd="netstat -an|grep 3000|wc -l"
#創建ssh對象
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
#登陸各服務器執行指令
for i in range(len(IPs)):
    ssh.connect(IPs[i],port,usernames[i], passwords[i])
    stdin, stdout, stderr = ssh.exec_command(alarm_cmd) #搜索該告警日誌條數
    str=stdout.readlines()#返回結果爲一個列表,取出第一個結果即可
    print "告警日誌掃描:",IPs[i],":",str[0],

    stdin, stdout, stderr = ssh.exec_command(ctilog_cmd)#搜索關鍵字,如有則告警
    str=stdout.readlines()#返回結果爲一個列表,取出第一個結果即可
    print "隨路數據監控:",IPs[i],":",str[0],
    
    stdin, stdout, stderr = ssh.exec_command(port_3000_cmd)#搜索關鍵字,如有則告警
    str=stdout.readlines()#返回結果爲一個列表,取出第一個結果即可
    print "端口連接數檢查:",IPs[i],":",str[0],
ssh.close()
---------------------------------
輸出結果:
告警日誌掃描: 192.168.197.144 : 240
隨路數據監控: 192.168.197.144 : 0
端口連接數檢查:192.168.197.144 : 1
告警日誌掃描: 192.168.174.181 : 0
隨路數據監控: 192.168.174.181 : 0
端口連接數檢查:: 192.168.174.181 : 1
#從widnows端遠程下載linux服務器上的文件
t = paramiko.Transport((IP,port))
t.connect(username=username,password=password) 

sftp = paramiko.SFTPClient.from_transport(t)
remotepath='/cpic/jtvp/files/alarm/CPIC_P17.log'
localpath='c:/CPIC_P17.log'
sftp.get(remotepath, localpath)
print "--->下載成功"
t.close()
----------------------------------------
程序輸出:
--->下載成功
查看本地目錄,文件的確下載下來了。
#上傳文件到遠程服務器,
t= paramiko.Transport((IP,port))
t.connect(username=username,password=password) 
sftp = paramiko.SFTPClient.from_transport(t)
remotepath='/cpic/jtvp/files/alarm/spider.txt'
localpath='c:/spider.txt'
sftp.put(localpath,remotepath)
print "--->上傳成功"
t.close()
----------------------------------------
程序輸出:
--->上傳成功
遠程登錄Linux服務器,檢查是否上傳成功。

    通過上述的操作,批量管理Linux服務器變得非常簡單,爲後續的自動化運維提供了條件。可以自動化發佈,自動化系統信息收集,告警日誌收集,應用日誌掃描等等,再調用告警接口,觸發告警,讓運維更加輕鬆和高效!




  



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