本文へスキップ
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」と出力され、損傷した PEM 形式の鍵の場合だけ「invalid format」のままです。本文の中の文字が 1 文字変わった場合は、どのビルドでも「unknown or unsupported key type」となります。

OpenSSH — ssh, ssh-keygen, ssh-add

このエラーの意味

OpenSSH は秘密鍵ファイルを読み込もうとしましたが、既知のどの形式(OPENSSH PRIVATE KEY、PKCS#8、従来の PEM)としても解析できませんでした。ファイルが壊れているか、途中で切れているか、PuTTY の .ppk のような別の形式であるか、そもそも秘密鍵ではないかのいずれかです。これはファイル形式の問題であり、パスフレーズの入力やサーバーとのやり取りより前の段階で発生しています。

発生する理由

修正方法

  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

関連するエラー

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