Как получить отпечаток SSH-ключа
- Вставьте одну или несколько строк открытых ключей в поле SSH-ключи или перетащите файл
.pub,authorized_keysилиknown_hosts. - Для каждого ключа выводится карточка: тип, размер или кривая, комментарий, отпечатки SHA256 и MD5 и точная строка
ssh-keygen -l. - Выберите, что показывать в поле Вывод: отпечатки SHA256, отпечатки MD5, открытый ключ в PEM (SPKI или PKCS#1), RFC 4716 или нормализованные строки OpenSSH.
- Нажмите Скопировать результат или Скачать. Кнопка Скопировать отпечаток на карточке копирует только это значение.
Принимаются не только обычные строки .pub: опции authorized_keys вроде from="10.0.0.0/8",command="…", строки known_hosts с именами хостов или хешированными записями |1|…, блоки RFC 4716 ---- BEGIN SSH2 PUBLIC KEY ----, сертификаты OpenSSH, открытые ключи PEM и файлы -----BEGIN OPENSSH PRIVATE KEY-----.
Как считается отпечаток
Строка открытого ключа OpenSSH состоит из трёх частей: тип, блоб ключа в Base64 и комментарий.
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIG4ZlfvPsoxxd6tpkc1MDAJvZf8exJSDeW7a3xQRKA7d alice@laptop
Отпечаток считается как хеш декодированного блоба; у Ed25519 блоб занимает 51 байт:
| Формат | Значение для ключа выше |
|---|---|
| SHA256 (по умолчанию с OpenSSH 6.8) | SHA256:XSOBs9uz/dFf9ci88yKGbLMcjtzblRna8F0VOmxZiv8 |
| MD5 (устаревший) | MD5:93:07:89:27:05:e1:7a:5d:92:6e:ab:13:1e:48:90:d5 |
Отпечатки SHA256 записываются в Base64 без завершающего =, поэтому после префикса в них всегда 43 символа. Тот же расчёт на Python:
import base64, hashlib, sys
line = open(sys.argv[1]).read().split()
blob = base64.b64decode(line[1])
digest = hashlib.sha256(blob).digest()
print("SHA256:" + base64.b64encode(digest).decode().rstrip("="))
Почему = можно отбросить, объясняет статья о дополнении, а больше примеров собрано в Base64 в Python.
Проверка ключа хоста, прежде чем ему доверять
При первом подключении OpenSSH спрашивает: ED25519 key fingerprint is SHA256:…. Are you sure you want to continue connecting? Правильный ответ зависит от того, совпадает ли это значение с полученным другим путём:
- на консоли сервера:
ssh-keygen -lf /etc/ssh/ssh_host_ed25519_key.pub - из опубликованных отпечатков ключей хостов у вашего провайдера
- от коллеги, у которого хост уже есть в
known_hosts: вставьте этот файл сюда, и каждая запись будет показана со своим отпечатком
Чтобы увидеть, какие ключи предлагает сервер, не входя на него, выполните ssh-keyscan host.example.com | ssh-keygen -lf -; команда выведет отпечатки всех ключей хоста.
Как узнать тип ключа по Base64
Блоб начинается с типа ключа в виде строки с префиксом длины, поэтому у каждого типа постоянное начало в Base64:
| Начинается с | Тип ключа |
|---|---|
AAAAC3NzaC1lZDI1NTE5 | ssh-ed25519 |
AAAAB3NzaC1yc2E | ssh-rsa |
AAAAE2VjZHNhLXNoYTItbmlzdHAyNT | ecdsa-sha2-nistp256 |
AAAAGnNrLXNzaC1lZDI1NTE5QG9wZW5zc2guY29t | sk-ssh-ed25519@openssh.com (аппаратный ключ FIDO) |
AAAAIHNzaC1lZDI1NTE5LWNlcnQtdjAx | Сертификат Ed25519 |
Если тип, указанный в строке, не совпадает с блобом, карточка предупреждает о расхождении. Обычно это значит, что строку правили вручную.
Предупреждения и ограничения
- RSA меньше 2048 бит помечается как слабый. Ключи DSA тоже получают пометку, потому что современный OpenSSH их отключает.
- Сертификаты (
*-cert-v01@openssh.com) показывают ID ключа, серийный номер, тип (пользователь или хост), principals, срок действия, критические опции, расширения и отпечаток ключа подписавшего CA. - Ключи FIDO (
sk-…) и Ed448 декодируются, но в PEM не конвертируются. - Комментарий, сохранённый внутри файла закрытого ключа, не показывается.
- SHA256 считается через WebCrypto API браузера, которому нужна страница по https. MD5 страница считает сама.
Вопросы и ответы
Как узнать отпечаток своего SSH-ключа?
Вставьте выше содержимое файла .pub или выполните ssh-keygen -lf ~/.ssh/id_ed25519.pub. Оба способа выведут строку вида 256 SHA256:XSOBs9uz… alice@laptop (ED25519).
Почему на другом сервере или в сервисе отпечаток выглядит иначе?
Обычно дело в хеше: старые инструменты и некоторые веб-консоли показывают MD5 в hex через двоеточие (MD5:93:07:89:…), а современный OpenSSH показывает SHA256 в Base64. Переключите Вывод на отпечатки MD5, чтобы сравнить со старым форматом.
Безопасно ли вставлять сюда файл закрытого ключа?
Инструмент читает только открытую часть файла OPENSSH PRIVATE KEY (она хранится незашифрованной даже в ключах с паролем) и не трогает закрытую. И всё же правильнее привыкнуть вставлять файл .pub.
От чего на самом деле считается отпечаток SHA256?
От двоичного блоба ключа, то есть от Base64-части строки .pub после декодирования. Комментарий и текстовое название типа ключа перед блобом не учитываются, поэтому переименование ключа не меняет его отпечаток.