python交互的模块挺多:pexpect、paramiko 、fabric、
前两个包使用过,但独 paramiko 频率高, 简单丰富,重要的是还多坑!有句老实话不知当不当讲,越骚动的郑就越喜欢,因为征服了它就能征服天下
一 、安装
-
省略
#
二、 工程测试实例
-
公用
class SSHConn(object): __ssh = None __transport = None __LOGIN_SUCCESS__ = False def __init__(self, host, port, username, password): self.__host = host self.__port = port self.__username = username self.__password = password def login(self): """ 登入测试 """ error_msg = None try: transport = paramiko.Transport((self.__host, int(self.__port))) transport.start_client() transport.auth_password(self.__username, self.__password) # transport.connect(username=self.__username, password=self.__password) if transport.active is True: self.__LOGIN_SUCCESS__ = True ssh = paramiko.SSHClient() ssh._transport = transport self.__ssh = ssh self.__transport = transport except Exception: error_msg = traceback.format_exc() # error_msg = f'{e}' finally: return self.__LOGIN_SUCCESS__, error_msg def send_channel(self, cmd, channel): cmd = str(cmd) + '\r' # 通过命令执行提示符来判断命令是否执行完成 # p = re.compile(r']$') result = '' # 发送要执行的命令 channel.send(cmd) count = 1 # 回显很长的命令可能执行较久,通过循环分批次取回回显 # root 用户非root用户回显的内容不一样,循环判断逻辑需要修改 if self.__username == 'root': while '~]#' not in result: time.sleep(0.5) count += 1 print("count: ", count) ret = channel.recv(65535) ret = ret.decode('utf-8') result += ret # if p.search(ret): if 'Permission denied' in result: break elif 'password for {0}'.format(self.__username) in result: break return result # 普通用户 while '~]$' not in result: time.sleep(0.5) count += 1 print("coun