香港云主机最佳企业级服务商!

ADSL拨号VPS包含了中国大陆(联通,移动,电信,)

中国香港,国外拨号VPS。

当前位置:云主机 > python >

电信ADSL拨号VPS
联通ADSL拨号VPS
移动ADSL拨号VPS

python通过ssh-powershell监控windows的方法


时间:2021-12-08 14:51 作者:admin610456


本文实例讲述了python/' target='_blank'>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()

希望本文所述对大家的Python程序设计有所帮助。

(责任编辑:admin)






帮助中心
会员注册
找回密码
新闻中心
快捷通道
域名登录面板
虚机登录面板
云主机登录面板
关于我们
关于我们
联系我们
联系方式

售前咨询:17830004266(重庆移动)

企业QQ:383546523

《中华人民共和国工业和信息化部》 编号:ICP备00012341号

Copyright © 2002 -2018 香港云主机 版权所有
声明:香港云主机品牌标志、品牌吉祥物均已注册商标,版权所有,窃用必究

云官方微信

在线客服

  • 企业QQ: 点击这里给我发消息
  • 技术支持:383546523

  • 公司总台电话:17830004266(重庆移动)
  • 售前咨询热线:17830004266(重庆移动)