def open_ssh_connection(dispatcher, backup): peer = dispatcher.call_sync('peer.query', [('id', '=', backup['peer'])], {'single': True}) if not peer: raise TaskException(errno.ENOENT, 'Cannot find peer {0}'.format(backup['peer'])) if peer['type'] != 'ssh': raise TaskException(errno.EINVAL, 'Invalid peer type: {0}'.format(peer['type'])) creds = peer['credentials'] try: session = transport.Transport(creds['address'], creds.get('port', 22)) session.window_size = 1024 * 1024 * 1024 session.packetizer.REKEY_BYTES = pow(2, 48) session.packetizer.REKEY_PACKETS = pow(2, 48) session.start_client() if creds.get('privkey'): if try_key_auth(session, creds): return session else: raise Exception('Cannot authenticate using keys') session.auth_password(creds['username'], creds['password'].secret) return session except socket.gaierror as err: raise Exception('Connection error: {0}'.format(err.strerror)) except ssh_exception.BadAuthenticationType as err: raise Exception('Cannot authenticate: {0}'.format(str(err)))
def get_available_key_algorithms() -> Set[str]: """ Gets a set of the available key algorithms supported by server. Returns: (Set[str]): Set of supported ciphers. """ tmp_socket = socket.socket() opts = transport.Transport(tmp_socket).get_security_options() tmp_socket.close() return set(opts.kex)
def open_ssh_connection(hostport, username, password, use_keys): try: session = transport.Transport(split_hostport(hostport)) session.window_size = 1024 * 1024 * 1024 session.packetizer.REKEY_BYTES = pow(2, 48) session.packetizer.REKEY_PACKETS = pow(2, 48) session.start_client() if use_keys: if try_key_auth(session, username): return session else: raise Exception('Cannot authenticate using keys') session.auth_password(username, password) return session except socket.gaierror as err: raise Exception('Connection error: {}'.format(err.strerror)) except ssh_exception.BadAuthenticationType: raise Exception('Cannot authenticate')
def ssh_keyscan(host): """ Get the SSH host key from a remote server by connecting to it """ from paramiko import transport with transport.Transport(host) as ssh: ssh.start_client() return ssh.get_remote_server_key()
def _connect(self): s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect((self.server, 22)) tr = transport.Transport(s) tr.connect(username=self.user, pkey=self._p_key) self._sftp_client = tr.open_sftp_client()
def connect(self): self._sock = socket.socket() self._sock.connect(self._server_endpoint) self._ssh_client = transport.Transport(self._sock) self._ssh_client.connect(username=self._username, password=self._password) self._ssh_session = self._ssh_client.open_session()