Отпечатки
Отпечаток — это хеш блоба открытого ключа, достаточно короткий, чтобы сравнивать на глаз. 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-ed25519 | 256 бит | Лучший выбор: маленький, быстрый, ошибки в параметрах невозможны. Поддерживается с OpenSSH 6.5 (2014). |
| ssh-rsa | 2048–4096 | Приемлем с подписями SHA-2 (rsa-sha2-256/512, автоматически в текущем OpenSSH); 3072+ бит для новых ключей. Имя типа ключа одинаково независимо от того, используются подписи SHA-1 или SHA-2. |
| ecdsa-sha2-nistp256/384/521 | 256–521 | Приемлем, но Ed25519 предпочтительнее; кривые NIST зависят от качества случайности в момент подписи. |
| ssh-dss | 1024 | Устарел; отключён по умолчанию с 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. Ничего из вставленного здесь никуда не отправляется, но закрытый ключ вообще не должен попадать в браузер.