基于paramiko的一个类库

来源:互联网 发布:linux命令执行过程 编辑:程序博客网 时间:2024/06/01 09:19
# -*- coding:utf-8 -*-import paramikoimport timeimport sysclass Connect:    def __init__(self, host, user, pwd, port=22):        self.host = host        self.user = user        self.pwd = pwd        self.port = port        self.recv_buffer = 65535        self.EOF_list = []        self.is_connected = False    def open_connect(self, timeout=10):        try:            self.ssh_sock = paramiko.Transport(self.host, self.port)            self.ssh_sock.connect(username=self.user, password=self.pwd)            self.handle = self.ssh_sock.open_session()            self.handle.settimeout(timeout)            self.handle.get_pty()            self.handle.invoke_shell()            self.is_connected = True            time.sleep(5)            if self.handle.recv_ready():                rsp = self.handle.recv(self.recv_buffer)                if 'login' in rsp:                    print('Login succeed!')                    sys.stdout.write(rsp)                self.EOF_list.append(rsp.split('\n')[-1].split()[0])        except Exception, e:            print('ssh Open Error: %s' % e)    def close_connect(self):        if self.is_connected:            try:                self.handle.close()                self.ssh_sock.close()                self.is_connected = False            except Exception, e:                self.is_connected = False                print('ssh Close Error: %s' % e)    def send_cmd(self, cmd, timeout=10):        if self.is_connected:            try:                startTime = time.time()                self.handle.settimeout(timeout)                self.handle.send('%s\r' % cmd)                rsp = ''                brk_flag = False                add_flag = False                while time.time() < startTime + timeout:                    time.sleep(0.5)                    if self.handle.recv_ready():                        rsp = rsp + self.handle.recv(self.recv_buffer)                        for eof in self.EOF_list:                            if rsp.rfind(eof) > rsp.rfind('\n'):                                brk_flag = True                                add_flag = False                                break                        else:                            add_flag = True                    if brk_flag:                        break                if add_flag:                    lines = rsp.split('\n')                    if lines:                        last_line = lines[-1].split()                        if last_line:                            if last_line[0]:                                self.EOF_list.append(last_line[0])                sys.stdout.write(rsp)                return rsp            except Exception, e:                print('ssh Cmd Error: %s' % e)    def send_cmd_expect(self, cmd, expect, timeout=10):        if self.is_connected:            rsp = self.send_cmd(cmd, timeout)            if rsp:                if str(expect) in rsp:                    return True                else:                    return False

原创粉丝点击