Não é possível enviar para Heroku porque a impressão digital principal


131

Eu sou novo no Rails e estava tentando implantar um aplicativo muito simples no Heroku. Este é o segundo aplicativo que eu implanto, e o primeiro que eu consegui fazer muito bem. No entanto, estou tendo alguns problemas com este. Sempre que eu " git push heroku master ", recebo este erro:

! Sua chave com impressão digital xx: xx: xx: xx: xx: xx: xx: xx: xx: xx: xx: xx: xx: xx: xx: xx: xx não está autorizada a> acessar my_heroku_app.

fatal: a extremidade remota desligou inesperadamente

Eu tentei gerenciar minhas chaves depois de fazer login no heroku. Se eu digitar no meu console " chaves heroku ", então recebo:

Nenhuma chave para o meu endereço de email.

No entanto, se eu executar o comando " heroku keys: add ", recebo

Chave pública existente encontrada: /Users/michele/.ssh/id_rsa.pub Fazendo upload da chave pública ssh /Users/michele/.ssh/id_rsa.pub! A impressão digital já existe. Use uma chave ssh por conta Heroku

Por favor me ajude! Isso é tão frustrante, não tenho idéia do que está errado! Obrigado

Respostas:


288

Eu tive o mesmo problema, segui este post e outros do mesmo tipo, sem sucesso: - ((

Finalmente, encontrei a solução: tive que adicionar minha nova identidade rsa na minha máquina!

Então, antes de tudo, criei uma nova chave rsa:

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

então adicionei na minha máquina

ssh-add ~/.ssh/id_rsa_heroku

e, finalmente, para Heroku

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

Depois disso,

git push heroku master

funcionou como um encanto!

Espero que isto ajude.


47
Isso foi muito próximo para mim. Mas havia mais uma coisa. Eu tinha duas contas heroku. O primeiro havia adicionado minha chave SSH padrão à minha máquina. Não importa o que eu fiz tentando consertar minha segunda conta, não levaria até eu remover minha chave padrão da primeira conta. O SSH-AGENT enviará a primeira chave por padrão, causando esse problema. A correção é para criar teclas específicas para heroku (não o padrão) para cada conta
Tom Carchrae

13
Eu tive o mesmo problema que @TomCarchrae. Saí da conta que parecia permanentemente bloqueada heroku logout, entrei na outra conta e excluí a chave RSA padrão dessa conta. Depois disso, fui capaz de pressionar com essa chave recém-gerada.
Ross Allen

14
Para mim, pessoalmente, fiz o equivalente ao ssh-add ~/.ssh/id_rsa_herokumeu, ssh-add ~/.ssh/identity.heroku.fooporque também estou usando https://github.com/ddollar/heroku-accounts (um gerente de várias contas da Heroku).
user664833

1
outra coisa a ter em mente - se você tiver muitas chaves SSH, ele não poderá efetuar login porque tenta as chaves em ordem (e, em seguida, você é expulso do logon por muitas falhas). isso parece ser uma falha no ssh-agent (no ubuntu de qualquer maneira, mas presumo que outras implementações também). portanto, se você estiver arrancando os cabelos, tente mover o diretório ~ / .ssh e inicie um novo (você pode puxar as teclas uma a uma).
Tom Carchrae

7
Você pode influenciar qual chave é enviada adicionando uma entrada de host em ~ / .ssh / config para heroku.com, apontando para a chave desejada. Essa foi uma solução rápida para mim, pois ela continuava tentando usar minha chave padrão e falhou. Isso provavelmente não ajudará no caso de várias contas.
dnewcome

61

Eu também tenho várias chaves e várias contas heroku, então me deparei com esse problema a cada poucos meses. Como mencionado Giordano Scalzo, Tom Carchrae e user664833, o principal problema é o ssh-agent, que você controla usando o ssh-addcomando A página de manual ( man ssh-add) é realmente bastante clara e concisa, então confira.

Você pode listar todas as chaves conhecidas pelo ssh-agent:

ssh-add -l

Você pode excluir todas as chaves conhecidas pelo ssh-agent:

ssh-add -D

Ou exclua uma chave específica com

ssh-add -d ~/.ssh/id_rsa_example_key_file_use_your_own

Não se preocupe! Na verdade, você não está excluindo as chaves, apenas alterando quais ssh-agent automaticamente tenta usar, por exemplo, quando você tenta enviar para heroku. É fácil adicionar e excluir chaves conforme necessário; portanto, para mim, quando fico frustrado com esse problema, a maneira mais fácil de corrigi-lo é excluir todas as chaves e adicionar apenas a que quero usar no momento.

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

1
isso funcionou bem para mim, no entanto, tentar adicionar de volta minha chave ssh padrão continuava solicitando a senha (no Mtn Lion), não acha que tenho uma? Rebooted e estava de volta ao meu ssh padrão tudo ok - também encontrei este stackoverflow.com/questions/7927750/... que funciona muito bem
house9

batendo minha cabeça contra uma parede por um bom tempo sobre esta, e este foi o passo final necessário - obrigado!
Griswoldbar

Se você tentou o primeiro método, então este, (e está recebendo um erro de permissão negada (chave pública) quando tenta enviar para o controle remoto Heroku), provavelmente se esqueceu de executar novamente as teclas heroku: add command. De qualquer forma, muito obrigado! Isso fez por mim.
Hairgami_Master

38

Seu computador possui uma chave SSH, mas essa chave está associada a outra conta Heroku.

Se você precisar usar as duas contas para aplicativos diferentes no mesmo computador, crie uma nova chave SSH na sua máquina e faça o upload para o Heroku:

$ ssh-keygen

Salve-o como '/Users/User/.ssh/new_id_rsa.pub' quando o prompt solicitar.

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

Você, então, precisa adicionar um host alternativo para heroku.coma sua ~/.ssh/config:

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

E atualize o .git/configem seu projeto para usar o alias do host:

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

Ao escolher entre herokue heroku-altno controle remoto dos .git/configarquivos de projetos específicos, você pode gerenciar quais projetos usam quais credenciais.


1
Sim, esse também foi o problema para mim. Acessando duas contas Heroku do mesmo cliente. Obrigado.
Bernard

Eu estou tentando fazer este método, mas "Anfitrião heroku-alt" me dá o erro: Host heroku-alt not found: 3(NXDOMAIN). Estou colocando isso no terminal no Mountain Lion. ~/.ssh/configtambém não existe, apenas um monte de .pubarquivos e um chamado known_hosts. E idéias?
JVG

@ Jascination Você precisará criar ~ / .ssh / config e colocar o conteúdo listado na resposta. Quando você terminar de salvar o arquivo e ele irá conter os Host, HostNamee as IdentityFilelinhas. Deve funcionar bem.
Daniel X Moore

3
Excelente! Esta técnica é tão elegante!
Kinopyo

Homem! Você é incrível. Executar passo a passo finalmente me faz alívio. Obrigado !!
softvar

14

Aqui está uma explicação muito clara que está faltando na documentação do Heroku ou em outras respostas para a pergunta. Pelo menos todas as informações parecem não aparecer em nenhum lugar. Também permite que você entenda o problema de uma maneira que a ferramenta de contas não.

Heroku identifica você de duas maneiras:

O primeiro é em .git / config

[heroku]
    account = acccount_name

Parece permitir que você execute operações básicas usando heroku

A segunda maneira pela qual o heroku o identifica é por qualquer operação que use ssh (git push). O Heroku o identificará pela sua chave ssh, conforme indicado aqui: https://devcenter.heroku.com/articles/keys

Esse par de chaves é usado para criptografia forte e que o identifica exclusivamente como desenvolvedor ao enviar alterações de código.

Portanto, cada conta heroku em que você trabalha terá que enviar uma chave diferente para o heroku ao usar o ssh. Siga qualquer tutorial para criar suas chaves ssh.

A chave é fazer com que o SSH use chaves diferentes para cada conta Heroku. Como você configura isso? Você precisará fazer duas coisas:

1) Você precisará criar um domínio 'fictício' para o seu .ssh / config interceptar e reconfigurar. Isso informará ao ssh o domínio 'real' que você deseja e qual chave especial do ssh usar.

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

2) Altere seu arquivo .git / config para usá-lo ao usar o git push. Em vez de heroku.com, use o domínio fictício definido em seu arquivo .ssh / config

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


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

É isso aí :) Um pouco complicado e um pouco simples ao mesmo tempo. Levei três anos batendo minha cabeça contra a parede e tentativa e erro para descobrir essa informação. Deve estar claramente documentado em algum lugar, mas pelo menos é um começo.


O único nome de host era o meu problema. Muito obrigado pixelearth.
FluffyJack

Muchos Gracias Por Favor
EE33

9

você precisará criar novas chaves e adicioná-las

especifique um novo nome de arquivo depois de executar

ssh-keygen

então (no meu caso)

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

3

Eu tenho o mesmo problema na semana passada. Este link me ajudou. Espero que ajude um pouco. http://devcenter.heroku.com/articles/keys


Eu vi esse link, tentei remover e adicionar minhas chaves novamente, mas ainda não consigo fazê-lo funcionar.
9111 mre

Você já resolveu esse problema?
Benjamin Benjamin

1
Você pode resumir as instruções neste link? Tentamos evitar respostas apenas de links aqui.
águia cera

Isso explica apenas como gerar chaves e não como gerenciar várias.
Macario

3

No meu caso, heroku keysjá tinha a chave correta listada. Então, tudo que eu precisava fazer era correr ssh-add /path/to/that/keye tudo começou a funcionar bem.


2

Também tenho duas contas Heorku e, como alternativa, "convidei" minha conta principal (aquela cuja chave é usada automaticamente pelo Heroku) como colaboradora do meu projeto.


1

Só não quero adicionar a solução para usuários do Windows.

  1. Primeiro download "Putty Key generator"

  2. Crie uma chave com ele OBS, você precisa mover o mouse pela área em branco para gerar aleatoriedade.

  3. Salve suas chaves, lembre-se de renomear sua chave para [name] .pub

  4. Corra heroku keys:addno terminal!


0

No meu caso, o problema era a versão ssh que eu estava usando. Acabei de definir a variável de ambiente GIT_SSH para outra ("GIT_SSH = / usr / bin / ssh") e tudo funcionou bem para mim.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.