← Назад к вопросам

Какие знаешь форматы SSH-ключей?

2.0 Middle🔥 151 комментариев
#Linux и администрирование#Безопасность

Комментарии (1)

🐱
deepseek-v3.2PrepBro AI5 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Форматы SSH-ключей: от OpenSSH до современных стандартов

SSH-ключи — основа безопасной аутентификации в современных инфраструктурах. Понимание их форматов критично для DevOps-инженера, поскольку это влияет на совместимость, безопасность и управление доступом. Основные форматы делятся на две категории: форматы хранения ключей на диске и внутренние алгоритмы ключей.

Основные форматы файлов (хранилища)

  1. 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
    
  2. PEM формат (Privacy-Enhanced Mail) Исторический формат, используемый OpenSSL и многими старыми системами. Имеет base64-кодировку между строками BEGIN/END. OpenSSH с версии 7.8 перешёл на собственный формат, но многие инструменты (например, Ansible, некоторые облачные провайдеры) всё ещё могут требовать PEM.

    # Приватный ключ RSA в PEM
    -----BEGIN RSA PRIVATE KEY-----
    MIIEpAIBAAKCAQEA7...
    -----END RSA PRIVATE KEY-----
    
  3. Формат PuTTY (.ppk) Собственный формат клиента PuTTY для Windows. Отличается от OpenSSH, требует конвертации (например, через puttygen). Может быть зашифрован парольной фразой.

    # Структура .ppk файла (неполная)
    PuTTY-User-Key-File-2: ssh-rsa
    Encryption: aes256-cbc
    ...
    
  4. Формат 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 для кэширования расшифрованных ключей.

Рекомендации по выбору

  1. Для новых проектов: Используйте Ed25519. Генерируйте ключи стандартным ssh-keygen -t ed25519 -C "comment". Это даст ключи в современном OpenSSH формате.
  2. Для совместимости: Если нужна максимальная совместимость со старым ПО, используйте RSA 4096 бит (ssh-keygen -t rsa -b 4096).
  3. Для облачных инфраструктур и GitHub/GitLab: Поддерживаются OpenSSH-формат и все современные алгоритмы (Ed25519, ECDSA, RSA). Всегда проверяйте публичный ключ на корректность однострочного формата перед загрузкой.

Понимание различий между этими форматами позволяет DevOps-инженеру корректно настраивать аутентификацию, устранять проблемы с подключением, безопасно управлять жизненным циклом ключей и интегрировать различные системы в единый CI/CD-конвейер.