Перейти к содержимому
ecdsa.com
OpenSSH (ssh, ssh-add, ssh-keygen, git over SSH)SSH

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

Load key "/path/to/key": error in libcrypto

Также выводится как

  • error in libcrypto

Путь — это файл ключа, который вы использовали. Некоторые повреждения дают вместо этого «Load key "…": invalid format» (например, у ключей PEM, в середине которых потеряна строка); причины пересекаются.

OpenSSH (ssh, ssh-add, ssh-keygen, git over SSH) — key file could not be parsed

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

OpenSSH не смог разобрать файл закрытого ключа в собственном формате и передал его OpenSSL (libcrypto) как ключ PEM, но и там разбор не удался — поэтому выводится общая ошибка «error in libcrypto», а не точная причина. В текущих версиях OpenSSH (проверено на 10.0) сюда приводит почти любое повреждение файла `OPENSSH PRIVATE KEY`: окончания строк Windows, отсутствие перевода строки в конце, потерянная строка или ключ, склеенный в одну строку. Сюда же попадают повреждённые ключи PEM/PKCS#8, если они обрезаны или склеены в одну строку, а также файлы PuTTY `.ppk`.

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

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

  1. 1.

    Записывайте ключи в CI байт в байт

    Удалите `\r`, завершите файл переводом строки, задайте права 600 и сразу проверьте ключ через `ssh-keygen -y`, чтобы повреждённый секрет явно приводил к ошибке на шаге настройки.

    bash
    # CI: write the key exactly, normalise line endings, guarantee the final newline, restrict permissions
    install -d -m 700 ~/.ssh
    printf '%s\n' "$SSH_PRIVATE_KEY" | tr -d '\r' > ~/.ssh/id_ed25519
    chmod 600 ~/.ssh/id_ed25519
    ssh-keygen -y -f ~/.ssh/id_ed25519 > /dev/null && echo "key parses"
  2. 2.

    Посмотрите, как оформлен файл

    `file`, первая строка и последние байты сразу показывают окончания CRLF, отсутствующий перевод строки или ключ в одну строку.

    bash
    file ~/.ssh/id_ed25519                  # "OpenSSH private key" vs "with CRLF line terminators"
    head -1 ~/.ssh/id_ed25519; tail -c 40 ~/.ssh/id_ed25519 | od -c | tail -3   # framing and final "\n"
    wc -l ~/.ssh/id_ed25519                 # a one-line file means the newlines were lost

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

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