Nie można wysłać do Heroku z powodu odcisku palca klucza


131

Jestem nowy w Railsach i próbowałem wdrożyć bardzo prostą aplikację w Heroku. To druga aplikacja, którą wdrażam, i pierwszą, którą udało mi się zrobić dobrze. Jednak mam pewne problemy z tym. Za każdym razem, gdy wykonuję poleceniegit push heroku master ”, pojawia się ten błąd:

! Twój klucz z odciskiem palca xx: xx: xx: xx: xx: xx: xx: xx: xx: xx: xx: xx: xx: xx: xx: xx nie ma uprawnień do> dostępu do my_heroku_app.

fatal: zdalny koniec niespodziewanie się rozłączył

Próbowałem zarządzać moimi kluczami po zalogowaniu się do heroku. Jeśli wpiszę w konsoli „ klucze heroku ”, otrzymam:

Brak kluczy do mojego adresu e-mail.

Jeśli jednak uruchomię komendęklucze heroku: dodaj ”, otrzymam

Znaleziono istniejący klucz publiczny: /Users/michele/.ssh/id_rsa.pub Przesyłanie klucza publicznego ssh /Users/michele/.ssh/id_rsa.pub! Odcisk palca już istnieje. Użyj jednego klucza ssh na konto Heroku

Proszę pomóż mi! To takie frustrujące, nie mam pojęcia, co się stało! Dziękuję Ci

Odpowiedzi:


287

Miałem ten sam problem, śledziłem ten post i inne tego samego rodzaju bez powodzenia: - ((

Wreszcie znalazłem rozwiązanie: musiałem dodać moją nową tożsamość rsa do mojego komputera!

Przede wszystkim utworzyłem nowy klucz rsa:

ssh-keygen -t rsa -C "giordano.scalzo[at]gmail.com" -f  ~/.ssh/id_rsa_heroku

następnie dodałem go do mojego komputera

ssh-add ~/.ssh/id_rsa_heroku

i wreszcie do Heroku

heroku keys:add ~/.ssh/id_rsa_heroku.pub

Po tym,

git push heroku master

działał jak urok!

Mam nadzieję że to pomoże.


47
To było dla mnie naprawdę bliskie. Ale była jeszcze jedna rzecz. Miałem dwa konta heroku. Pierwsza dodała mój domyślny klucz SSH do mojego komputera. Bez względu na to, co zrobiłem, próbując naprawić moje drugie konto, nie potrwa to, dopóki nie usunę mojego domyślnego klucza z pierwszego konta. SSH-AGENT wyśle ​​domyślnie pierwszy klucz, powodując ten problem. Poprawka polega na utworzeniu określonych kluczy dla heroku (nie domyślnych) dla każdego konta
Tom Carchrae

13
Miałem ten sam problem co @TomCarchrae. Wylogowałem się z konta, które wydawało się trwale zerwane heroku logout, zalogowałem się na inne konto i usunąłem domyślny klucz RSA z tego konta. Potem mogłem naciskać tym nowo wygenerowanym kluczem.
Ross Allen,

14
Dla mnie osobiście zrobiłem odpowiednik, ssh-add ~/.ssh/id_rsa_herokuchociaż mój był taki, ssh-add ~/.ssh/identity.heroku.fooponieważ używam również https://github.com/ddollar/heroku-accounts (menedżera wielu kont dla Heroku).
user664833

1
jeszcze jedna rzecz, o której należy pamiętać - jeśli masz zbyt wiele kluczy SSH, nie będzie mógł się zalogować, ponieważ próbuje klucze po kolei (a następnie zostajesz wyrzucony z logowania zbyt wiele niepowodzeń). wydaje się, że jest to wada w ssh-agent (i tak w ubuntu, ale zakładam też, że inne implementacje). więc jeśli wyrywasz sobie włosy, spróbuj przenieść swój katalog ~ / .ssh i rozpocząć nowy (możesz potem ciągnąć klucze jeden po drugim).
Tom Carchrae

7
Możesz wpłynąć na to, który klucz zostanie wysłany, dodając wpis hosta w ~ / .ssh / config dla heroku.com wskazujący na żądany klucz. To była dla mnie szybka naprawa, ponieważ ciągle próbował użyć mojego domyślnego klucza i kończyło się niepowodzeniem. Jednak to prawdopodobnie nie pomoże w przypadku wielu kont.
dnewcome

61

Ja też mam wiele kluczy i wiele kont heroku, więc napotykam ten problem co kilka miesięcy. Jak wspomniano Giordano Scalzo, Tom Carchrae i user664833, głównym problemem jest ssh-agent, którym sterujesz za pomocą ssh-addpolecenia. Strona podręcznika ( man ssh-add) jest właściwie dość przejrzysta i zwięzła, więc sprawdź to.

Możesz wymienić wszystkie klucze, o których wie ssh-agent:

ssh-add -l

Możesz usunąć wszystkie klucze, o których wie ssh-agent:

ssh-add -D

Lub usuń określony klucz za pomocą

ssh-add -d ~/.ssh/id_rsa_example_key_file_use_your_own

Nie martw się! W rzeczywistości nie usuwasz kluczy, a jedynie zmieniasz te, których ssh-agent automatycznie próbuje użyć, na przykład podczas próby wypchnięcia do heroku. W razie potrzeby łatwo jest dodawać i usuwać klucze, więc jeśli denerwuję się tym problemem, najłatwiejszym sposobem rozwiązania tego jest usunięcie wszystkich kluczy i dodanie z powrotem tylko tego, którego chcę w tej chwili użyć.

ssh-add -D
ssh-add ~/.ssh/id_rsa_example_use_this_one_i_mean_it

1
to działało dobrze dla mnie, jednak próbując dodać z powrotem mój domyślny klucz ssh, ciągle monitował o hasło (w Mtn Lion), nie sądzę, że mam jedno? Zrestartowałem i wróciłem do mojego domyślnego ssh wszystko ok - również znalazłem ten stackoverflow.com/questions/7927750/ ... który działa świetnie
house9

uderzałem moją głową o ścianę przez dłuższą chwilę nad tym i to był ostatni wymagany krok - dzięki!
griswoldbar

Jeśli wypróbowałeś pierwszą metodę, a potem tę (i otrzymujesz błąd Odmowa uprawnień (publickey) przy próbie przekazania do pilota Heroku), prawdopodobnie zapomniałeś ponownie uruchomić klucze heroku: add command. W każdym razie bardzo dziękuję! To zrobiło to dla mnie.
Hairgami_Master

38

Twój komputer ma klucz SSH, ale ten klucz SSH jest powiązany z innym kontem Heroku.

Jeśli chcesz używać obu kont dla różnych aplikacji na tym samym komputerze, powinieneś utworzyć nowy klucz SSH na swoim komputerze i przesłać go do Heroku:

$ ssh-keygen

Pamiętaj, aby zapisać go jako „/Users/User/.ssh/new_id_rsa.pub”, gdy pojawi się monit.

$ heroku keys:add /Users/User/.ssh/new_id_rsa.pub 

Następnie trzeba dodać alternatywny Host heroku.comdo swoich ~/.ssh/config:

Host heroku-alt
HostName heroku.com
IdentityFile ~/.ssh/new_id_rsa

A następnie zaktualizuj .git/configw swoim projekcie, aby używał aliasu hosta:

[remote "heroku"]
  url = git@heroku-alt:myapp.git
  fetch = +refs/heads/*:refs/remotes/heroku/*

Wybierając między plikami poszczególnych projektów herokui heroku-altzdalnie .git/config, możesz zarządzać, które projekty używają danych uwierzytelniających.


1
Tak, to też był problem dla mnie. Dostęp do dwóch kont Heroku z tego samego klienta. Dzięki.
Bernard

Staram się zrobić z tej metody, ale „Host Heroku-alt” daje mi błąd: Host heroku-alt not found: 3(NXDOMAIN). Umieszczam to w terminalu Mountain Lion. ~/.ssh/configteż nie istnieje, tylko kilka .pubplików i jeden o nazwie known_hosts. A pomysły?
JVG,

@Jascination Będziesz musiał utworzyć ~ / .ssh / config i wstawić zawartość wymienioną w odpowiedzi. Po zakończeniu zapisz plik i będzie zawierać Host, HostNameoraz IdentityFilewiersze. Powinno wtedy działać dobrze.
Daniel X Moore

3
Świetny! Ta technika jest taka elegancka!
kinopyo

Człowiek! Jesteś niesamowity. Wykonywanie krok po kroku w końcu przyniosło mi ulgę. Dziękuję Ci !!
softvar

14

Oto bardzo jasne wyjaśnienie, którego brakuje w dokumentacji Heroku lub innych odpowiedziach na to pytanie. Przynajmniej wszystkie informacje nie pojawiają się w jednym miejscu. Pozwala również zrozumieć problem w sposób, którego nie robi narzędzie kont.

Heroku identyfikuje Cię na 2 sposoby:

Pierwszy znajduje się w .git / config

[heroku]
    account = acccount_name

Wydaje się, że pozwala to na wykonywanie podstawowych operacji przy użyciu heroku

Drugim sposobem, w jaki heroku identyfikuje Cię, jest dowolna operacja wykorzystująca ssh (git push). Heroku zidentyfikuje Cię za pomocą klucza SSH, jak podano tutaj: https://devcenter.heroku.com/articles/keys

Ta para kluczy jest używana do silnej kryptografii i jednoznacznie identyfikuje Cię jako programistę podczas wypychania zmian w kodzie.

Dlatego każde konto heroku, na którym pracujesz, będzie musiało wysłać inny klucz do heroku podczas korzystania z ssh. Postępuj zgodnie z dowolnym samouczkiem, aby utworzyć klucze ssh.

Kluczem jest uzyskanie przez SSH różnych kluczy dla każdego konta Heroku. Jak to konfigurujesz? Musisz zrobić 2 rzeczy:

1) Musisz utworzyć „fikcyjną” domenę, którą Twój plik .ssh / config przechwyci i ponownie skonfiguruje. To powie ssh "rzeczywistą" domenę, którą chcesz i jakiego specjalnego klucza ssh użyć.

Host heroku.my_unique_key
  HostName heroku.com
  IdentityFile ~/.ssh/identity.heroku.my_unique_key
  IdentitiesOnly yes

2) Zmień plik .git / config, aby używał tego podczas używania git push. Zamiast heroku.com użyj fikcyjnej domeny, którą ustawiłeś w swoim .ssh / config

[remote "heroku"]
    url = git@heroku.com.git


[remote "heroku"]
    url = git@heroku.my_unique_key:myapp.git

To wszystko :) Trochę skomplikowane i jednocześnie trochę proste. Odkrycie tych informacji zajęło mi 3 lata walenia głową w ścianę i prób i błędów. Powinien być gdzieś jasno udokumentowany, ale przynajmniej to początek.


Unikalna nazwa hosta była moim problemem. Dziękuję bardzo pixelearth.
FluffyJack,

Muchos Gracias Por Favor
EE33

9

będziesz musiał utworzyć nowe klucze i je dodać

określ nową nazwę pliku po uruchomieniu

ssh-keygen

wtedy (w moim przypadku)

heroku keys:add /home/alex/.ssh/alex_heroku_rsa.pub

3

Mam ten sam problem w zeszłym tygodniu. Ten link pomógł mi. Mam nadzieję, że ci to trochę pomoże. http://devcenter.heroku.com/articles/keys


Widziałem ten link, próbowałem usunąć i ponownie dodać moje klucze, ale nadal nie mogę go uruchomić.
mre

Czy rozwiązałeś ten problem?
Benjamin,

1
Czy możesz podsumować instrukcje pod tym linkiem? Staramy się unikać tutaj odpowiedzi zawierających tylko linki.
woskowany orzeł

To wyjaśnia tylko, jak generować klucze, a nie jak zarządzać wieloma.
Macario,

3

W moim przypadku heroku keysmiał już wymieniony prawidłowy klucz. Więc wszystko, co musiałem zrobić, to uruchomić, ssh-add /path/to/that/keya potem wszystko zaczęło działać dobrze.


2

Mam również dwa konta Heorku i jako obejście „zaprosiłem” moje główne konto (to, którego klucz jest automatycznie używany przez Heroku) jako współpracownika do mojego projektu.


1

Po prostu nie ma potrzeby dodawania rozwiązania dla użytkowników systemu Windows.

  1. Pierwsze pobranie „Putty Key generator”

  2. Utwórz klucz za jego pomocą OBS, który musisz przesunąć myszką nad puste miejsce, aby wygenerować losowość.

  3. Zapisz klucze, po prostu pamiętaj, aby zmienić nazwę klucza na [nazwa] .pub

  4. Uruchom heroku keys:addw terminalu!


0

W moim przypadku problemem była używana przeze mnie wersja ssh. Po prostu ustawiłem zmienną środowiskową GIT_SSH na inną („GIT_SSH = / usr / bin / ssh”) i wszystko działało dobrze.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.