花了一天时间来倒腾paramiko,最后自己写了一个类,分享一下。
class TerminalSsh(object):
def __init__(self, host=None, port=None, username=None, password=None):
self.host = host
self.port = port
self.username = username
self.password = password
self.transport = None
self.session = None
self.buffer = b''
self.output = None
self.last_reply = ''
self.block = False
def connect(self, host=None, port=22,
username=None, password=None, timeout=300):
"""
默认超时时间5分钟
"""
if not host:
host = self.host
if not port:
port = self.port
if not username:
username = self.username
if not password:
password = self.password
self.transport = paramiko.Transport((host, port))
try:
self.transport.connect(username=username, password=password)
self.session = self.transport.open_session()
self.session.settimeout(timeout)
self.session.get_pty()
self.session.invoke_shell()
return True
except:
return False
def write(self, command):
self.session.send(command)
def read(self):
while True:
read_once = self.session.recv(1024)
self.buffer += read_once
if len(read_once) != 1024:
break
self.output = []
for line in self.buffer.decode().splitlines():
self.output.append(line)
self.buffer = b''
return '\n'.join(self.output)
def close(self):
self.session.close()