Python Paramiko: проверка отпечатков пальцев ключа хоста SSH вручную

Я использую Python Paramiko для подключения с помощью SSH к удаленному Ubuntu Box, размещенному на провайдере VPS. Используя клиентскую машину на базе Windows 7, я могу подключиться следующим образом:

import paramiko
import binascii
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(hostname='HOSTNAME', username='USERNAME', password='PASSWORD')

Это все хорошо, но теперь я хочу проверить подлинность хост-сервера и, поскольку я нахожусь в Windows, Paramiko не сможет получить файл known_hosts или что-то в этом роде. Я попробовал следующий код:

#... after connection is successful
keys = ssh.get_host_keys()
key = keys['HOSTNAME']['ssh-rsa']
print binascii.hexlify(key.get_fingerprint())
# key.get_fingerprint() returns the md5 hash of 
# the public part of the key (whatever that means)

который дает вывод, похожий на следующий:

a42273f83e62d65cc87231a2ba33eff3

Дело в том, что на cpanel моего провайдера VPS у меня есть отпечатки ключей хоста RSA и DSA как что-то вроде:

RSA 1b:c2:f4:8f:f2:86:fc:f2:96:ba:cc:24:41:e9:d7:86
DSA 36:b9:1f:ad:53:b5:c4:38:78:bf:cb:9d:38:fa:44:ce

и, как видно, ни один из отпечатков не соответствует сгенерированному. Как сравнить отпечаток, сгенерированный вручную, со значениями отпечатков пальцев на панели удаленного хоста? Что я делаю правильно?

1 ответ

Решение

Решено, оказалось, что отпечаток ключа RSA, отображаемый на панели управления, не для хоста VPS, а для внешней консоли. Фактический ключ (хоста VPS) находится по адресу: /etc/ssh/ssh_host_rsa_key.pub, а значение отпечатка (его хэш MD5) именно то, что я получал из кода проверки на стороне клиента. Так что не было никаких проблем с самого начала.

Другие вопросы по тегам