git push heroku master Autorisation refusée (publickey). fatal: l'extrémité distante a raccroché de manière inattendue


85

Veuillez excuser un peu de frustration, que je vais essayer de garder sous contrôle puisque Heroku utilise SO comme support client (ce que je pense que c'est de mauvaise qualité pour dire le moins).

Depuis cinq heures, j'essaye de faire publier une application, mais il y a toujours un problème avec les clés. J'ai lu des dizaines d'articles et essayé pointe après pointe dans le but de comprendre où, dans le processus stupide et complètement opaque, Heroku se trompe.

Mon cas d'utilisation n'est pas si difficile: j'ai créé une nouvelle paire de clés pour mes applications heroku. J'ai défini cette clé comme ma clé:

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

Je peux me connecter et "créer" une application (nom stupide, car il semble créer un dépôt git, pas n'importe quelle sorte d'application) sans problème. Mais tous les * paniquer * le temps que j'essaie de pousser mon application, je reçois:

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

Je n'ai aucune idée de ce que WTF continue à faire; Je suis juste coincé à me cogner la tête contre un clavier sans recours, mais pour espérer que le dieu tout-puissant de Google pourra y répondre. Et google n'y répond pas (enfin, laissez-moi reprendre cela, j'ai vu une douzaine de façons de répondre à cela).

Pour un système censé être simple, c'est une blague. J'aime l'idée d'Heroku, mais après avoir pris cinq heures pour ne rien faire, je pense que c'est peut-être le mauvais choix.


7
Je vous ferai savoir que le support client que nous fournissons pour Heroku est de mauvaise qualité.
Robert Harvey

1
Je n'ai jamais été qu'impressionné par la qualité des réponses chez SO. Je pense simplement que c'est une manière boiteuse de fournir un support client pour un produit, aussi technique soit-il. Que se passe-t-il si je dois fournir des détails de compte personnel? Pas exactement ce que je veux partager avec le monde (comme je l'ai réalisé quand j'ai eu besoin de modifier le message original).
Travis Jensen

Vous avez vu cette question ? Surtout la partie concernant l'enregistrement de votre clé publique avec git?
Ken White

7
Même problème, j'ai obtenu la solution ici: http://www.whatibroke.com/?p=284

1
La solution liée de Remi a fonctionné pour moi.
Deborah

Réponses:


149

Il existe une variété de solutions sur le Web. Je vais essayer de condenser les options disponibles en un seul article. Veuillez réessayer votre connexion après chaque étape.

  • Étape 1: essayez d'ajouter votre clé publique à Heroku

    heroku keys:add ~/.ssh/id_rsa.pub // or just heroku keys:add and it will prompt you to pick one of your keys
    
  • Étape 2: Générez un nouvel ensemble de clés SSH, puis recommencez la première étape

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

  • Étape 3: Vérifiez et / ou modifiez votre fichier de configuration

    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
    
  • Étape 4: Supprimez la télécommande heroku de git, recréez la connexion, l'ajout de la télécommande via heroku create ne sera une option que pour les nouveaux dépôts. Assurez-vous de supprimer votre ancien dépôt que vous avez initialement tenté de créer

     $ git remote rm heroku
     $ heroku create
    
  • Étape 5: Réinstallez Heroku Toolkit


10
L'étape 1 a fait l'affaire pour moi! (J'ai cependant recréé mes clés SSH pour ma machine et Github avant de les pousser vers Heroku.) Merci!
ATSiem

1
AUCUN de cela n'a fonctionné pour moi, malgré le fait de le faire très soigneusement du haut deux fois avec des installations propres et tout. En fin de compte, ce qui a permis à tout cela de fonctionner était de s'assurer que ma clé GitHub et la clé Heroku étaient identiques. Je ne comprends même pas pourquoi cela a fait une différence, à moins que j'aie échoué d'une manière ou d'une autre à remarquer que Heroku s'appuie sur GitHub, mais cela a résolu le problème. Les clés peuvent être modifiées dans les paramètres du compte sur GitHub. Je pense que vous devriez ajouter ceci à votre réponse.
temporary_user_name

1
Je crois que la ligne IdentityFile doit être votre clé ssh privée. Voir stackoverflow.com/a/8874946/2816571
Paul

2
Voulez-vous dire heroku create? git heroku createce n'est pas une chose, pour autant que je sache.
Michael Dorst

1
Sensationnel. Je ne vois rien d'agréable à dire sur cette expérience. J'ai suivi de nombreuses recettes, y compris la désinstallation / réinstallation de git, github et le remplacement de putty par msysgit. L'étape 1-3 l'a finalement fait, mais le changement devait être dans le github ssh_config. Après avoir laissé tomber et réinitialiser mes clés github plusieurs fois sans aucun problème, le processus heroku était vraiment frustrant.
wilk

13

Votre clé heroku et vos clés github ne sont pas synchronisées.

  • Déterminez la clé que vous souhaitez utiliser (recommandez d'en créer une nouvelle, par exemple heroku_rsa).

  • Ajoutez la clé à github.

  • Ajoutez la même clé à heroku en utilisant:heroku keys:add


4
J'aurais vraiment, vraiment, vraiment aimé avoir lu cette réponse il y a quatre heures. Bien que je suppose que j'ai beaucoup appris en cours de route, donc pas mal du tout.
temporary_user_name

J'ai deux comptes Heroku différents (l'un utilisant ma messagerie professionnelle, pour des projets au travail, l'autre utilisant ma messagerie personnelle, pour des projets indépendants). Heroku ne me laisse pas utiliser la même clé pour les deux. Alors, comment puis-je utiliser ma clé Github pour les deux? (Et pourquoi Heroku a-t-il spécifiquement besoin d'utiliser ma clé Github de toute façon? Qu'est-ce que Heroku a à voir avec Github? Et si je n'utilisais pas Github?) Je suis si confus
callum

A travaillé comme un charme! Merci!
Shashank

2

J'ai rencontré le même problème, et voici ma théorie sur ce qui se passe:

Je me suis inscrit à Heroku il y a longtemps, en leur donnant ma clé publique github. Lors de la tentative habituelle git push heroku master, il va chercher ma clé privée, trouvée à ~/.ssh/github_rsa. Il échoue ensuite silencieusement avec le message que vous avez publié.

Cependant, j'ai essayé plus tard d' sshaccéder à un autre serveur en utilisant le -idrapeau pour spécifier mon "fichier d'identité" (c'est-à-dire la clé privée), et il m'a demandé le mot de passe de ma clé privée. Après avoir "déverrouillé" la clé privée, la git push heroku mastercommande fonctionne. Quelques conclusions:

  • Alors que sshvous demandera le mot de passe pour un fichier d'identité, gitne le sera pas.
  • Si vous déverrouillez le fichier d'identité avec une autre méthode, comme ssh, il restera déverrouillé pour votre gitutilisation.
  • Il ne semble pas y avoir de documentation sur la façon de supprimer définitivement la protection par mot de passe sur un fichier d'identité, y compris avec la commande commune unix keytool.
  • Les solutions ci-dessus de création d'une nouvelle paire de clés publique / privée semblent être une solution de contournement pour ce problème de mot de passe, sans savoir que c'est le problème.


1

Avec moi, il semblait que le problème était que ssh-agent s'exécutait en arrière-plan et que la clé privée correspondante n'y avait pas été ajoutée.

ps -afe | grep ssh-agent

ssh-add ~/.ssh/id_rsa_heroku_github

J'ai également dû ajouter la clé publique à github (manuellement) et heroku

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

0

Si aucune des autres solutions ne fonctionne pour vous, assurez-vous que vous êtes connecté au shell Linux avec votre compte et non avec un compte root .

De cette façon, si vous exécutez avec l'utilisateur qui n'est pas le propriétaire de vos clés ssh, git recherchera les mauvaises clés pour s'authentifier

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.