def _connect(self): if not self._is_connected(): logger.debug(f"connecting to {self.hostname}:{self.port}") try: self.ssh_client.connect(self.hostname, username=self.username, password=self.password, port=self.port, allow_agent=True, gss_auth=self.gssapi_auth, gss_kex=self.gssapi_auth, key_filename=self.key_filename) transport = self.ssh_client.get_transport() self.sftp_client = paramiko.SFTPClient.from_transport( transport) except paramiko.BadHostKeyException as e: raise BadHostKeyException(e, self.hostname) except paramiko.AuthenticationException as e: raise AuthException(e, self.hostname) except paramiko.SSHException as e: raise SSHException(e, self.hostname) except Exception as e: raise SSHException(e, self.hostname)
def __init__(self, hostname, username=None, password=None, script_dir=None, envs=None, gssapi_auth=False, skip_auth=False, port=22, key_filename=None, host_keys_filename=None): ''' Initialize a persistent connection to the remote system. We should know at this point whether ssh connectivity is possible Args: - hostname (String) : Hostname KWargs: - username (string) : Username on remote system - password (string) : Password for remote system - port : The port designated for the ssh connection. Default is 22. - script_dir (string) : Full path to a script dir where generated scripts could be sent to. - envs (dict) : A dictionary of environment variables to be set when executing commands - key_filename (string or list): the filename, or list of filenames, of optional private key(s) Raises: ''' self.hostname = hostname self.username = username self.password = password self.port = port self.script_dir = script_dir self.skip_auth = skip_auth self.gssapi_auth = gssapi_auth self.key_filename = key_filename self.host_keys_filename = host_keys_filename if self.skip_auth: self.ssh_client = NoAuthSSHClient() else: self.ssh_client = paramiko.SSHClient() self.ssh_client.load_system_host_keys(filename=host_keys_filename) self.ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) self.envs = {} if envs is not None: self.envs = envs try: self.ssh_client.connect(hostname, username=username, password=password, port=port, allow_agent=True, gss_auth=gssapi_auth, gss_kex=gssapi_auth, key_filename=key_filename) t = self.ssh_client.get_transport() self.sftp_client = paramiko.SFTPClient.from_transport(t) except paramiko.BadHostKeyException as e: raise BadHostKeyException(e, self.hostname) except paramiko.AuthenticationException as e: raise AuthException(e, self.hostname) except paramiko.SSHException as e: raise SSHException(e, self.hostname) except Exception as e: raise SSHException(e, self.hostname)