国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

python通過ssh-powershell監控windows的方法

2020-02-23 01:30:58
字體:
來源:轉載
供稿:網友

本文實例講述了python通過ssh-powershell監控windows的方法。分享給大家供大家參考。具體分析如下:

對于服務器的監控來說,監控linux不管是自己動手寫腳本還是用一些開源的工具比如nagios,zenoss什么的。但畢竟還是有些公司有windows做服務器的,相對linux來說,windows沒有方便的shell,cmd下提供的命令對于監控來說遠遠沒有linux方便。但是現在windows上如果安裝了powershell(win7,2008自帶),就比以前方便多了,linux上的命令基本都能在powershell里執行,比如查看進程還是ps.

自己封裝了一個python通過ssh(通過pexpect模塊)調用powershell的腳本,里面包快ps,netstat,ping檢測,查看硬盤,cpu信息和負載,內存信息。通過創建ssh_win32類對象,然后調用它的方法,返回的都是解析好的python對象。

ssh_powershell.py:

#! /usr/bin/env python# -*- coding: utf-8 -*-import refrom pexpect import *class ssh_win32:  def __init__(self, user, host, password=None,systemroot='c',papath='',timeout=5,verbose=0):    self.user = user#監控機器的username    self.host = host#監控機器的ip    self.verbose = verbose    self.password = password#密碼    self.timeout=timeout#執行命令的timeout    self.systemroot=systemroot#windows 所安裝的盤符    if not papath:#powershell.exe的路徑self.powershell_path=self.systemroot+':/WINDOWS/system32/WindowsPowerShell/v1.0/powershell.exe '    self.key = [      'authenticity',      'assword:',      '@@@@@@@@@@@@',      'Command not found.',      EOF,      ]    self.f = open('ssh.out','w')  def ssh(self,command):    cmd='ssh -l %s %s %s'%(self.user,self.host,command)    print "cmd:",cmd    con=spawn(cmd,timeout=self.timeout)    seen=con.expect(self.key)    if seen == 0:      con.sendline('yes')      seen = con.expect(self.key)    if seen == 1:  #    if not self.password:  #      self.password = getpass.getpass('Remote password: ')      con.sendline(self.password)      try:        res=con.read()      except Exception ,e:        res=con.before#      print "res:",res    return res  def ssh_disk(self):    cmd=self.powershell_path+"Get-WmiObject win32_logicaldisk"    res=self.ssh(cmd)    disk={}    if res:      res=res.split('No such file or directory')[-1].replace('/r','').split('/n')      res=[c for c in res if c]#      print 'res:',res    predisk='C'    for d in res:#      print d      key,value=d.split(':',1)#      print d#      print 'key:',key,'value:',value      key=key.strip()      value=value.strip()      if key=='DeviceID' and value not in disk.keys():        predisk=value        disk[predisk]={}        disk[predisk][key]=value      else:        if key in ['FreeSpace','Size']:          if value:            value=int(value)/1024/1024/1024        disk[predisk][key]=value    for d in disk.keys():      if disk[d]['DriveType']!='3':        disk.pop(d)#    print 'disk:',disk    return disk  def ssh_cpu(self):     cmd=self.powershell_path+'gwmi -computername localhost win32_Processor'    res=self.ssh(cmd)    res=res.split('No such file or directory')[-1].replace('/r','').split('/n')    res=[r for r in res if r]#    print res    cpu={}    for i in res:#      print '='*10#      print i      i=i.split(':')    #  print i      if len(i)==2:        key,value=i      else:        continue      key=key.strip()      value=value.strip()#      print 'key:',key#      print 'value:',value      cpu[key]=value    return cpu  def ssh_memory(self):    totalmem=self.powershell_path+'Get-WmiObject win32_OperatingSystem TotalVisibleMemorySize'    freemem=self.powershell_path+'Get-WmiObject win32_OperatingSystem FreePhysicalMemory'    memory={}    for cmd in [totalmem,freemem]:      res=self.ssh(cmd)      if 'Win32_OperatingSystem' in res:        res=res=res.replace('/r','').split('/n')        res=[m for m in res if m][-1]        print 'res:',res        key,value=res.split(':')        key=key.strip()        value=value.strip()        memory[key]=value      else:        print "not return data"        return None    return memory  def ssh_ping(self,host):    cmd='ping -n 1 %s'%host    patt=r'.+?(/d*)% loss.*'    res=self.ssh(cmd).replace('/r','').replace('/n','')    print res    m=re.match(patt,res)    if m:      lost_percent=m.group(1)      print 'lost_percent:',lost_percent      return int(lost_percent)    else:      return None  def ssh_ps(self):    cmd=self.powershell_path+'ps'    res=self.ssh(cmd)    ps=[]    if '-- -----------' in res:      res=res.replace('/r','').split('-- -----------')[-1].split('/n')      res=[d for d in res if d.strip()]      for p in res:        process={}        row=[para for para in p.split(' ') if para.strip()]        process['handles']=row[0]        process['npm']=row[1]        process['pm']=row[2]        process['ws']=row[3]        process['vm']=row[4]        process['cpu']=row[5]        process['id']=row[6]        process['process_name']=row[-1]        ps.append(process)#      print ps      return ps    else:      return None  def ssh_netstat(self):    cmd='netstat -ao'    res=self.ssh(cmd)    netstat=[]    if 'PID' in res:      res=res.replace('/r','').split('PID')[-1].split('/n')      res=[d for d in res if d.strip()]      for p in res:        process={}        row=[para for para in p.split(' ') if para.strip()]        process['proto']=row[0]        process['local_address']=row[1]        process['foreign_address']=row[2]        process['state']=row[3]        process['pid']=row[-1]        netstat.append(process)#      print netstat      return netstat    else:      return Noneif __name__ == "__main__":cmd="c:/WINDOWS/system32/WindowsPowerShell/v1.0/powershell.exe ps"  user='admin'  host='192.168.123.105'  password='123456'  ssh=ssh_win32(user,host,password,systemroot='c',timeout=5)#  print ssh.ssh_cpu()#  print "/n/n/n/n"#  print ssh.ssh_disk()#  print "/n/n/n/n"#  print ssh.ssh_memory()#  print ssh.ssh_ping(host)#  print ssh.ssh_ps()#  print ssh.ssh_netstat()            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 蓬安县| 合江县| 北海市| 永济市| 广丰县| 玉屏| 宜州市| 汤阴县| 麻栗坡县| 堆龙德庆县| 肥城市| 常宁市| 巴南区| 保德县| 阳城县| 上栗县| 牙克石市| 高邮市| 和田县| 怀化市| 资溪县| 渭南市| 偃师市| 峨眉山市| 阜宁县| 祁东县| 西吉县| 三河市| 宜州市| 海阳市| 昂仁县| 循化| 扎鲁特旗| 嘉鱼县| 简阳市| 南乐县| 马关县| 黑龙江省| 纳雍县| 西充县| 盐源县|