Сообщение об ошибке
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.
Используйте агент вместо передачи парольных фраз
Разблокируйте ключ один раз в `ssh-agent` (или в связке ключей ОС) вместо того, чтобы встраивать парольную фразу в скрипты или CI.
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