git push heroku master Odmowa dostępu (publickey). fatal: zdalny koniec niespodziewanie się rozłączył

85

Przepraszam za odrobinę frustracji, którą postaram się trzymać w ryzach, ponieważ Heroku używa SO jako wsparcia klienta (co uważam za co najmniej tandetne).

Od pięciu godzin próbuję zmusić aplikację do opublikowania, ale niezmiennie coś idzie nie tak z kluczami. Przeczytałem dziesiątki artykułów i wypróbowałem wskazówkę za wskazówką, próbując dowiedzieć się, gdzie w tym głupim, całkowicie nieprzejrzystym procesie Heroku schrzanił.

Mój przypadek użycia nie jest taki trudny: stworzyłem nową parę kluczy dla moich aplikacji heroku. Ustawiłem ten klucz jako mój klucz:

  > heroku keys
  === [email protected] Keys
  ssh-rsa AAAAB3NzaC...avOqfA7ZBd [email protected]

Mogę się zalogować i „stworzyć” aplikację (głupia nazwa, bo wygląda na to, że tworzy repozytorium git, a nie jakąkolwiek aplikację) bez problemu. Ale za każdym * cholernym * razem, gdy próbuję uruchomić moją aplikację, otrzymuję:

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

Nie mam wglądu w to, że WTF się z tym dzieje; Utknąłem waląc głową w klawiaturę bez ucieczki, ale mam nadzieję, że wszechmocny bóg Google może na to odpowiedzieć. A Google nie odpowiada na to (cóż, cofnę się, widziałem kilkanaście sposobów, aby odpowiedzieć na to pytanie).

Jak na system, który ma być łatwy, to żart. Podoba mi się pomysł Heroku, ale po zrobieniu pięciu godzin, aby nic nie zrobić, myślę, że może to zły wybór.

Travis Jensen
źródło
7
Chcę, żebyś wiedział, że obsługa klienta, którą zapewniamy dla Heroku, jest tandetna pierwszej klasy.
Robert Harvey
1
Nigdy nie byłem pod wrażeniem jakości odpowiedzi w SO. Po prostu uważam, że jest to kiepski sposób zapewnienia obsługi klienta dla produktu, bez względu na jego techniczny charakter. Co się stanie, jeśli będę musiał podać dane konta osobistego? Nie do końca to, czym chcę się podzielić ze światem (jak zdałem sobie sprawę, kiedy musiałem zmodyfikować oryginalny post).
Travis Jensen
Widziałeś to pytanie ? Zwłaszcza część dotycząca rejestracji klucza publicznego w git?
Ken White,
7
Ten sam problem, rozwiązanie otrzymałem tutaj: http://www.whatibroke.com/?p=284
1
Połączone rozwiązanie Remiego zadziałało dla mnie.
Deborah

Odpowiedzi:

149

W Internecie istnieje wiele rozwiązań. Spróbuję zebrać dostępne opcje w jednym poście. Po każdym kroku spróbuj ponownie nawiązać połączenie.

  • Krok 1: Spróbuj dodać swój klucz publiczny do Heroku

    heroku keys:add ~/.ssh/id_rsa.pub // or just heroku keys:add and it will prompt you to pick one of your keys
    
  • Krok 2: Wygeneruj nowy zestaw kluczy SSH, a następnie spróbuj ponownie wykonać pierwszy krok

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

  • Krok 3: Sprawdź i / lub zmodyfikuj plik konfiguracyjny

    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 [email protected]
    
  • Krok 4: Usuń pilota heroku z git, aby odtworzyć połączenie, dodanie pilota przez heroku create będzie dostępne tylko dla nowych repozytoriów. Pamiętaj, aby usunąć stare repozytorium, które pierwotnie próbowano utworzyć

     $ git remote rm heroku
     $ heroku create
    
  • Krok 5: Zainstaluj ponownie Heroku Toolkit

jquintana
źródło
10
Krok 1 załatwił mi sprawę! (Odtworzyłem klucze SSH dla mojego komputera i Githuba przed wysłaniem ich do Heroku.) Dzięki!
ATSiem
1
ŻADNE z tego nie zadziałało, mimo że bardzo starannie robiłem to od góry dwa razy z czystymi instalacjami i wszystkim. Ostatecznie wszystko, co sprawiło, że wszystko działało, to upewnienie się, że mój klucz GitHub i klucz Heroku są takie same. Nie rozumiem nawet, dlaczego to miało znaczenie, chyba że jakoś nie zauważyłem, że Heroku polega na GitHubie, ale w jakiś sposób rozwiązało problem. Klucze można zmienić w ustawieniach konta na GitHub. Myślę, że powinieneś dodać to do swojej odpowiedzi.
temporary_user_name
1
Uważam, że wiersz IdentityFile powinien być Twoim prywatnym kluczem ssh. Zobacz stackoverflow.com/a/8874946/2816571
Paul,
2
Czy miałeś na myśli heroku create? git heroku createnie jest rzeczą, o ile wiem.
Michael Dorst
1
Łał. Nie mogę wymyślić nic przyjemnego do powiedzenia na temat tego doświadczenia. Postępowałem zgodnie z licznymi przepisami, w tym odinstalowywanie / ponowne instalowanie git, github i zamiana putty na msysgit. Krok 1-3 w końcu to zrobił, ale zmiana musiała być w github ssh_config. Po kilkukrotnym upuszczeniu i zresetowaniu kluczy github bez żadnych problemów proces heroku był naprawdę frustrujący.
wilk
13

Twój klucz Heroku i klucze github nie są zsynchronizowane.

  • Określ, którego klucza chcesz użyć (zalecamy utworzenie nowego, np. Heroku_rsa).

  • Dodaj klucz do github.

  • Dodaj ten sam klucz do heroku za pomocą:heroku keys:add

Robert Christian
źródło
4
I naprawdę, naprawdę, naprawdę żałuję przeczytać tę odpowiedź cztery godziny temu. Chociaż przypuszczałem, że po drodze wiele się nauczyłem, więc nie wszystko źle.
temporary_user_name
Mam dwa różne konta Heroku (jedno używające mojej służbowej poczty e-mail, do projektów w pracy, drugie używające mojego osobistego adresu e-mail, do projektów niezależnych). Heroku nie pozwala mi używać tego samego klucza do obu. Jak więc mogę używać mojego klucza Github do obu tych celów? (I dlaczego Heroku w ogóle musi używać mojego klucza Github? Co Heroku ma wspólnego z Githubem? Co jeśli nie korzystałem z Github?) Jestem taki zdezorientowany
callum
Działał jak urok! Dzięki!
Shashank
2

Napotkałem ten sam problem i oto moja teoria na temat tego, co się dzieje:

Zarejestrowałem się w Heroku dawno temu, przekazując im swój klucz publiczny github. Próbując zwykle git push heroku master, szuka mojego klucza prywatnego, znajdującego się pod adresem ~/.ssh/github_rsa. Następnie po cichu kończy się niepowodzeniem z wysłaną wiadomością.

Jednak później próbowałem połączyć się sshz innym serwerem, używając -iflagi, aby określić mój „plik tożsamości” (tj. Klucz prywatny) i poprosił mnie o hasło do mojego klucza prywatnego. Po „odblokowaniu” klucza prywatnego git push heroku masterpolecenie działa. Kilka wniosków:

  • Chociaż sshzapyta o hasło do pliku tożsamości, gitnie.
  • Jeśli odblokujesz plik tożsamości inną metodą, na przykład ssh, pozostanie on odblokowany do gitużytku.
  • Wydaje się, że nie ma żadnej dokumentacji, jak trwale usunąć ochronę hasłem z pliku tożsamości, w tym za pomocą zwykłej komendy unix keytool.
  • Powyższe rozwiązania dotyczące tworzenia nowej pary kluczy publiczny / prywatny wydają się być obejściem tego problemu z hasłem, nie wiedząc, że to jest problem.
owensmartin
źródło
1

W przypadku mnie wydawało się, że problem polegał na tym, że ssh-agent działał w tle, a odpowiedni klucz prywatny nie został do niego dodany.

ps -afe | grep ssh-agent

ssh-add ~/.ssh/id_rsa_heroku_github

Musiałem też dodać klucz publiczny do github (ręcznie) i heroku

heroku keys:add ~/.ssh/id_rsa_heroku_github.pub
cobberboy
źródło
0

Jeśli żadna z pozostałych rozwiązań pracować dla Ciebie, upewnij się, że jesteś zalogowany linux shell z Twojego konta, a nie z głównego konta.

W ten sposób, jeśli pracujesz z użytkownikiem, który nie jest właścicielem twoich kluczy ssh, git będzie szukał niewłaściwych kluczy do uwierzytelnienia

Saulo Falcao
źródło