Fix SSH connect with timeout

pull/3/head
remittor 4 years ago
parent d2ef13db4e
commit a9f9d1b5d8

@ -393,19 +393,26 @@ class Gateway():
json.dump(config, file, indent=4, sort_keys=True) json.dump(config, file, indent=4, sort_keys=True)
#=============================================================================== #===============================================================================
def check_ssh(self, ip, port, password, contimeout = 2, timeout = 3): def check_ssh(self, ip, port, password, contimeout = 2, timeout = 3):
err = 0 err = 0
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock = None
ssh = None ssh = None
try: start_time = datetime.datetime.now()
sock.settimeout(contimeout) while datetime.datetime.now() - start_time <= datetime.timedelta(seconds = contimeout):
sock.connect((ip, port)) try:
sock.settimeout(timeout) sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
except Exception as e: sock.settimeout(0.5)
sock.connect((ip, port))
break
except Exception as e:
sock = None
pass
if not sock:
err = -1 err = -1
if password and err == 0: if password and err == 0:
try: try:
ssh = ssh2.session.Session() ssh = ssh2.session.Session()
sock.settimeout(timeout)
ssh.handshake(sock) ssh.handshake(sock)
except Exception as e: except Exception as e:
err = -2 err = -2
@ -503,10 +510,19 @@ class Gateway():
pass pass
self.shutdown() self.shutdown()
try: try:
self.socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) contimeout = 1 if contimeout is None else contimeout
if contimeout is not None: start_time = datetime.datetime.now()
self.socket.settimeout(contimeout) while datetime.datetime.now() - start_time <= datetime.timedelta(seconds = contimeout):
self.socket.connect((self.ip_addr, self.ssh_port)) try:
self.socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.socket.settimeout(0.5)
self.socket.connect((self.ip_addr, self.ssh_port))
break
except Exception as e:
self.socket = None
pass
if not self.socket:
raise Exception('')
self.socket.settimeout(None) # enable blocking mode self.socket.settimeout(None) # enable blocking mode
self.ssh = ssh2.session.Session() self.ssh = ssh2.session.Session()
self.ssh.handshake(self.socket) self.ssh.handshake(self.socket)

Loading…
Cancel
Save