Назад | Перейти на главную страницу

Что может вызвать несоответствие отпечатков ключей хоста SFTP?

Удаленный пользователь впервые попытался подключиться к моему серверу SFTP / SSH, используя клиент «Transmit» в Mac OS X, и обнаружил, что отпечаток ключа хоста не соответствует ожидаемому значению.

У меня есть снимок экрана с отображаемым отпечатком пальца, и я сравнил его с выводом ssh-keygen -lf /etc/ssh/ssh_host_dsa_key и ssh-keygen -lf /etc/ssh/ssh_host_rsa_key.pub, и он не соответствует ни одному из них.

Я также безуспешно сравнивал отпечаток пальца с выводом cut -d ' ' -f 2 < /etc/ssh/ssh_host_dsa_key.pub | base64 -d | sha1sum и cut -d ' ' -f 2 < /etc/ssh/ssh_host_rsa_key.pub | base64 -d | sha1sum (потому что кажется, что используются разные алгоритмы снятия отпечатков пальцев?).

Окно сообщения на стороне клиента озаглавлено (переведено на английский язык)

Неизвестный ключ хоста для <имя хоста>

и заявляет

Сервер неизвестен. Отпечаток ключа хоста <16 октетов>. (Разрешить) (Запретить) [] Всегда

Таким образом, нет указания, используется ли ключ RSA или DSA, или используется ли MD5 или какой-либо алгоритм SHA для создания отпечатка пальца.

Отпечаток пальца, отображаемый удаленному пользователю, имеет 16 октетов, разделенных двоеточиями, поэтому, похоже, он не использует SHA-224 или что-то более высокое. Обновить: Я только что заметил, что даже хэш SHA-1 будет иметь 20 октетов, поэтому отображаемый отпечаток явно не в каком-либо формате SHA.

В конечном итоге соединение идет на правильный сервер, потому что я могу видеть попытку входа в систему в журналах моего сервера, если пользователь разрешает соединение. Таким образом, похоже, что имя хоста / IP-адрес введены правильно на стороне клиента.

Подключение к другому (совершенно не связанному) серверу SFTP также показывает неправильный отпечаток пальца (но другой, чем для первого сервера).

Если я попытаюсь подключиться к серверу самостоятельно, используя OpenSSH с какого-либо другого хоста (или локально с самого сервера), мне будет показан правильный отпечаток (отпечаток MD5 для ключа хоста RSA).

На сервере работает Debian 6 LTS со стандартным сервером OpenSSH.

Что могло вызвать это несоответствие отпечатков пальцев? Как я могу отладить эту проблему?

Если это первый раз, когда они подключаются, не имеет значения, есть ли несоответствие ... у клиента просто была какая-то несвязанная старая запись, с которой случилось то же имя хоста или IP-адрес, связанный с ним. Просто очистите это с помощью:

ssh-keygen -R $name_or_ip

После этого он обязательно должен сказать, RSA, ECDSA и т. Д., При следующем подключении. Если нет, попробуйте использовать подходящий клиент, такой как клиент OpenBSD OpenSSH, который является стандартным для Linux, или попробуйте -v (или -vvvv и т. Д. Подробные параметры). Затем проверьте и примите новый ключ. Формат отпечатка ключа в старых клиентах - md5 (а в новых - sha256, в каком-то странном формате base64 вместо ascii-hex), и правильный способ получить отпечаток на стороне сервера:

ssh-keygen -l -f /etc/ssh/ssh_host_rsa_key

Оказалось, что использовавшаяся программа FTP была не Transmit, а Cyberduck 4.5.1. Проблема с неправильным отпечатком пальца уже была известна как Неверный отпечаток ключа хоста. Обновление до последней версии устранило эту проблему, и теперь отображаемый отпечаток пальца правильный.