Другое

Как исправить ошибки 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‑права доступа

Ошибки, связанные с SSH‑правами, могут возникать по нескольким причинам:

Неверные права файлов: SSH‑ключи требуют строгих прав доступа (600 для приватных ключей, 644 для публичных). Если права слишком открыты, SSH отклонит их.

Повреждённые или отсутствующие ключи: Ключи могли быть удалены, повреждены или не сгенерированы должным образом.

Устаревшая конфигурация ключей в Heroku: В системе Heroku может отсутствовать ваш текущий ключ, либо он устарел.

Сетевые или брандмауэрные ограничения: Корпоративные сети, брандмауэры или VPN могут блокировать SSH‑соединения с серверами Heroku.

Несколько ключей: Если у вас несколько ключей, SSH может пытаться использовать неверный для соединения с Heroku.


Шаг 1: Проверка генерации SSH‑ключей и прав доступа

Сначала убедитесь, что ключи существуют и имеют правильные права:

Проверка существующих ключей

Откройте терминал и выполните:

bash
ls -la ~/.ssh/

Вы должны увидеть файлы вроде id_rsa и id_rsa.pub (или id_ed25519 и id_ed25519.pub для новых ключей). Если их нет, создайте новые.

Генерация новых ключей (если нужно)

Если ключей нет, сгенерируйте их:

bash
ssh-keygen -t ed25519 -C "your_email@example.com"

Нажмите Enter, чтобы принять путь по умолчанию, и при желании задайте парольную фразу.

Исправление прав файлов

SSH‑ключи требуют строгих прав. Выполните:

bash
chmod 600 ~/.ssh/id_rsa
chmod 644 ~/.ssh/id_rsa.pub

Для ключей ED25519:

bash
chmod 600 ~/.ssh/id_ed25519
chmod 644 ~/.ssh/id_ed25519.pub

Примечание: Если каталог ~/.ssh отсутствует, создайте его командой mkdir -p ~/.ssh и установите права chmod 700 ~/.ssh.


Шаг 2: Обновление SSH‑ключей в Heroku

Даже если вы считаете, что ключ уже загружен, стоит проверить и обновить его в Heroku:

Копирование публичного ключа

Отобразите публичный ключ и скопируйте его:

bash
cat ~/.ssh/id_rsa.pub

или для ED25519:

bash
cat ~/.ssh/id_ed25519.pub

Добавление ключа в Heroku

Используйте CLI Heroku для добавления ключа:

bash
heroku keys:add

Эта команда автоматически обнаружит ваш публичный ключ и загрузит его в Heroku.

В качестве альтернативы можно добавить ключ вручную:

bash
heroku keys:add ~/.ssh/id_rsa.pub

Проверка ключей в Heroku

Список ключей:

bash
heroku keys

Шаг 3: Тестирование SSH‑соединения с Heroku

Перед повторной попыткой развертывания проверьте соединение:

Базовый тест SSH

bash
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

bash
heroku login

Введите свои данные при запросе.

Использование Git с аутентификацией Heroku

После входа выполните:

bash
git push heroku master

CLI Heroku автоматически обрабатывает аутентификацию, обходя проблемы с ключами.


Дополнительные шаги по устранению неполадок

Если вышеуказанные шаги не помогли, попробуйте следующее:

Очистка агента SSH и добавление ключей

bash
ssh-agent -k  # Завершить текущий агент
ssh-agent bash  # Запустить новый агент
ssh-add ~/.ssh/id_rsa  # Добавить ваш ключ

Проверка конфигурации SSH

Убедитесь, что файл ~/.ssh/config не содержит конфликтующих настроек:

bash
Host heroku.com
  Hostname heroku.com
  User git
  IdentityFile ~/.ssh/id_rsa

Перегенерация ключей

Если текущие ключи повреждены, создайте новые:

bash
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‑практик и актуальность методов аутентификации помогут предотвратить повторение подобных ошибок в вашем рабочем процессе.

Источники

  1. Heroku Dev Center – SSH Keys
  2. OpenSSH Documentation – File Permissions
  3. Git Documentation – Pushing to a Remote
  4. Heroku CLI Authentication Methods
  5. SSH Troubleshooting Guide
Авторы
Проверено модерацией
Модерация