Какие знаешь форматы SSH-ключей?
Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Форматы SSH-ключей: от OpenSSH до современных стандартов
SSH-ключи — основа безопасной аутентификации в современных инфраструктурах. Понимание их форматов критично для DevOps-инженера, поскольку это влияет на совместимость, безопасность и управление доступом. Основные форматы делятся на две категории: форматы хранения ключей на диске и внутренние алгоритмы ключей.
Основные форматы файлов (хранилища)
-
OpenSSH формат (RFC 4716 / PEM-like) Наиболее распространённый и стандартный формат, используемый утилитами типа
ssh-keygen. Имеет текстовое представление с пометками BEGIN/END.# Пример приватного ключа RSA в OpenSSH формате -----BEGIN OPENSSH PRIVATE KEY----- b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAABlwAAAAdzc2gtcn ... -----END OPENSSH PRIVATE KEY----- # Пример публичного ключа (всегда однострочный) ssh-rsa AAAAB3NzaC1yc2E... comment@host -
PEM формат (Privacy-Enhanced Mail) Исторический формат, используемый OpenSSL и многими старыми системами. Имеет base64-кодировку между строками BEGIN/END. OpenSSH с версии 7.8 перешёл на собственный формат, но многие инструменты (например, Ansible, некоторые облачные провайдеры) всё ещё могут требовать PEM.
# Приватный ключ RSA в PEM -----BEGIN RSA PRIVATE KEY----- MIIEpAIBAAKCAQEA7... -----END RSA PRIVATE KEY----- -
Формат PuTTY (.ppk) Собственный формат клиента PuTTY для Windows. Отличается от OpenSSH, требует конвертации (например, через
puttygen). Может быть зашифрован парольной фразой.# Структура .ppk файла (неполная) PuTTY-User-Key-File-2: ssh-rsa Encryption: aes256-cbc ... -
Формат RFC 4716 Стандартный формат для публичных ключей, но менее распространённый на практике. OpenSSH его понимает, но по умолчанию использует однострочный вариант.
Алгоритмы и их эволюция (типы ключей)
Формат файла часто связан с алгоритмом, на котором основан ключ. Вот основные:
- RSA (Rivest–Shamir–Adleman):
* Исторически самый распространённый. Минимальная рекомендуемая длина сейчас — **2048 бит** (4096 для повышенной безопасности).
* Пример: `ssh-rsa AAAAB3...`
- ECDSA (Elliptic Curve Digital Signature Algorithm):
* Более современный, обеспечивает comparable безопасность с меньшей длиной ключа (например, 256 бит ECDSA ~ 3072 бит RSA).
* Использует именованные кривые (nistp256, nistp384, nistp521).
* Пример: `ecdsa-sha2-nistp256 AAAAE2...`
- Ed25519 (на основе Curve25519):
* **Современный золотой стандарт** для новых развёртываний. Алгоритм с эллиптическими кривыми, но более безопасный и производительный, чем ECDSA. Устойчив к timing-атакам, имеет фиксированный размер ключа (256 бит).
* Поддержка требуется в OpenSSH >= 6.5.
* Пример: `ssh-ed25519 AAAAC3...`
Критические нюансы для DevOps
-
Совместимость: Старые системы (например, Cisco IOS) могут поддерживать только RSA. Облачные провайдеры (AWS, GCP) обычно принимают OpenSSH-формат. Некоторые корпоративные инструменты (например, старые версии GitLab) могут требовать PEM.
-
Безопасность: Алгоритм
ssh-rsa(SHA-1) сейчас считается устаревшим. Современные OpenSSH-серверы (например, с 2020 года) по умолчанию могут его отключать. Предпочтительнее использовать Ed25519 или ECDSA. -
Конвертация: Частая задача — преобразование между форматами. Делается это через
ssh-keygenилиopenssl.# Конвертация RSA из PEM в OpenSSH формат ssh-keygen -p -f old_rsa_key.pem -m PEM # Экспорт публичного ключа из приватного в формате OpenSSH ssh-keygen -y -f private_key > public_key.pub -
Парольные фразы (passphrases): OpenSSH и PEM поддерживают шифрование ключа симметричным шифром (например, AES-256-CBC). PuTTY (.ppk) использует собственный формат шифрования. Для автоматизации используют
ssh-agentдля кэширования расшифрованных ключей.
Рекомендации по выбору
- Для новых проектов: Используйте Ed25519. Генерируйте ключи стандартным
ssh-keygen -t ed25519 -C "comment". Это даст ключи в современном OpenSSH формате. - Для совместимости: Если нужна максимальная совместимость со старым ПО, используйте RSA 4096 бит (
ssh-keygen -t rsa -b 4096). - Для облачных инфраструктур и GitHub/GitLab: Поддерживаются OpenSSH-формат и все современные алгоритмы (Ed25519, ECDSA, RSA). Всегда проверяйте публичный ключ на корректность однострочного формата перед загрузкой.
Понимание различий между этими форматами позволяет DevOps-инженеру корректно настраивать аутентификацию, устранять проблемы с подключением, безопасно управлять жизненным циклом ключей и интегрировать различные системы в единый CI/CD-конвейер.