SSHFP-запись
Оригинальное название: SSHFP record
Коротко
Запись DNS с отпечатком ключа SSH-сервера. Позволяет клиенту проверить подлинность сервера при первом подключении, если ответ DNS защищён DNSSEC.
Что такое «SSHFP-запись»
При первом подключении к серверу по SSH клиент показывает отпечаток его ключа и спрашивает, доверять ли ему. Сверять отпечаток по-честному почти никто не станет — обычно просто отвечают yes. Если в этот момент соединение перехвачено, пользователь доверится чужому серверу. SSHFP (RFC 4255) решает задачу иначе: владелец сервера публикует отпечатки в DNS, а клиент сравнивает их с ключом, который прислал сервер.
Смысл в этом есть только при подписанной зоне. Без DNSSEC ответ DNS так же легко подделать, как и сам сервер, поэтому OpenSSH принимает SSHFP как доказательство, лишь когда резолвер подтвердил подлинность ответа.
Как сгенерировать записи
На самом сервере ssh-keygen выводит готовые строки для всех ключей хоста:
ssh-keygen -r host.example.ru
host.example.ru IN SSHFP 4 2 3f1c9a0e7b52d4c8a61e09f5b7d2c3a48e6f0b19d5c7a2e84f3b6091ce7d5a2f
host.example.ru IN SSHFP 1 2 9b0e44d1c7a35f28e6b90d1a4c5f7e3820b6d9f1a7c4e5b3d208f6a9c1e7b4d0
Первое число — алгоритм ключа: 1 — RSA, 3 — ECDSA, 4 — Ed25519 (2 — устаревший DSA). Второе — тип отпечатка: 1 — SHA-1, 2 — SHA-256. Обычно публикуют только SHA-256. Строки добавляют в зону и подписывают её.
Как клиент её проверяет
Проверку включают в настройках клиента:
ssh -o VerifyHostKeyDNS=yes admin@host.example.ru
Если отпечаток совпал и ответ подписан, OpenSSH подключится без вопроса о доверии. Если подпись проверить не удалось, клиент сообщит, что найден отпечаток в DNS, но всё равно спросит подтверждение.
Ограничения
- Резолвер должен проверять DNSSEC и передавать признак проверенного ответа, а канал до него — быть доверенным.
- После смены ключей сервера записи нужно обновить, иначе клиенты увидят расхождение.
- Для управления парком серверов чаще используют SSH-сертификаты: они решают ту же задачу без зависимости от DNS.

