Перейти к содержимому
ecdsa.com
OpenSSHДругие инструменты

Сообщение об ошибке

Load key "/path/to/key": invalid format

Путь подставляется при каждом вызове. Формулировка зависит от криптографической библиотеки, с которой собран OpenSSH: с OpenSSL 1.1 или LibreSSL (macOS) при любой из причин ниже выводится «invalid format»; сборки с OpenSSL 3 (Ubuntu 22.04 и новее, Debian 12 и новее) для большинства из них выводят «error in libcrypto» и сохраняют «invalid format» для повреждённых ключей в формате PEM. Изменённый символ внутри тела ключа на всех сборках даёт «unknown or unsupported key type».

OpenSSH — ssh, ssh-keygen, ssh-add

Что это означает

OpenSSH попытался загрузить файл закрытого ключа и не смог разобрать его ни в одном из известных ему форматов (OPENSSH PRIVATE KEY, PKCS#8, устаревший PEM). Файл повреждён, обрезан, записан в чужом формате вроде .ppk от PuTTY, или это вообще не закрытый ключ — это ошибка формата файла, которая возникает ещё до запроса парольной фразы и до любого обмена с сервером.

Почему это происходит

Как исправить

  1. 1.

    Сначала проверьте обрамление

    Первая и последняя строки вместе с пробной проверкой (-y выводит открытый ключ тогда и только тогда, когда закрытый ключ разбирается) за секунды показывают, к какому классу относится ошибка.

    bash
    head -1 ~/.ssh/id_ecdsa      # -----BEGIN OPENSSH PRIVATE KEY-----
    tail -c 50 ~/.ssh/id_ecdsa | xxd | tail -1   # must end with 0a (newline)
    ssh-keygen -y -f ~/.ssh/id_ecdsa             # parses? prints the public key
  2. 2.

    Преобразуйте ключи PuTTY в формат OpenSSH

    Однократное преобразование с помощью puttygen; после него ключ работает с ssh, ssh-add и ssh-agent.

    bash
    puttygen key.ppk -O private-openssh -o ~/.ssh/id_converted
    chmod 600 ~/.ssh/id_converted
  3. 3.

    Передавайте ключи без потерь

    Переносите файлы ключей через scp/rsync, а не через буфер обмена, оставляйте права 600, а если закрытый ключ не восстановить, сгенерируйте новую пару — современный OpenSSH отдаёт предпочтение Ed25519.

    bash
    scp -p old-host:~/.ssh/id_ecdsa ~/.ssh/
    # or start clean:
    ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519

Связанные ошибки

Открыть всю базу ошибок подписей