bitlvl
RU

Отпечаток и конвертер SSH-ключей

Вставьте содержимое файла .pub или открытый ключ в PEM. Вы получите отпечатки, которые напечатал бы ssh-keygen, сведения о ключе, другой формат и строку authorized_keys с выбранными вами ограничениями.

Строка authorized_keys

Результаты и сообщения этого инструмента выводятся на английском языке.

Отпечатки

Отпечаток — это хеш блоба открытого ключа, достаточно короткий, чтобы сравнивать на глаз. OpenSSH показывает SHA-256 в Base64 (SHA256:…) начиная с версии 6.8; старую форму MD5:xx:xx:… до сих пор показывают GitHub, AWS и старая документация для некоторых ключей. Оба вычисляются здесь из тех же байтов, которые хеширует ssh-keygen -lf key.pub, поэтому совпадают в точности. Используйте их, чтобы подтвердить, что ключ в authorized_keys — именно тот, что вы думаете, чтобы сопоставить предупреждение о ключе хоста с выводом ssh-keygen -lf /etc/ssh/ssh_host_ed25519_key.pub на сервере, и чтобы идентифицировать ключи в облачных консолях.

Типы ключей

ТипРазмерВердикт
ssh-ed25519256 битЛучший выбор: маленький, быстрый, ошибки в параметрах невозможны. Поддерживается с OpenSSH 6.5 (2014).
ssh-rsa2048–4096Приемлем с подписями SHA-2 (rsa-sha2-256/512, автоматически в текущем OpenSSH); 3072+ бит для новых ключей. Имя типа ключа одинаково независимо от того, используются подписи SHA-1 или SHA-2.
ecdsa-sha2-nistp256/384/521256–521Приемлем, но Ed25519 предпочтительнее; кривые NIST зависят от качества случайности в момент подписи.
ssh-dss1024Устарел; отключён по умолчанию с 7.0 и удалён в 9.8.
[email protected]256Ключ хранится на ключе безопасности FIDO2 (YubiKey); требует касания при каждом использовании.

Форматы

Однострочный формат OpenSSH — тип base64-блоб комментарий, где блоб — это имя типа и поля ключа в виде строк с префиксом длины. PEM PUBLIC KEY (SubjectPublicKeyInfo) — то, что нужно OpenSSL, библиотекам JWT и большинству ПО, не связанного с SSH. ssh-keygen -e -m PKCS8 -f key.pub конвертирует в одну сторону, а ssh-keygen -i -m PKCS8 — в другую; эта страница делает и то и другое без флагов.

Ограничение ключа

Опции в начале строки authorized_keys ограничивают возможности ключа: from= ограничивает адреса источника, command= принудительно задаёт единственную команду (исходная доступна в $SSH_ORIGINAL_COMMAND), а restrict одним словом отключает проброс портов, PTY и агента. Ключ для резервного копирования должен быть restrict,command="rrsync /backup"; ключ для деплоя не должен позволять ничего, кроме скрипта деплоя.

Вопросы

Как получить мой открытый ключ?

cat ~/.ssh/id_ed25519.pub (или id_rsa.pub). Если у вас есть только закрытый ключ: ssh-keygen -y -f ~/.ssh/id_ed25519 печатает открытую часть. Никогда и никуда не вставляйте закрытый ключ (файл без .pub).

Почему GitHub показывает другой отпечаток?

GitHub показывает отпечатки SHA256 для ключей, добавленных с 2018 года, и MD5 для более старых. Сравнивайте соответствующий формат; здесь показаны оба. Также убедитесь, что вы смотрите на тот же файл ключа.

Как проверить отпечаток ключа хоста сервера?

На сервере: ssh-keygen -lf /etc/ssh/ssh_host_ed25519_key.pub. Сравните с тем, что клиент печатает при первом подключении. Облачные провайдеры показывают его в консоли или в журнале последовательного порта; GitHub публикует свои отпечатки в документации.

Может ли это сконвертировать закрытый ключ?

Нет, намеренно. Конвертация закрытых ключей должна выполняться на вашей машине: ssh-keygen -p -m PEM -f key (OpenSSH → PEM) или ssh-keygen -p -m RFC4716. Ничего из вставленного здесь никуда не отправляется, но закрытый ключ вообще не должен попадать в браузер.