基于paramiko的一个类库

xiaoxiao2021-02-28  103

# -*- coding:utf-8 -*- import paramiko import time import sys class 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
转载请注明原文地址: https://www.6miu.com/read-36933.html

最新回复(0)