git push heroku master Permissão negada (publickey). fatal: O terminal remoto desligou inesperadamente

85

Por favor, desculpe a frustração, que tentarei manter sob controle, já que o Heroku está usando o SO como seu suporte ao cliente (o que eu acho de má qualidade, para dizer o mínimo).

Nas últimas cinco horas, tenho tentado publicar um aplicativo, mas invariavelmente algo dá errado com as chaves. Eu li dezenas de artigos e tentei dica após dica na tentativa de descobrir onde, no processo estúpido e completamente opaco, o Heroku está bagunçando.

Meu caso de uso não é tão difícil: eu criei um novo par de chaves para meus aplicativos heroku. Eu defini essa chave para ser minha chave:

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

Posso entrar e "criar" um aplicativo (nome estúpido, já que parece estar criando um repositório git, não qualquer tipo de aplicativo) sem problemas. Mas toda * maldita * vez que tento empurrar meu aplicativo, recebo:

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

Não tenho nenhuma ideia do que está acontecendo com o WTF; Estou apenas batendo minha cabeça contra um teclado sem nenhum recurso, mas espero que o Deus Todo-Poderoso do Google possa responder. E o Google não está respondendo (bem, deixe-me voltar, já vi uma dúzia de maneiras de responder).

Para um sistema que deveria ser fácil, isso é uma piada. Gosto da ideia do Heroku, mas depois de tirar cinco para não fazer absolutamente nada , estou pensando que talvez seja a escolha errada.

Travis Jensen
fonte
7
Devo informar que o suporte ao cliente que fornecemos ao Heroku é de primeira classe.
Robert Harvey
1
Nunca fiquei impressionado com a qualidade das respostas no SO. Eu só acho que é uma maneira idiota de fornecer suporte ao cliente para um produto, não importa o quão técnico seja. O que acontece se eu tiver que fornecer detalhes pessoais da conta? Não é exatamente o que quero compartilhar com o mundo (como percebi quando precisei modificar a postagem original).
Travis Jensen
Você viu esta pergunta ? Especialmente a parte sobre como registrar sua chave pública com o git?
Ken White
7
Mesmo problema, tenho a solução aqui: http://www.whatibroke.com/?p=284
1
A solução vinculada de Remi funcionou para mim.
Deborah

Respostas:

149

Existem várias soluções na web. Vou tentar condensar as opções disponíveis em uma postagem. Tente sua conexão novamente após cada etapa.

  • Etapa 1: tente adicionar sua chave pública ao Heroku

    heroku keys:add ~/.ssh/id_rsa.pub // or just heroku keys:add and it will prompt you to pick one of your keys
    
  • Etapa 2: gere um novo conjunto de chaves SSH e tente a primeira etapa novamente

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

  • Etapa 3: verifique e / ou modifique seu arquivo de configuração

    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]
    
  • Passo 4: Remover o heroku remote do git, recriar a conexão, adicionar o remote via heroku create será apenas uma opção para novos repositórios. Certifique-se de excluir seu repositório antigo que você originalmente tentou criar

     $ git remote rm heroku
     $ heroku create
    
  • Etapa 5: Reinstalar o Heroku Toolkit

jquintana
fonte
10
A Etapa 1 resolveu o problema para mim! (Eu recriei minhas chaves SSH para minha máquina e Github antes de enviá-las para o Heroku.) Obrigado!
ATSiem
1
Nada disso funcionou para mim, apesar de fazer isso com muito cuidado do início duas vezes com instalações limpas e tudo. No final, o que fez tudo funcionar foi garantir que minha chave do GitHub e a chave do Heroku fossem as mesmas. Eu nem entendo por que isso fez a diferença, a menos que de alguma forma não tenha percebido que o Heroku depende do GitHub, mas de alguma forma ele corrigiu o problema. As chaves podem ser alteradas nas configurações da conta no GitHub. Acho que você deve adicionar isso à sua resposta.
Temporary_user_name
1
Eu acredito que a linha IdentityFile deve ser sua chave ssh privada. Consulte stackoverflow.com/a/8874946/2816571
Paul de
2
Você quis dizer heroku create? git heroku createnão é uma coisa, até onde eu sei.
Michael Dorst
1
Uau. Não consigo pensar em nada agradável para dizer sobre essa experiência. Segui várias receitas, incluindo desinstalar / reinstalar git, github e substituir putty por msysgit. A etapa 1-3 finalmente fez isso, mas a alteração precisava estar no github ssh_config. Depois de soltar e redefinir minhas chaves do github várias vezes sem problemas, o processo do heroku foi realmente frustrante.
wilk
13

Sua chave heroku e as chaves do github não estão sincronizadas.

  • Determine qual chave você deseja usar (recomendamos a criação de uma nova, por exemplo, heroku_rsa).

  • Adicione a chave ao github.

  • Adicione a mesma chave ao heroku usando:heroku keys:add

Robert Christian
fonte
4
Eu realmente gostaria de ter lido essa resposta quatro horas atrás. Embora eu ache que aprendi muito ao longo do caminho, nem tudo é ruim.
Temporary_user_name
Tenho duas contas diferentes no Heroku (uma usando meu e-mail de trabalho, para projetos no trabalho, a outra usando meu e-mail pessoal, para projetos freelance). Heroku não me deixa usar a mesma chave para ambos. Então, como posso usar minha chave do Github para ambos? (E por que o Heroku precisa especificamente usar minha chave do Github? O que o Heroku tem a ver com o Github? E se eu não usasse o Github?) Estou tão confuso
callum
Funcionou como um encanto! Obrigado!
Shashank de
2

Encontrei o mesmo problema e esta é minha teoria sobre o que está acontecendo:

Eu me inscrevi no Heroku há muito tempo, dando a eles minha chave pública do github. Ao tentar o de costume git push heroku master, ele vai e procura minha chave privada, encontrada em ~/.ssh/github_rsa. Em seguida, ele falha silenciosamente com a mensagem que você postou.

No entanto, tentei mais tarde sshentrar em outro servidor usando o -isinalizador para especificar meu "arquivo de identidade" (ou seja, chave privada), e ele me solicitou a senha da minha chave privada. Tendo "desbloqueado" a chave privada, o git push heroku mastercomando funciona. Algumas conclusões:

  • Enquanto sshsolicitará a senha para um arquivo de identidade, gitnão.
  • Se você desbloquear o arquivo de identidade com outro método, como ssh, ele permanecerá desbloqueado para seu gituso.
  • Não parece haver nenhuma documentação sobre como remover permanentemente a proteção por senha em um arquivo de identidade, incluindo o comando unix comum keytool.
  • As soluções acima de criação de um novo par de chaves pública / privada parecem ser uma solução alternativa para esse problema de senha, sem saber qual é o problema.
Owensmartin
fonte
1

Comigo, parecia que o problema era que eu tinha o ssh-agent em execução em segundo plano e a chave privada relevante não havia sido adicionada a ele.

ps -afe | grep ssh-agent

ssh-add ~/.ssh/id_rsa_heroku_github

Também tive que adicionar a chave pública ao github (manualmente) e ao heroku

heroku keys:add ~/.ssh/id_rsa_heroku_github.pub
cobberboy
fonte
0

Se nenhuma das outras soluções funcionar para você, certifique-se de estar logado no shell do Linux com sua conta e não com a conta root .

Dessa forma, se você estiver executando com o usuário que não é o proprietário de suas chaves ssh, o git irá procurar as chaves erradas para autenticar

Saulo Falcao
fonte