X-Git-Url: https://gerrit.opnfv.org/gerrit/gitweb?a=blobdiff_plain;f=modules%2Fopnfv%2Futils%2Fssh_utils.py;h=4c5ff5c1ba50252f65f0df0507718ddffc726300;hb=f50fbcaadfa1577eb4dfeeb577bf77a90d16e5e1;hp=f900455408cdbc2f896f6db5d1631ef9ae3cd674;hpb=1e867bac8820f41e1541cbad4802865c458a5c64;p=releng.git diff --git a/modules/opnfv/utils/ssh_utils.py b/modules/opnfv/utils/ssh_utils.py index f90045540..4c5ff5c1b 100644 --- a/modules/opnfv/utils/ssh_utils.py +++ b/modules/opnfv/utils/ssh_utils.py @@ -15,6 +15,27 @@ import paramiko from opnfv.utils import opnfv_logger as logger logger = logger.Logger("SSH utils").getLogger() +SSH_TIMEOUT = 60 + +''' Monkey Patch paramiko _custom_start_client ''' +# We are using paramiko 2.1.1 and in the CI in the SFC +# test we are facing this issue: +# https://github.com/robotframework/SSHLibrary/issues/158 +# The fix was merged in paramiko 2.1.3 in this PR: +# https://github.com/robotframework/SSHLibrary/pull/159/files +# Until we upgrade we can use this monkey patch to work +# around the issue + + +def _custom_start_client(self, *args, **kwargs): + self.banner_timeout = 45 + self._orig_start_client(*args, **kwargs) + + +paramiko.transport.Transport._orig_start_client = \ + paramiko.transport.Transport.start_client +paramiko.transport.Transport.start_client = _custom_start_client +''' Monkey Patch paramiko _custom_start_client ''' def get_ssh_client(hostname, @@ -40,14 +61,16 @@ def get_ssh_client(hostname, client.load_system_host_keys() client.connect(hostname, username=username, - pkey=key) + pkey=key, + timeout=SSH_TIMEOUT) else: client.connect(hostname, username=username, - password=password) + password=password, + timeout=SSH_TIMEOUT) return client - except Exception, e: + except Exception as e: logger.error(e) return None @@ -57,7 +80,7 @@ def get_file(ssh_conn, src, dest): sftp = ssh_conn.open_sftp() sftp.get(src, dest) return True - except Exception, e: + except Exception as e: logger.error("Error [get_file(ssh_conn, '%s', '%s']: %s" % (src, dest, e)) return None @@ -68,7 +91,7 @@ def put_file(ssh_conn, src, dest): sftp = ssh_conn.open_sftp() sftp.put(src, dest) return True - except Exception, e: + except Exception as e: logger.error("Error [put_file(ssh_conn, '%s', '%s']: %s" % (src, dest, e)) return None @@ -96,7 +119,8 @@ class ProxyHopClient(paramiko.SSHClient): self.proxy_ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) self.proxy_ssh.connect(jh_ip, username=jh_user, - password=jh_pass) + password=jh_pass, + timeout=SSH_TIMEOUT) self.proxy_transport = self.proxy_ssh.get_transport() def connect(self, hostname, port=22, username='root', password=None, @@ -126,7 +150,8 @@ class ProxyHopClient(paramiko.SSHClient): super(ProxyHopClient, self).connect(hostname, username=username, pkey=proxy_key, - sock=self.proxy_channel) + sock=self.proxy_channel, + timeout=timeout) os.remove(self.local_ssh_key) - except Exception, e: + except Exception as e: logger.error(e)