git push heroku master Дозвіл відмовлено (publickey). фатально: віддалений кінець несподівано повісився


85

Будь ласка, вибачте за трохи розчарувань, які я намагатимусь тримати під контролем, оскільки Heroku використовує SO як підтримку своїх клієнтів (що, на мою думку, є неякісним).

Останні п’ять годин я намагався отримати заявку на публікацію, але незмінно щось не вдається з ключами. Я прочитав десятки статей і пробував підказку за підказкою, намагаючись зрозуміти, де в дурному, абсолютно непрозорому процесі Героку псується.

Мій варіант використання не такий складний: я створив нову пару ключів для своїх додатків heroku. Я встановив цей ключ як свій ключ:

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

Я можу увійти в систему і "створити" програму (дурне ім'я, оскільки, схоже, вона створює git repo, а не будь-яку програму) без проблем. Але кожен * довбали * час , коли я намагаюся натиснути моє додаток, я отримую:

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

Я не маю уявлення про WTF, що з ним відбувається; Я просто застряг, вдарившись головою про клавіатуру, не маючи можливості звернутися, але сподіватися, що всемогутній бог Google може відповісти на це. І Google не відповідає на нього (ну, дозвольте мені це повернути, я бачив близько десятка способів відповісти на це).

Для системи, яка повинна бути легкою, це жарт. Мені подобається ідея Heroku, але, взявши п’ять наших, щоб абсолютно нічого не зробити, я думаю, можливо, це неправильний вибір.


7
Повідомте, що підтримка клієнтів, яку ми надаємо Heroku, є першокласною поганою.
Роберт Харві,

1
Я ніколи не був вражений якістю відповідей у ​​SO. Я просто думаю, що це кульгавий спосіб надати підтримку споживачам продукту, яким би технічним він не був. Що станеться, якщо мені доведеться надати дані особистого кабінету? Не зовсім те, чим я хочу поділитися зі світом (як я зрозумів, коли мені потрібно було змінити оригінальний пост).
Тревіс Дженсен

Ви бачили це питання ? Особливо частина про реєстрацію вашого відкритого ключа в git?
Ken White

7
Те саме питання, рішення отримано тут: http://www.whatibroke.com/?p=284

1
Зв’язане рішення Ремі працювало для мене.
Дебора

Відповіді:


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 з git, відтворіть підключення, додавши віддалений за допомогою heroku create, буде лише опцією для нових сховищ. Обов’язково видаліть старе репо, яке ви спочатку намагалися створити

     $ git remote rm heroku
     $ heroku create
    
  • Крок 5: Перевстановіть Heroku Toolkit


10
Крок 1 зробив для мене фокус! (Однак я відтворив свої SSH-ключі для моєї машини та Github, перш ніж відсунути їх до Heroku.) Дякую!
ATSiem

1
Жодне з цього не працювало для мене, незважаючи на те, що дуже обережно робив це зверху двічі, чистими установками та іншим. Врешті-решт, все, що змусило це працювати, це переконатися, що мій ключ GitHub і ключ Heroku однакові. Я навіть не розумію, чому це змінило ситуацію, якщо я якось не помітив, що Heroku покладається на GitHub, але якось це вирішило проблему. Ключі можна змінити в налаштуваннях облікового запису на GitHub. Думаю, вам слід додати це у свою відповідь.
тимчасове_користувацьке

1
Я вважаю, що рядок IdentityFile повинен бути вашим приватним ключем ssh. Дивіться stackoverflow.com/a/8874946/2816571
Павло,

2
Ви мали на увазі heroku create? git heroku createце не річ, наскільки я знаю.
Майкл Дорст

1
Ого. Не можу придумати нічого приємного сказати про цей досвід. Я дотримувався численних рецептів, включаючи видалення / перевстановлення git, github та заміну шпаклівки на msysgit. Крок 1-3 нарешті зробив це, але зміна мала бути у github ssh_config. Після декількох разів скидання та скидання моїх ключів github без жодних проблем процес героку справді засмучував.
wilk

13

Ваша клавіша heroku та github не синхронізовані.

  • Визначте, який ключ ви хочете використовувати (рекомендуємо створити новий, тобто heroku_rsa).

  • Додайте ключ до github.

  • Додайте той самий ключ до heroku, використовуючи:heroku keys:add


4
Я дійсно, дійсно, дійсно шкода , що я повинен був прочитати цю відповідь чотири години тому. Хоча я припускав, що багато чому навчився в дорозі, тож, не все погано.
тимчасове_користувацьке

У мене є два різні акаунти Heroku (один використовує мою робочу електронну пошту, для проектів на роботі, інший - за допомогою моєї особистої електронної пошти, для фріланс-проектів). Heroku не дозволяє мені використовувати один і той же ключ для обох. То як я можу використовувати свій ключ Github для обох? (А чому Heroku спеціально потрібно використовувати мій ключ Github? Яке відношення Heroku має до Github? Що, якби я не використовував Github?) Я такий розгублений
callum

Працював як оберіг! Дякую!
Шашанк,

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 зі своїм обліковим записом, а не з кореневим .

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.