OpenSSH (ssh-keygen, ssh-add, ssh)SSH
エラーメッセージ
Load key "/path/to/key": incorrect passphrase supplied to decrypt private key
別の表記
- incorrect passphrase supplied to decrypt private key
- Bad passphrase, try again for /path/to/key:
対話型の `ssh-add` は「Bad passphrase, try again for …:」と表示して再入力を求めます。`ssh` 自体は、単にプロンプトを再表示します。
OpenSSH (ssh-keygen, ssh-add, ssh) — encrypted private key
このエラーの意味
鍵ファイルは正しく解析でき、暗号化されています。指定されたパスフレーズでの復号に失敗しました。暗号化されたコンテナーにはチェック値が含まれているため、OpenSSH はこれを損傷したファイルと区別できます。つまり、このメッセージは、OpenSSH 形式の鍵でも暗号化された PEM/PKCS#8 の鍵でも、本当に「パスフレーズが間違っている」ことを意味します。忘れたパスフレーズを復元する方法はなく、鍵を置き換えるしかありません。
発生する理由
パスフレーズがこの鍵に設定されたものではない
よくあるパスフレーズの異なる複数の鍵がある場合や、別のマシンで `ssh-keygen -p` によってパスフレーズが変更された鍵が該当します。
ファイルや変数から余分な文字が入っている
ときどきファイルやシークレットから末尾の改行や引用符ごと読み込まれ、`-P` や `SSH_ASKPASS` のスクリプト経由で渡されたパスフレーズが該当します。
キーボード配列や Caps Lock
ときどき配列によって位置が変わる文字(y/z、特殊文字)を含むパスフレーズは、配列の異なるマシンでは失敗します。
修正方法
- 1.
パスフレーズを対話的にテストする
手入力したパスフレーズを `ssh-keygen -y` が受け入れる場合、問題はスクリプトがパスフレーズを渡す方法にあります。
bash ssh-keygen -y -f ~/.ssh/id_ed25519 > /dev/null # prompts; succeeds only with the right passphrase ssh-keygen -p -f ~/.ssh/id_ed25519 # change the passphrase (needs the old one) - 2.
パスフレーズを渡す代わりにエージェントを使う
スクリプトや CI にパスフレーズを埋め込むのではなく、`ssh-agent`(または OS のキーチェーン)で一度だけ鍵のロックを解除してください。
bash # Unlock once per session instead of typing or storing the passphrase in scripts eval "$(ssh-agent -s)" ssh-add ~/.ssh/id_ed25519 # macOS: keep it in the keychain ssh-add --apple-use-keychain ~/.ssh/id_ed25519