Host keys / known_hosts files

class paramiko.hostkeys.HostKeys(filename=None)

Representation of an OpenSSH-style “known hosts” file. Host keys can be read from one or more files, and then individual hosts can be looked up to verify server keys during SSH negotiation.

A HostKeys object can be treated like a dict; any dict lookup is equivalent to calling lookup.

New in version 1.5.3.

__init__(filename=None)

Create a new HostKeys object, optionally loading keys from an OpenSSH style host-key file.

Parameters

filename (str) – filename to load host keys from, or None

add(hostname, keytype, key)

Add a host key entry to the table. Any existing entry for a (hostname, keytype) pair will be replaced.

Parameters
  • hostname (str) – the hostname (or IP) to add

  • keytype (str) – key type ("ssh-rsa" or "ssh-dss")

  • key (PKey) – the key to add

load(filename)

Read a file of known SSH host keys, in the format used by OpenSSH. This type of file unfortunately doesn’t exist on Windows, but on posix, it will usually be stored in os.path.expanduser("~/.ssh/known_hosts").

If this method is called multiple times, the host keys are merged, not cleared. So multiple calls to load will just call add, replacing any existing entries and adding new ones.

Parameters

filename (str) – name of the file to read host keys from

Raises

IOError – if there was an error reading the file

save(filename)

Save host keys into a file, in the format used by OpenSSH. The order of keys in the file will be preserved when possible (if these keys were loaded from a file originally). The single exception is that combined lines will be split into individual key lines, which is arguably a bug.

Parameters

filename (str) – name of the file to write

Raises

IOError – if there was an error writing the file

New in version 1.6.1.

lookup(hostname)

Find a hostkey entry for a given hostname or IP. If no entry is found, None is returned. Otherwise a dictionary of keytype to key is returned. The keytype will be either "ssh-rsa" or "ssh-dss".

Parameters

hostname (str) – the hostname (or IP) to lookup

Returns

dict of str -> PKey keys associated with this host (or None)

check(hostname, key)

Return True if the given key is associated with the given hostname in this dictionary.

Parameters
  • hostname (str) – hostname (or IP) of the SSH server

  • key (PKey) – the key to check

Returns

True if the key is associated with the hostname; else False

clear()

Remove all host keys from the dictionary.

keys() a set-like object providing a view on D's keys
values() an object providing a view on D's values
static hash_host(hostname, salt=None)

Return a “hashed” form of the hostname, as used by OpenSSH when storing hashed hostnames in the known_hosts file.

Parameters
  • hostname (str) – the hostname to hash

  • salt (str) – optional salt to use when hashing (must be 20 bytes long)

Returns

the hashed hostname as a str

__weakref__

list of weak references to the object (if defined)

exception paramiko.hostkeys.InvalidHostKey(line, exc)
__init__(line, exc)
__weakref__

list of weak references to the object (if defined)

class paramiko.hostkeys.HostKeyEntry(hostnames=None, key=None)

Representation of a line in an OpenSSH-style “known hosts” file.

__init__(hostnames=None, key=None)
classmethod from_line(line, lineno=None)

Parses the given line of text to find the names for the host, the type of key, and the key data. The line is expected to be in the format used by the OpenSSH known_hosts file. Fields are separated by a single space or tab.

Lines are expected to not have leading or trailing whitespace. We don’t bother to check for comments or empty lines. All of that should be taken care of before sending the line to us.

Parameters

line (str) – a line from an OpenSSH known_hosts file

to_line()

Returns a string in OpenSSH known_hosts file format, or None if the object is not in a valid state. A trailing newline is included.

__repr__()

Return repr(self).

__weakref__

list of weak references to the object (if defined)