Как исправить ошибки SSH Permission Denied в Heroku
Решите ошибки SSH Permission Denied и 'fatal: The remote end hung up unexpectedly' при деплое в Heroku. Узнайте, как исправить ключи, права доступа и развернуть приложение.
Как исправить ошибки «Permission denied (publickey)» и «fatal: The remote end hung up unexpectedly» при развертывании на Heroku командой git push heroku master?
Я пытаюсь развернуть свой код на Heroku, используя команду git push heroku master, но постоянно получаю следующую ошибку:
Permission denied (publickey).
fatal: The remote end hung up unexpectedly
Я уже загрузил свой публичный SSH‑ключ в Heroku, но ошибка всё равно возникает. Что может вызывать эту проблему и как её решить?
Ошибка «Permission denied (publickey)» и «fatal: The remote end hung up unexpectedly» при выполнении git push heroku master обычно связана с некорректной настройкой SSH‑ключей, неверными правами файлов или проблемами аутентификации в Heroku. Эти ошибки можно устранить, создав новые ключи, поправив права доступа, обновив ключи в Heroku или переключившись на токен аутентификации Heroku CLI.
Содержание
- Распространённые причины ошибок SSH‑права доступа
- Шаг 1: Проверка генерации SSH‑ключей и прав доступа
- Шаг 2: Обновление SSH‑ключей в Heroku
- Шаг 3: Тестирование SSH‑соединения с Heroku
- Шаг 4: Альтернатива – аутентификация через Heroku CLI
- Дополнительные шаги по устранению неполадок
- Профилактические меры
Распространённые причины ошибок SSH‑права доступа
Ошибки, связанные с SSH‑правами, могут возникать по нескольким причинам:
Неверные права файлов: SSH‑ключи требуют строгих прав доступа (600 для приватных ключей, 644 для публичных). Если права слишком открыты, SSH отклонит их.
Повреждённые или отсутствующие ключи: Ключи могли быть удалены, повреждены или не сгенерированы должным образом.
Устаревшая конфигурация ключей в Heroku: В системе Heroku может отсутствовать ваш текущий ключ, либо он устарел.
Сетевые или брандмауэрные ограничения: Корпоративные сети, брандмауэры или VPN могут блокировать SSH‑соединения с серверами Heroku.
Несколько ключей: Если у вас несколько ключей, SSH может пытаться использовать неверный для соединения с Heroku.
Шаг 1: Проверка генерации SSH‑ключей и прав доступа
Сначала убедитесь, что ключи существуют и имеют правильные права:
Проверка существующих ключей
Откройте терминал и выполните:
ls -la ~/.ssh/
Вы должны увидеть файлы вроде id_rsa и id_rsa.pub (или id_ed25519 и id_ed25519.pub для новых ключей). Если их нет, создайте новые.
Генерация новых ключей (если нужно)
Если ключей нет, сгенерируйте их:
ssh-keygen -t ed25519 -C "your_email@example.com"
Нажмите Enter, чтобы принять путь по умолчанию, и при желании задайте парольную фразу.
Исправление прав файлов
SSH‑ключи требуют строгих прав. Выполните:
chmod 600 ~/.ssh/id_rsa
chmod 644 ~/.ssh/id_rsa.pub
Для ключей ED25519:
chmod 600 ~/.ssh/id_ed25519
chmod 644 ~/.ssh/id_ed25519.pub
Примечание: Если каталог
~/.sshотсутствует, создайте его командойmkdir -p ~/.sshи установите праваchmod 700 ~/.ssh.
Шаг 2: Обновление SSH‑ключей в Heroku
Даже если вы считаете, что ключ уже загружен, стоит проверить и обновить его в Heroku:
Копирование публичного ключа
Отобразите публичный ключ и скопируйте его:
cat ~/.ssh/id_rsa.pub
или для ED25519:
cat ~/.ssh/id_ed25519.pub
Добавление ключа в Heroku
Используйте CLI Heroku для добавления ключа:
heroku keys:add
Эта команда автоматически обнаружит ваш публичный ключ и загрузит его в Heroku.
В качестве альтернативы можно добавить ключ вручную:
heroku keys:add ~/.ssh/id_rsa.pub
Проверка ключей в Heroku
Список ключей:
heroku keys
Шаг 3: Тестирование SSH‑соединения с Heroku
Перед повторной попыткой развертывания проверьте соединение:
Базовый тест SSH
ssh -v git@heroku.com
Флаг -v выводит подробный лог, который поможет диагностировать проблемы.
Ожидаемый вывод
Вы должны увидеть что‑то вроде:
debug1: Remote protocol version 2.0, remote software heroku.com-HK-2
debug1: Offering public key: ~/.ssh/id_rsa RSA SHA256:...
...
debug1: Authentication succeeded (publickey).
Если в выводе появляется «Permission denied», вернитесь к Шагу 1 и проверьте права ключей.
Шаг 4: Альтернатива – аутентификация через Heroku CLI
Если SSH продолжает выдавать ошибки, можно использовать встроенную аутентификацию Heroku:
Вход в Heroku CLI
heroku login
Введите свои данные при запросе.
Использование Git с аутентификацией Heroku
После входа выполните:
git push heroku master
CLI Heroku автоматически обрабатывает аутентификацию, обходя проблемы с ключами.
Дополнительные шаги по устранению неполадок
Если вышеуказанные шаги не помогли, попробуйте следующее:
Очистка агента SSH и добавление ключей
ssh-agent -k # Завершить текущий агент
ssh-agent bash # Запустить новый агент
ssh-add ~/.ssh/id_rsa # Добавить ваш ключ
Проверка конфигурации SSH
Убедитесь, что файл ~/.ssh/config не содержит конфликтующих настроек:
Host heroku.com Hostname heroku.com User git IdentityFile ~/.ssh/id_rsa
Перегенерация ключей
Если текущие ключи повреждены, создайте новые:
ssh-keygen -t ed25519 -f ~/.ssh/heroku -C "heroku@yourdomain.com"
heroku keys:add ~/.ssh/heroku.pub
Проверка сетевой конфигурации
- Отключите VPN или прокси временно
- Попробуйте подключиться с другой сети (мобильный хотспот и т.д.)
- Убедитесь, что брандмауэр не блокирует порт 22 (SSH)
Профилактические меры
Чтобы избежать подобных проблем в будущем:
Регулярное обслуживание ключей
- Храните резервные копии ключей
- Обновляйте ключи при подозрении на компрометацию
- Используйте парольные фразы для дополнительной защиты
Лучшие практики аутентификации в Heroku
- Используйте
heroku loginдля обычной разработки - Поддерживайте актуальную версию Heroku CLI
- Рассмотрите возможность использования API‑токенов для автоматизированных развертываний
Конфигурация, специфичная для окружения
- Создавайте отдельные ключи для разных окружений
- Управляйте несколькими ключами через файл конфигурации SSH
- Документируйте процесс развертывания для команды
Заключение
Устранение ошибок SSH‑права доступа в Heroku обычно сводится к проверке и корректировке прав ключей, правильной генерации ключей и подтверждению их наличия в системе Heroku. Следуя систематическим шагам, описанным выше, вы сможете выявить и устранить корневую причину проблемы. Альтернативные методы аутентификации через Heroku CLI предоставляют надёжный запасной вариант, если соединения по SSH продолжают падать. Соблюдение чистоты SSH‑практик и актуальность методов аутентификации помогут предотвратить повторение подобных ошибок в вашем рабочем процессе.