Как я могу эффективно получить все ключи хоста сервера SSH, используя paramiko?
Моя попытка заключается в следующем. Сначала получите все типы ключей (возвращает набор строк):
ssh_transport = paramiko.transport.Transport('%s:%s' % (ip_address, 22))
ssh_transport.start_client()
options = ssh_transport.get_security_options()
ssh_transport.close()
для вышеизложенного, это более короткий метод:
client_key_types = paramiko.transport.Transport._preferred_keys
Затем выполните цикл по типам ключей, получите объект параметра, назначьте тип ключа назначения, запустите клиент и получите ключ хоста:
for key_type in options.key_types:
ssh_transport = paramiko.transport.Transport('%s:%s' % (ip_address, 22))
inner_options = ssh_transport.get_security_options()
inner_options.key_types = (key_type,)
ssh_transport.start_client()
key = ssh_transport.get_remote_server_key()
ssh_transport.close()
В приведенном выше коде вы получите исключение, если попытаетесь использовать неподдерживаемый тип ключа.
Код работает, но кажется, что это неэффективно.
Есть ли лучший способ сделать это, используя что-то встроенное в Paramiko? В конце концов, я только пытаюсь проверить подлинность сервера при первом подключении с минимальной необходимой инфраструктурой.