# -*- 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