本文へスキップ
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 は秘密鍵ファイルを独自形式として解析できず、次に PEM 形式の鍵として OpenSSL(libcrypto)に渡しましたが、そちらも失敗しました。そのため、報告されるエラーは具体的な理由ではなく、汎用の「error in libcrypto」になります。現行の OpenSSH(10.0 で確認)では、`OPENSSH PRIVATE KEY` ファイルの損傷はほぼすべてここに行き着きます。Windows の改行コード、末尾の改行の欠落、行の欠落、1 行にまとめられた鍵などです。損傷した PEM/PKCS#8 の鍵も、切り詰められたり 1 行にまとめられたりした場合はここに行き着き、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 の改行、改行の欠落、1 行にまとめられた鍵がすぐにわかります。

    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

関連するエラー

署名エラーデータベースをすべて見る