Heroku 'Berechtigung verweigert (publickey) fatal: Probleme konnten nicht aus dem Remote-Repository gelesen werden'

139

Ich habe viele Stunden lang nach einer Lösung für mein scheinbar einfach zu behebendes Problem gesucht. Es ist nicht so, dass meine Suche nichts ergab, es ist so, dass meine Suche so viele verschiedene Lösungen ergab - von denen keine funktioniert hat.

Wie auch immer, ich kann einfach nicht von meinem Mac aus mein Heroku-Repository verschieben, ziehen oder abrufen. Jeder Versuch gibt mir (als würde er mich verspotten) den folgenden Fehler:

'Erlaubnis verweigert (publickey). fatal: Konnte nicht aus dem Remote-Repository lesen. '

Ich habe versucht (und erneut versucht), es auf viele verschiedene Arten zu beheben. Wie gesagt, ich habe einen guten Teil der letzten zwei Tage damit verbracht, nach einer Antwort zu suchen. Hier sind einige der Dinge, die ich versucht habe:

  • Heroku-Tasten: Löschen, gefolgt von Heroku-Tasten: Hinzufügen
  • Einen SSH-Schlüssel selbst mit 'ssh-keygen -t rsa' neu generieren
  • Löschen meines .ssh-Verzeichnisses, gefolgt von Heroku-Schlüsseln: Löschen, gefolgt vom Generieren eines SSH-Schlüssels
  • Meine App auf Heroku löschen und eine neu erstellen (zum Glück war dort nicht viel los)

Ich kann problemlos aus meinem GitHub-Repository abrufen, daher weiß ich, dass es sich nicht um eine Netzwerkverbindung handelt (Ping Heroku funktioniert auch).

Als provisorische Lösung (von der ich hoffe, dass sie nicht zu einer dauerhaften wird) habe ich mich bei meiner Ubuntu Amazon AWS ec2-Instanz angemeldet. Das Ziehen und Schieben zu und von Heroku funktioniert perfekt. Aus diesem Grund habe ich immer noch das Gefühl, dass das Problem bei der SSH-Taste auf meinem Mac liegt. Beide Schlüssel werden unter meinem Heroku-Konto angezeigt. Ist die E-Mail-Adresse am Ende des Schlüssels wichtig?

EDIT: Ich kann gut von GitHub schieben und ziehen (ich benutze jedoch nicht ssh), also warum nicht Heroku?

An diesem Punkt bin ich bereit, alles zu versuchen. Vielen Dank!

thebradbain
quelle
Haben Sie eine Passphrase für Ihren Heroku-Schlüssel festgelegt? Und ich nehme an, dass dies ( stackoverflow.com/a/16753800/6309 ) nicht hilft? Oder überprüfen Sie stackoverflow.com/a/16753800/6309
VonC
Leider weigert es sich immer noch zu arbeiten.
Thebradbain
Manchmal passiert dies, wenn Heroku gewartet wird: status.heroku.com
Mavis

Antworten:

284

Ich weiß, dass dies bereits beantwortet wurde. Aber ich möchte meine Lösung hinzufügen, da sie in Zukunft für andere hilfreich sein kann.

Ein häufiger Schlüsselfehler ist : Permission denied (publickey). Sie können dies beheben, indem Sie keys:addHeroku über Ihren neuen Schlüssel benachrichtigen.

Befolgen Sie kurz diese Schritte: https://devcenter.heroku.com/articles/keys

Zuerst müssen Sie einen Schlüssel erstellen, wenn Sie keinen haben:

ssh-keygen -t rsa

Zweitens müssen Sie den Schlüssel zu Heroku hinzufügen:

heroku keys:add
Kris Hollenbeck
quelle
2
Danke kris,
Jemand
8
Heroku-Schlüssel: Hinzufügen war mein Tutorial verpasst, denke ich ... danke! :)
Ole Henrik Skogstrøm
Der Schlüssel muss nur generiert werden, wenn Sie keinen Alredy haben. In meinem Fall hatte ich bereits den Schlüssel und musste den Schlüssel nur zu Heroku hinzufügen
Joseramonc
4
Der erste ist unnötig. heroku keys:addhilft Ihnen beim Erstellen eines Schlüssels, wenn Sie keinen Schlüssel haben.
Mygod
Führen Sie aus, ssh-keygen -t rsawenn das RSAnicht generiert wird, sonst heroku keys:addsollte ausreichen
Volatil3
122

Ich dachte nur, ich würde teilen, dass ich die Antwort auf meine eigene Frage gefunden habe.

Das Aufschreiben meines Problems machte es mir noch klarer und ich untersuchte weiter, wo mein Problem lag: der SSH-Schlüssel

Es stellte sich heraus, dass ich recht hatte. Das Problem war nicht der Schlüssel selbst, sondern dass ich ihn nicht zur Liste der bekannten SSH-Schlüssel meines lokalen Mac hinzugefügt hatte. Obwohl auf meinem Heroku-Konto der richtige Schlüssel hochgeladen wurde, konnte sich mein Mac nicht damit authentifizieren, da er diesen Schlüssel auf meinem Computer nicht finden konnte. Die Lösung?

ssh-add ~/.ssh/id_rsa
#and, to confirm it's been added to the known list of keys
ssh-add -l

Ich möchte https://help.github.com/articles/error-permission-denied-publickey als gute Referenz würdigen.

thebradbain
quelle
5
Vielen Dank für Ihr Feedback, das genauer zu Ihrer Situation passt als mein erster Kommentar. +1
VonC
4
Unter Windows muss man starten Git Bash(Rechtsklick auf einen Ordner) und einen starten, ssh-agentder durch Ausführen möglich ist `ssh-agent`(beachten Sie die Back-Ticks) und dann den Schlüssel wie oben beschrieben hinzufügen. Ich muss dies jedes Mal tun, wenn ich das Git Bash/ ssh-agentstarte, es vergisst, was hinzugefügt wurde.
TWiStErRob
Ich habe das gemacht und es hat immer noch nicht funktioniert. Am Ende musste ich eine Umgebungsvariable namens HOME in das Verzeichnis einfügen, in dem sich mein .ssh-Ordner befand
Justin
Danke - hätte das nie herausgefunden!
Mark Hansen
Dies hat mein Problem behoben, nicht die höher gewählte Antwort, danke :)
Ryan Brodie
31

Ich hatte genau den gleichen Fehler (unter Windows 7) und die Ursache war unterschiedlich. Ich habe es auf eine andere Weise gelöst, also dachte ich, ich würde hier die Ursache und Lösung für andere hinzufügen.

Obwohl der Fehler auf Heroku zu verweisen schien, sagte der Fehler wirklich "Heroku can't get to the git repository". Ich habe geschworen, auf allen Servern die gleichen Schlüssel zu haben, weil ich sie erstellt und gleichzeitig nacheinander hochgeladen habe.

Nachdem ich fast einen Tag damit verbracht hatte, wurde mir klar, dass git mir nur den Fingerabdruck und nicht den eigentlichen Schlüssel zeigte. Ich konnte nicht überprüfen, ob der Schlüssel mit dem auf meiner Festplatte oder meinem Heroku übereinstimmt. Ich habe in der bekannten Hosts-Datei nachgesehen und erraten, was ... sie zeigt die Schlüssel für jeden Server und ich konnte deutlich sehen, dass die öffentlichen Schlüssel von git und heroku nicht übereinstimmten.

1) Ich habe alle Dateien in meinem Schlüsselordner gelöscht, den Schlüssel von github über die Website und den Schlüssel von heroku mit git bash und dem Befehl heroku keys:clear

2) Befolgen Sie die Anweisungen von github hier , um ein neues Schlüsselpaar zu generieren und den öffentlichen Schlüssel auf git hochzuladen

3) Verwenden Sie git bash- heroku keys:add , um denselben Schlüssel auf Heroku hochzuladen.

Funktioniert jetzt git push heroku master.

Was für ein Albtraum, hoffe das hat jemandem geholfen.

Bryan

Bryan Myers
quelle
1
Ich habe mir den Kopf zerbrochen, bis ich deinen Beitrag gesehen habe. Sobald ich Git- und Heroku-Schlüssel gleich gemacht hatte, war alles in Ordnung. Aber verstehe nicht, warum sie gleich sein müssen.
Kishore Masand
Vielen Dank für die Antwort, die ewig mit diesem Problem verbracht hat
Ivan Bacher
Sehr nützlicher Git-Dokumentationslink, alles funktioniert perfekt
HotJard
Dies funktionierte für mich nach ein paar Tagen, in denen ich versucht hatte, es herauszufinden. Ich bin überrascht, dass Heroku mit einem so bösen Usability-Problem im Geschäft bleiben kann. Es sollte einen einfacheren Weg geben, dies zu tun.
Luke F.
Danke dir. Arbeitete für mich; nur eins: im github link heißt irgendwo "ssh-add". Dort hatte ich ein Problem, aber ich habe hier eine Lösung gefunden: stackoverflow.com/questions/17846529/…
Alin Ciocan
17

Das Problem war, dass ich nur https für mein GitHub-Konto verwendete. Ich musste sicherstellen, dass mein GitHub-Konto für den SSH-Zugriff eingerichtet war und dass GitHub und Heroku beide dieselben öffentlichen Schlüssel verwendeten. Dies sind die Schritte, die ich unternommen habe:

  1. Navigieren Sie zum Verzeichnis ~ / .ssh und löschen Sie die Dateien id_rsa und id_rsa.pub, falls vorhanden. Ich habe mit neuen Schlüsseln begonnen, obwohl dies möglicherweise nicht erforderlich ist.

    $ cd ~/.ssh
    $ rm id_rsa id_rsa.pub
    
  2. Befolgen Sie die Schritte auf gitHub, um SSH- Schlüssel zu generieren
  3. Melden Sie sich bei heroku an, erstellen Sie eine neue Site und fügen Sie Ihre öffentlichen Schlüssel hinzu:

    $ heroku login
    ...
    $ heroku create
    $ heroku keys:add
    $ git push heroku master
    
sjking
quelle
6

Ich hatte den gleichen Fall unter Linux Ubuntu und habe ihn gerade behoben. Es scheint, dass das Betriebssystem zwischen /root/.ssh/ und home / user / .ssh / dir verwechselt wurde. Was ich getan habe, war:

  1. Alle Schlüssel wurden aus dem Verzeichnis root und home / user .shh entfernt.
  2. Wenn Sie einen neuen Schlüssel generiert haben , achten Sie auf den Pfad der Erstellung (/home/you/.ssh/id_rsa) oder (/root/.ssh/id_rsa).
  3. Überprüfen Sie die Heroku-Schlüssel heroku keys
  4. wenn dort Schlüssel rein sind heroku keys:clear
  5. heroku keys:addWenn Heroku hier keinen Schlüssel finden konnte und darum gebeten wurde, ein richtiges Nein zu generieren. Dies bedeutet, dass Sie das gleiche Problem wie ich haben. Führen Sie den Befehl add wie heroku keys:add /root/.ssh/id_rsa.pubfolgt aus. Der Pfad, den Sie hinzufügen, ist derjenige, den Sie erhalten haben in Schritt 2.
  6. versuche es git push heroku masterjetzt
oqx
quelle
3

Mein Weg unter Windows 8

  1. Fügen Sie der System-PATH-Variablen ein Verzeichnis mit ssh-keygen hinzu, normalerweise C: \ Programme (x86) \ Git \ bin

  2. Öffnen Sie CMD und gehen Sie zu C: \ Users \ Me \

  3. SSH-Schlüssel generieren ssh-keygen -t rsa

    Geben Sie die Datei ein, in der der Schlüssel gespeichert werden soll (//.ssh/id_rsa): .ssh / id_rsa (ändern Sie einen falschen Standardpfad in .ssh / somegoodname_rsa)

  4. Füge den Schlüssel zu Heroku hinzu heroku keys:add

    Wählen Sie einen erstellten Schlüssel aus einer Liste aus

  5. Gehen Sie in Ihr App-Verzeichnis und schreiben Sie einen schönen Code

  6. Initiiere ein Git Repo git init git add . git commit -m 'chore(release): v0.0.1

  7. Heroku-Anwendung erstellen heroku create

  8. Stellen Sie Ihre App bereit git push heroku master

  9. Öffnen Sie Ihre App heroku open

Ivan Rave
quelle
2

Hatte ein ähnliches Problem und versuchte viele Dinge. Letztendlich funktionierte es für mich, Gnu unter Windows zu installieren ( https://github.com/bmatzelle/gow/releases ) und sicherzustellen, dass das ssh-Tool in diesem Verzeichnis verwendet wurde und nicht das mit Git. Nach der Installation testen Sie mit (stellen Sie sicher, dass in Ihrer Umgebung PATH vor Git \ bin steht)

C:\Git\htest2>which ssh
C:\Program Files (x86)\Gow\bin\ssh.BAT

Ich habe Kitt und Festzug wie hier beschrieben verwendet: http://rubyonrailswin.wordpress.com/2010/03/08/getting-git-to-work-on-heroku-on-windows-using-putty-plink-pageant/

Nachdem die Schlüssel an heroku gesendet wurden (heroku-Schlüssel: c: \ Users \ Person.ssh \ id_rsa.pub hinzufügen), verwenden Sie

ssh -v <username>@heroku.com 

und stellen Sie sicher, dass auf Ihrem Stapel Putty verwendet wird - dh ein funktionierender Stapel:

Looking up host "heroku.com"
Connecting to 50.19.85.132 port 22
Server version: SSH-2.0-Twisted
Using SSH protocol version 2
**We claim version: SSH-2.0-PuTTY_Release_0.62**
Using Diffie-Hellman with standard group "group1"
Doing Diffie-Hellman key exchange with hash SHA-1
Host key fingerprint is:
ssh-rsa 2048 8b:48:5e:67:0e:c9:16:47:32:f2:87:0c:1f:c8:60:ad
Initialised AES-256 SDCTR client->server encryption
Initialised HMAC-SHA1 client->server MAC algorithm
Initialised AES-256 SDCTR server->client encryption
Initialised HMAC-SHA1 server->client MAC algorithm
Pageant is running. Requesting keys.
Pageant has 1 SSH-2 keys
Using username "*--ommitted for security--*".
**Trying Pageant key #0**
Authenticating with public key "rsa-key-20140401" from agent
Sending Pageant's response
Access granted
Opened channel for session
Server refused to allocate pty
Server refused to start a shell/command
FATAL ERROR: Server refused to start a shell/command

Eine, die zuvor ausgeführt wurde und fehlgeschlagen ist:

C:\Git\htest2>ssh -v <username>@[email protected]
OpenSSH_4.6p1, OpenSSL 0.9.8e 23 Feb 2007
debug1: Connecting to heroku.com [50.19.85.156] port 22.
debug1: Connection established.
debug1: identity file /c/Users/Person/.ssh/identity type -1
debug1: identity file /c/Users/Person/.ssh/id_rsa type 1
debug1: identity file /c/Users/Person/.ssh/id_dsa type -1
debug1: Remote protocol version 2.0, remote software version Twisted
debug1: no match: Twisted
debug1: Enabling compatibility mode for protocol 2.0
**debug1: Local version string SSH-2.0-OpenSSH_4.6**
debug1: SSH2_MSG_KEXINIT sent
debug1: SSH2_MSG_KEXINIT received
debug1: kex: server->client aes128-cbc hmac-md5 none
debug1: kex: client->server aes128-cbc hmac-md5 none
debug1: sending SSH2_MSG_KEXDH_INIT
debug1: expecting SSH2_MSG_KEXDH_REPLY
debug1: Host 'heroku.com' is known and matches the RSA host key.
debug1: Found key in /c/Users/Person/.ssh/known_hosts:1
debug1: ssh_rsa_verify: signature correct
debug1: SSH2_MSG_NEWKEYS sent
debug1: expecting SSH2_MSG_NEWKEYS
debug1: SSH2_MSG_NEWKEYS received
debug1: SSH2_MSG_SERVICE_REQUEST sent
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug1: Authentications that can continue: publickey
debug1: Next authentication method: publickey
debug1: Trying private key: /c/Users/Person/.ssh/identity
debug1: Offering public key: /c/Users/Person/.ssh/id_rsa
debug1: Server accepts key: pkalg ssh-rsa blen 277
debug1: Trying private key: /c/Users/Person/.ssh/id_dsa
debug1: No more authentication methods to try.
Permission denied (publickey).
user3484361
quelle
Um nur zu sagen, dies verwendet Windows 8 (8.1). Es scheint auch, dass das GoW-SSH-Tool der Schlüssel ist, da ich das ohne die Kittstücke verwenden und SSH-Keygen verwenden konnte.
user3484361
2

Sie müssen einen neuen SSH-Schlüssel erstellen, indem Sie Folgendes eingeben: ssh-keygen -t rsa

Dann müssen Sie hinzufügen: - Heroku-Schlüssel: hinzufügen

Dann, wenn Sie tippen - Heroku offen

Das Problem ist gelöst worden.

Es hat sowieso bei mir funktioniert, du könntest es versuchen ...

Nabin
quelle
2

Ich habe den gleichen Fehler erhalten und weil ich 4 SSH-Schlüssel habe, habe ich versucht zu folgen:

ssh-keygen -t rsa
heroku keys:add

dann zeigen vier Optionen:

1) github_rsa.pub
2) id_boot2docker.pub
3) id_rsa.pub
4) sshkey.pub

Ich wähle 3), die neueste

Dann behebe ich den Fehler.

rocLv
quelle
1

Ich benutze diese Methode, um dieses Problem zu lösen. Vielleicht können Sie es versuchen

"SSH-Agent aktivieren"

  1. Git herunterladen

http://git-scm.com/

  1. Es installieren

  2. Aktivieren Sie ssh-agent

C: \ Programme \ Git \ cmd

start-ssh-agent

Die Nachricht verschwindet, nachdem ich den Agenten aktiviert habe. Ich hoffe, dies wird Ihnen helfen

徐啟倫
quelle
1

Ich möchte eine weitere Lösung hinzufügen, da ich sie hier nicht gesehen habe. Mein Problem war, dass Heroku auf die falsche URL verlinkt (da ich immer wieder mit URL-Namen herumgespielt habe). Das Bearbeiten der Remote-URL hat mein Problem gelöst:

git remote set-url heroku <heroku-url-here>
ytv
quelle
0

Ich hatte das gleiche Problem. Und ich habe versucht, meine Schlüssel zurückzusetzen, wie alle sagten, aber es hat immer noch nicht funktioniert. Denn ich habe die App umbenannt.

Also habe ich meine Schlüssel zurückgesetzt und die App von der Konsole aus umbenannt. Überprüfen Sie diese Frage für weitere Informationen: Heroku Push App Problem

Alin Ciocan
quelle
0

SO So So einfache Lösung, gehen Sie zu c: /Users/user_name/.ssh/ und löschen Sie alle Pub / Private-Schlüsselpaare. Auf diese Weise generiert Heroku Schlüssel für Sie.

00imvj00
quelle
0

Ich hatte einen ähnlichen Heroku-SSH-Fehler, den ich nicht beheben konnte.

Als Problemumgehung habe ich die neue http-git-Funktion von heroku verwendet (http-Transport für "heroku" -Fernbedienung anstelle von ssh). Details hier: https://devcenter.heroku.com/articles/http-git

(Kurzversion: Wenn Sie ein Projekt bereits auf die Standardmethode eingerichtet haben, führen Sie heroku git: remote --http-init aus, um "heroku" remote in http zu ändern.)

Eine gute schnelle Lösung, wenn Sie keine Zeit haben, ein SSH-Problem zu beheben oder zu beheben.

FullTimeCoderPartTimeSysAdmin
quelle
In meinem Fall scheint das Problem mit ":" in ssh-Remote-Pfaden zu zusammenhängen. (Git 1.9.4 für Windows.) Aus irgendeinem Grund schlägt ssh: // git @ host: repo mit "fatal: Konnte nicht aus dem Remote-Repository lesen" fehl, während ssh: // git @ host / repo erfolgreich ist.
FullTimeCoderPartTimeSysAdmin