git push heroku master Permission denied (publickey). фатальный: удаленный конец неожиданно повесил трубку

85

Пожалуйста, извините за небольшое разочарование, которое я постараюсь держать под контролем, поскольку Heroku использует SO в качестве поддержки клиентов (что я считаю дрянным, если не сказать больше).

Последние пять часов я пытался заставить приложение опубликовать, но неизменно что-то идет не так с ключами. Я прочитал десятки статей и пробовал подсказку за подсказкой, пытаясь выяснить, где в этом дурацком, совершенно непрозрачном процессе Heroku ошибается.

Мой вариант использования не так уж и сложен: я создал новую пару ключей для своих приложений heroku. Я сделал этот ключ своим:

  > heroku keys
  === travis@xxxx.com Keys
  ssh-rsa AAAAB3NzaC...avOqfA7ZBd travis@xxxx.com

Я могу без проблем войти в систему и «создать» приложение (глупое имя, поскольку создается впечатление, что создается репозиторий git, а не какое-либо приложение). Но каждый * долбанный * время , когда я пытаюсь нажать мое приложение, я получаю:

  > git push heroku master
  Permission denied (publickey).
  fatal: The remote end hung up unexpectedly

Я не имею никакого представления о том, что с этим творится WTF; Я просто застрял, бьюсь головой о клавиатуру, не имея выхода, но надеюсь, что всемогущий бог Google сможет мне ответить. И Google не отвечает на него (ну, позвольте мне взять это обратно, я видел около дюжины способов ответить на это).

Для системы, которая должна быть простой, это шутка. Мне нравится идея Heroku, но, потратив пять часов на то, чтобы ничего не сделать, я подумал, может быть, это неправильный выбор.

Трэвис Дженсен
источник
7
Я хочу сообщить вам, что служба поддержки, которую мы предоставляем для Heroku, на высшем уровне.
Роберт Харви
1
Меня всегда впечатляло качество ответов в SO. Я просто считаю, что это неубедительный способ обеспечить поддержку клиентов по продукту, независимо от того, насколько она техническая. Что произойдет, если мне придется предоставить данные личного кабинета? Не совсем то, чем я хочу поделиться с миром (как я понял, когда мне нужно было изменить исходный пост).
Трэвис Дженсен,
Вы видели этот вопрос ? Особенно часть о регистрации вашего открытого ключа с помощью git?
Кен Уайт
7
Та же проблема, есть решение здесь: http://www.whatibroke.com/?p=284
1
Связанное решение Реми сработало для меня.
Deborah

Ответы:

149

В Интернете есть множество решений. Я постараюсь свести доступные варианты в один пост. Пожалуйста, пытайтесь подключиться снова после каждого шага.

  • Шаг 1. Попытайтесь добавить ваш открытый ключ в Heroku.

    heroku keys:add ~/.ssh/id_rsa.pub // or just heroku keys:add and it will prompt you to pick one of your keys
    
  • Шаг 2. Создайте новый набор ключей SSH, затем повторите первый шаг.

    https://help.github.com/articles/generating-ssh-keys

  • Шаг 3. Проверьте и / или измените файл конфигурации

    vim ~/.ssh/config
    
    Host heroku.com
    Hostname heroku.com 
    Port 22 
    IdentitiesOnly yes 
    IdentityFile ~/.ssh/id_rsa    <--- Should be your public SSH key
    TCPKeepAlive yes 
    User jsmith@gmail.com
    
  • Шаг 4: Удалите heroku remote из git, воссоздайте соединение, добавление удаленного через heroku create будет вариантом только для новых репозиториев. Обязательно удалите старое репо, которое вы изначально пытались создать.

     $ git remote rm heroku
     $ heroku create
    
  • Шаг 5: переустановите Heroku Toolkit

Jquintana
источник
10
Шаг 1 помог мне! (Я воссоздал свои SSH-ключи для своей машины и Github, прежде чем отправлять их в Heroku.) Спасибо!
ATSiem
1
Ничего из этого у меня не сработало, несмотря на то, что я очень тщательно делал это сверху дважды с чистой установкой и всем остальным. В конце концов, все, что заставило все это работать, - это убедиться, что мой ключ GitHub и ключ Heroku совпадают. Я даже не понимаю, почему это имело значение, если только я каким-то образом не заметил, что Heroku полагается на GitHub, но каким-то образом это устранило проблему. Ключи можно изменить в настройках аккаунта на GitHub. Я думаю, вам следует добавить это в свой ответ.
temporary_user_name
1
Я считаю, что строка IdentityFile должна быть вашим личным ключом ssh. См. Stackoverflow.com/a/8874946/2816571
Пол
2
Вы имели в виду heroku create? git heroku createэто не вещь, насколько я знаю.
Майкл Дорст
1
Вау. Я не могу придумать ничего приятного об этом опыте. Я следовал многочисленным рецептам, включая удаление / переустановку git, github и замену putty на msysgit. Шаг 1-3, наконец, сделал это, но изменения должны были быть в github ssh_config. После того, как мои ключи github несколько раз сбрасывались и сбрасывались без каких-либо проблем, процесс heroku был действительно разочаровывающим.
Wilk
13

Ваш ключ heroku и ключи github не синхронизированы.

  • Определите, какой ключ вы хотите использовать (рекомендуется создать новый, например, heroku_rsa).

  • Добавьте ключ в github.

  • Добавьте тот же ключ в heroku, используя:heroku keys:add

Роберт Кристиан
источник
4
Мне очень, очень, очень жаль, что я не прочитал этот ответ четыре часа назад. Хотя я предполагал, что многому научился на этом пути, так что не все так плохо.
temporary_user_name
У меня есть две разные учетные записи Heroku (одна использует мою рабочую электронную почту для проектов на работе, другая - мою личную электронную почту для внештатных проектов). Heroku не позволит мне использовать один и тот же ключ для обоих. Итак, как я могу использовать свой ключ Github для обоих? (И почему Heroku в любом случае специально должен использовать мой ключ Github? Какое отношение Heroku имеет к Github? Что, если бы я не использовал Github?) Я так сбит с толку
callum
Работал как шарм! Благодарность!
Shashank
2

Я столкнулся с той же проблемой, и это моя теория относительно того, что происходит:

Я подписался на Heroku очень давно, дав им свой открытый ключ github. При попытке выполнить обычный поиск git push heroku masterон ищет мой закрытый ключ, который находится по адресу ~/.ssh/github_rsa. Затем он молча терпит неудачу с отправленным вами сообщением.

Однако позже я попытался подключиться к sshдругому серверу, используя -iфлаг, чтобы указать мой «идентификационный файл» (т. Е. Закрытый ключ), и он запросил у меня пароль к моему закрытому ключу. «Разблокировав» закрытый ключ, git push heroku masterкоманда работает. Некоторые выводы:

  • Пока sshвам будет предложено ввести пароль к файлу удостоверения личности, gitне будет.
  • Если вы разблокируете файл удостоверений другим способом, например ssh, он останется разблокированным для вашего gitиспользования.
  • Похоже, что нет какой-либо документации о том, как окончательно удалить защиту паролем в файле идентификации, в том числе с помощью общей команды unix keytool.
  • Вышеупомянутые решения по созданию новой пары открытого / закрытого ключей кажутся обходным путем для этой проблемы с паролем, не зная, что проблема.
Оуэнсмартин
источник
1

Мне показалось, что проблема в том, что у меня в фоновом режиме работал ssh-agent, и к нему не был добавлен соответствующий закрытый ключ.

ps -afe | grep ssh-agent

ssh-add ~/.ssh/id_rsa_heroku_github

Еще мне пришлось добавить публичный ключ в github (вручную) и heroku

heroku keys:add ~/.ssh/id_rsa_heroku_github.pub
коббербой
источник
0

Если ни одно из других решений не работает для вас, убедитесь, что вы вошли в оболочку Linux под своей учетной записью, а не с учетной записью root .

Таким образом, если вы работаете с пользователем, который не является владельцем ваших ключей ssh, git будет искать неправильные ключи для аутентификации.

Сауло Фалькао
источник