Удаленный пользователь попытался впервые подключиться к моему серверу 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.
Что может быть причиной этого несовпадения отпечатков пальцев? Как мне устранить эту проблему?
решение1
Если это первый раз, когда они подключаются, неважно, есть ли несоответствие... у клиента просто была какая-то не связанная старая запись, которая случайно имела то же имя хоста или 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
решение2
Оказалось, что FTP-программа не была Transmit, а была Cyberduck 4.5.1. Проблема с неправильным отпечатком уже была известна какНеправильный отпечаток ключа хоста. Обновление до последней версии устранило эту проблему, и теперь отображаемый отпечаток пальца правильный.