#!/usr/bin/python3 # -*- coding: utf-8 -*- import time import paramiko class Linux(): def __init__(self, ip, username, password, timeout=30, tsglogger=True): self.ip = ip self.username = username self.password = password self.timeout = timeout self.t = "" self.chan = "" self.try_times = 3 self.tsglogger = tsglogger def connect(self): while True: try: self.t = paramiko.Transport(sock=(self.ip, 22)) self.t.connect(username=self.username, password=self.password) self.chan = self.t.open_session() self.chan.get_pty() self.chan.invoke_shell() #print("连接{}成功".format(self.ip)) self.tsglogger.info("连接{}成功".format(self.ip)) self.revc_data = self.chan.recv(65535).decode("utf-8") #print("接收数据:{}".format(self.revc_data)) self.tsglogger.info("接收数据:{}".format(self.revc_data)) return except Exception as e: if self.try_times != 0: #print(e) #print("重试") self.tsglogger.info(e) self.tsglogger.info("重试...") self.try_times -= 1 else: #print("{}连接失败".format(self.ip)) self.tsglogger.info("{}连接失败".format(self.ip)) exit(1) def close(self): self.chan.close() self.t.close() def send(self, cmd): cmd += "\r" result = "" self.chan.send(cmd) time.sleep(0.5) while self.chan.exit_status_ready(): result1 = "" sign_1 = self.chan.recv(65535) ret = sign_1.decode("utf-8") result += ret result1 += ret #print(result1) self.tsglogger.info(result1) # print(self.chan.recv_ready()) # print(2) time.sleep(0.5) return result