python

来源:互联网 发布:微信淘宝优惠券骗局 编辑:程序博客网 时间:2024/05/14 04:00

# -*- coding: UTF-8 -*-
"""
"""

import logging
import traceback
import time
import paramiko

#############################
SUT_IPADDR ='129.24.33.30'
SUT_USERNAME = 'admin'
SUT_PWD = 'Admin@storage'
SSH_LOG_PATH = 'ommssh.log'
##################

class Ommssh:
    __prv_ipaddr = '127.0.0.1'
    __prv_port = 22
    __prv_username = 'admin'
    __prv_pwd = 'Admin@storage'
    __prv_rbuffernum = 1024*1024
    __prv_timeout = 300
    __prv_cmdtimeout = 600
    __prv_clichannel = ''
    __prv_diagnosechannel = ''
    __prv_linuxoschannel = ''
    __prv_ttywide = 80
    __prv_ttyhight =100
    __prv_logpath = 'ommssh.log'
    def __init__(self,ipaddr=SUT_IPADDR,username=SUT_USERNAME,
                 pwd=SUT_PWD,logpath=SSH_LOG_PATH):
        """
        ssh鍙傛暟鍒濆鍖?
        ipaddr:鐧婚檰瀵硅薄鐨勫湴鍧€
        username锛氱敤鎴峰悕
        pwd:瀵嗙爜
        logpath锛氭棩蹇楄矾寰?
        """
        if (''!=ipaddr):
            self.__prv_ipaddr = ipaddr
        if (''!=username):
            self.__prv_username = username
        if (''!=pwd):
            self.__prv_pwd = pwd
        if (''!=logpath):
            self.__prv_logpath = logpath
            paramiko.util.log_to_file(self.__prv_logpath)     
           
    def __chksendstats(self,chan):
        """
        鍙戦€佺姸鎬佹鏌?
        """
        sendcount=0
        while ((False == chan.send_ready())and(sendcount <= self.__prv_timeout)):
            time.sleep(1)
            sendcount =  sendcount + 1      
        if (self.__prv_timeout == sendcount):
            return False
        else:
            return True
           
    def __chkrecvstats(self,chan):
        """
        閫氶亾鎺ユ敹鐘舵€佹娴?
        """
        recvcount=0
        while ((False ==chan.recv_ready())and(recvcount <= self.__prv_timeout)):
            time.sleep(1)
            recvcount =  recvcount + 1   
        if (self.__prv_timeout == recvcount):
            return False
        else:
            return True        
            
    def opencli(self):
        """
        浠li妯″紡鐧婚檰XVE鐨勬帶鍒跺櫒
        骞惰缃€氶亾鐨勮秴鏃舵椂闂?
        """
       
        try:
            s = paramiko.Transport((self.__prv_ipaddr, self.__prv_port))
            s.connect(username=self.__prv_username, password=self.__prv_pwd)
            chan = s.open_session()  
            chan.get_pty(height=self.__prv_ttyhight)                
            chan.invoke_shell()
            chan.setblocking(0)
        except Exception,e:
            print e
            logging.error("Catch an exception:\n%s", traceback.format_exc())
        if (True == self.__chksendstats(chan)):
            chan.sendall('change cli timeout=100000\r')
        else:
            return (-1,'')   
        if (True == self.__chkrecvstats(chan)):
            str = chan.recv(self.__prv_rbuffernum)    
            print str
        else:
            return (-1,'')   
        if ( -1 == str.find("Command executed successfully.\r\nadmin:/>")):
            return (-1,'')
        else:
            self.__prv_clichannel =chan
            return (0,chan)
       
    def openlinuxcli(self):
        """
        浠li鐨勬柟寮忕櫥闄嗙劧鍚庡垏鎹㈠埌OS妯″紡
        """
        try:
            s = paramiko.Transport((self.__prv_ipaddr, self.__prv_port))
            s.connect(username=self.__prv_username, password=self.__prv_pwd)
            chan = s.open_session()  
            chan.get_pty(height=self.__prv_ttyhight)                
            chan.invoke_shell()
            chan.setblocking(0)
        except Exception,e:
            print e
            logging.error("Catch an exception:\n%s", traceback.format_exc())
        if (True == self.__chksendstats(chan)):
            chan.sendall('change cli timeout=100000\r')
        else:
            return (-1,'')   
        if (True == self.__chkrecvstats(chan)):
            str = chan.recv(self.__prv_rbuffernum)    
            print str
        else:
            return (-1,'')   
        if ( -1 == str.find("Command executed successfully.\r\nadmin:/>")):
            return (-1,'')
        else:
            chan.sendall('exit\r')
        if (True == self.__chkrecvstats(chan)):
            str = chan.recv(self.__prv_rbuffernum)    
            print str
        else:
            return (-1,'')
        if ( -1 == str.find("Are you sure to exit?(y/n):")):
            return (-1,'')
        else:
            chan.sendall('y\r')
        if (True == self.__chkrecvstats(chan)):
            str = chan.recv(self.__prv_rbuffernum)    
            print str
        else:
            return (-1,'')
        if ( -1 == str.find("Storage:~ #")):
            return (-1,'')
        else:
            self.__prv_linuxoschannel =chan
            return (0,chan)
           
    def opendiagnose(self):
        """
        鍏堢櫥闄嗗埌cli妯″紡鐒跺悗鍒囨崲鍒皁s妯″紡鏈€鍚庡垏鎹㈠埌diagnose妯″紡
        """
        try:
            s = paramiko.Transport((self.__prv_ipaddr, self.__prv_port))
            s.connect(username=self.__prv_username, password=self.__prv_pwd)
            chan = s.open_session()  
            chan.get_pty(height=self.__prv_ttyhight)                
            chan.invoke_shell()
            chan.setblocking(0)
        except Exception,e:
            print e
            logging.error("Catch an exception:\n%s", traceback.format_exc())
        if (True == self.__chksendstats(chan)):
            chan.sendall('change cli timeout=100000\r')
        else:
            return (-1,'')   
        if (True == self.__chkrecvstats(chan)):
            str = chan.recv(self.__prv_rbuffernum)    
            print str
        else:
            return (-1,'')   
        if ( -1 == str.find("Command executed successfully.\r\nadmin:/>")):
            return (-1,'')
        else:
            chan.sendall('exit\r')
        if (True == self.__chkrecvstats(chan)):
            str = chan.recv(self.__prv_rbuffernum)    
            print str
        else:
            return (-1,'')
        if ( -1 == str.find("Are you sure to exit?(y/n):")):
            return (-1,'')
        else:
            chan.sendall('y\r')
        if (True == self.__chkrecvstats(chan)):
            str = chan.recv(self.__prv_rbuffernum)    
            print str
        else:
            return (-1,'')
        if ( -1 == str.find("Storage:~ #")):
            return (-1,'')
        else:
            chan.sendall('diagnose\r')
        if (True == self.__chkrecvstats(chan)):
            str = chan.recv(self.__prv_rbuffernum)    
            print str
        else:
            return (-1,'')
        if ( -1 == str.find("admin:/diagnose>")):
            return (-1,'')
        else:
            self.__prv_diagnosechannel = chan
            return (0,chan)
       
    def ssh_cli_docmd(self,cmd=''):
        """
        鎵цcli鎴栬€卻hell鍛戒护锛岃繑鍥炴姤鏂囦互瀛楃涓茶繑鍥烇紝璋冪敤鑰呰嚜宸辫В鏋?
        """
        if ((''==cmd)or ('' == self.__prv_clichannel) ):
            return (0,'')
        elif(True == self.__chksendstats(self.__prv_clichannel)):
            self.__prv_clichannel.sendall(cmd+'\r\n')
        else:
            return (-1,'') 
        if (True == self.__chkrecvstats(self.__prv_clichannel)):
            str = self.__prv_clichannel.recv(self.__prv_rbuffernum)    
            print str
            strlst= str.splitlines()
            del strlst[:2]
            return (0,strlst)
        else:
            return (-1,'')
       
    def ssh_linux_docmd(self,cmd=''):
        if ((''==cmd)or ('' == self.__prv_linuxoschannel) ):
            return (0,'')
        elif(True == self.__chksendstats(self.__prv_linuxoschannel)):
            self.__prv_linuxoschannel.sendall(cmd+'\r\n')
        else:
            return (-1,'') 
        if (True == self.__chkrecvstats(self.__prv_linuxoschannel)):
            str = self.__prv_linuxoschannel.recv(self.__prv_rbuffernum)    
            print str
            strlst= str.splitlines()
            del strlst[:2]
            return (0,strlst)
        else:
            return (-1,'')
       
    def ssh_diagnose_docmd(self,cmd=''):
        if ((''==cmd)or ('' == self.__prv_diagnosechannel) ):
            return (0,'')
        elif(True == self.__chksendstats(self.__prv_diagnosechannel)):
            self.__prv_diagnosechannel.sendall(cmd+'\r')
        else:
            return (-1,'') 
        if (True == self.__chkrecvstats(self.__prv_diagnosechannel)):
            str = self.__prv_diagnosechannel.recv(self.__prv_rbuffernum)    
#            print str
            strlst= str.splitlines()
            del strlst[:1]
            return (0,strlst)
        else:
            return (-1,'')              
    
    def shutdown_cli_channel(self):
        if(''!= self.__prv_clichannel):
            self.__prv_clichannel.sendall('exit\r')
            if (True == self.__chkrecvstats(self.__prv_clichannel)):
                str = self.__prv_clichannel.recv(self.__prv_rbuffernum)    
                print str
            else:
                return -1   
            if ( -1 == str.find("Are you sure to exit?(y/n):")):
                return -1
            else:
                self.__prv_clichannel.sendall('y\r')
            if (True == self.__chkrecvstats(self.__prv_clichannel)):
                str = self.__prv_clichannel.recv(self.__prv_rbuffernum)    
                print str
            else:
                return -1
            if ( -1 == str.find("Storage:~ #")):
                return -1
            else:
                self.__prv_clichannel.sendall('exit\r\n')
           
            self.__prv_clichannel.shutdown(2)
            self.__prv_clichannel.close()
            self.__prv_clichannel =''
   
    def shutdown_linux_channel(self):
        if (''!=self.__prv_linuxoschannel):
            self.__prv_linuxoschannel.sendall('exit\r\n')
            self.__prv_linuxoschannel.shutdown(2)
            self.__prv_linuxoschannel.close()
            self.__prv_linuxoschannel =''
   
    def shutdown_disgnose_channel(self):
        if (''!=self.__prv_diagnosechannel):
            self.__prv_diagnosechannel.sendall('exit\r')
            if (True == self.__chkrecvstats(self.__prv_diagnosechannel)):
                str = self.__prv_diagnosechannel.recv(self.__prv_rbuffernum)    
                print str
            else:
                return -1   
            if ( -1 == str.find("Storage:~ #")):
                return -1
            else:
                self.__prv_diagnosechannel.sendall('exit\r\n')
                self.__prv_diagnosechannel.shutdown(2)
                self.__prv_diagnosechannel.close()
                self.__prv_diagnosechannel =''         
   
    def form_cli_to_linux(self):
        if(''!=self.__prv_clichannel):
            self.__prv_clichannel.sendall('exit\r')
            if (True == self.__chkrecvstats(self.__prv_clichannel)):
                str = self.__prv_clichannel.recv(self.__prv_rbuffernum)    
                print str
            else:
                return -1   
            if ( -1 == str.find("Are you sure to exit?(y/n):")):
                return -1
            else:
                self.__prv_clichannel.sendall('y\r')
            if (True == self.__chkrecvstats(self.__prv_clichannel)):
                str = self.__prv_clichannel.recv(self.__prv_rbuffernum)    
                print str
            else:
                return -1
            if ( -1 == str.find("Storage:~ #")):
                return -1
            else:
                self.__prv_linuxoschannel = self.__prv_clichannel 
                self.__prv_clichannel =''
                return (0,self.__prv_linuxoschannel)
   
    def form_linux_to_diagnose(self):
        if('' != self.__prv_linuxoschannel):
            self.__prv_linuxoschannel.sendall('diagnose\r')
            if (True == self.__chkrecvstats(self.__prv_linuxoschannel)):
                str = self.__prv_linuxoschannel.recv(self.__prv_rbuffernum)    
                print str
            else:
                return (-1,'')
            if ( -1 == str.find("admin:/diagnose>")):
                return (-1,'')
            else:
                self.__prv_diagnosechannel = self.__prv_linuxoschannel
                self.__prv_linuxoschannel =''
                return (0,self.__prv_diagnosechannel)
           
    def form_diagnose_to_linux(self):
        if (''!=self.__prv_diagnosechannel):
            self.__prv_diagnosechannel.sendall('exit\r')
            if (True == self.__chkrecvstats(self.__prv_diagnosechannel)):
                str = self.__prv_diagnosechannel.recv(self.__prv_rbuffernum)    
                print str
            else:
                return -1
            if ( -1 == str.find("Storage:~ #")):
                return -1
            else:           
                self.__prv_linuxoschannel = self.__prv_diagnosechannel
                self.__prv_diagnosechannel = ''
                return (0,self.__prv_linuxoschannel)
           
    def form_linux_to_cli(self):
        if (''!= self.__prv_linuxoschannel):
            self.__prv_linuxoschannel.sendall('/ISM/cli/start.sh\r')
            if (True == self.__chkrecvstats(self.__prv_linuxoschannel)):
                str = self.__prv_linuxoschannel.recv(self.__prv_rbuffernum)    
                print str
            else:
                return -1
            if ( -1 == str.find("admin:/>")):
                return -1
            else:             
                self.__prv_clichannel = self.__prv_linuxoschannel
                self.__prv_linuxoschannel = ''
                return (0,self.__prv_clichannel)
    def check_channel_status(self,chan):
        if (''!= chan):
            chan.sendall('\r\n')
            if (True == self.__chkrecvstats(chan)):
                str = self.__prv_linuxoschannel.recv(self.__prv_rbuffernum)    
                print str
            else:
                return -1   
            if(-1!=str.find("admin:/>")):
                return (0,'cli')
            elif(-1!=str.find("Storage:~ #")):
                return (0,'os')
            elif(-1!=str.find("admin:/diagnose>")):
                return (0,'diagnose')
            else:
                return -1
                
   
   
    def __del__( self ):
        if(''!=self.__prv_clichannel):
            self.shutdown_cli_channel()
        elif(''!=self.__prv_linuxoschannel):
            self.shutdown_disgnose_channel()
        elif(''!=self.__prv_diagnosechannel):
            self.shutdown_disgnose_channel()
 
##########################
"""
鍏ㄥ眬鍙橀噺
"""                               
OMMTSTSSH = Ommssh()
##########################
if __name__ == "__main__":

    print OMMTSTSSH.openlinuxcli()
    OMMTSTSSH.form_linux_to_cli()
    #OMMTSTSSH.form_cli_to_linux()
    #OMMTSTSSH.form_linux_to_diagnose()
    #result, ssstr =OMMTSTSSH.ssh_diagnose_docmd('help')
    #result, ssstr =OMMTSTSSH.ssh_linux_docmd('ll')   
    result, ssstr =OMMTSTSSH.ssh_cli_docmd('show lun')
    print ssstr
    for i in ssstr:       
        m=i.find("LUN_12G_67")
    print m
            
    #for i in ssstr:
        #if (0 != i.find('admin')):
            #print "------------" +i
    #OMMTSTSSH.shutdown_disgnose_channel()
   
   

原创粉丝点击