Não é possível enviar para o repositório Git no Bitbucket

143

Criei um novo repositório e estou com um erro estranho. Eu usei o Git antes no Bitbucket, mas apenas reformatei e agora não consigo fazer o Git funcionar. Depois de confirmar, tive que adicionar meu e-mail e nome aos globais, mas, em seguida, foi confirmado.

Quando tento usar o comando

git push origin master

isso não funciona. Eu recebo esta mensagem:

$ git push origin master
Permission denied (publickey).
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

Estou perdida aqui. Meu amigo com quem estou compartilhando este repositório, o acessou bem e o empurrou muito bem, mas não consigo fazê-lo funcionar.

Jason Dahl
fonte
4
você pode usar https em vez de gits no seu URL remoto. por exemplo: [email protected]/teamname/repository.git
Ali
1
Resolvi o mesmo problema, seguindo de perto o tutorial de Atlassian sobre como configurar o SSH em sua máquina: confluence.atlassian.com/display/BITBUCKET/Set+up+SSH+for+Git
sws
problema semelhante: stackoverflow.com/questions/12940626/…
JMoran

Respostas:

229

Escreva isso para aqueles que estão começando o Git e o BitBucket no Windows e que não estão tão familiarizados com o Bash (já que esse é um problema comum e um resultado do Google de alto nível ao procurar a mensagem de erro na pergunta).

Para aqueles que não se importam com HTTPS e estão procurando uma solução rápida, role até a parte inferior desta resposta para obter instruções em FOR THE LAZY

Para aqueles que procuram resolver o problema real, siga as instruções abaixo:

Corrigindo o problema SSH o mais rápido possível

Este é um conjunto de instruções derivadas do URL vinculado pelo VonC. Foi modificado para ser o mais resiliente e sucinto possível.

  • Não digite o $ linhas que não começam $(o que $significa que você digita no GitBash).

  • Abra o GitBash

Defina suas informações globais se você ainda não tiver:

$ git config --global user.name "Your Name"
$ git config --global user.email "[email protected]"

Verifique o OpenSSH:

$ ssh -v localhost
OpenSSH_4.6p1, OpenSSL...

Viu algo assim?

  • Sim: continue.
  • Não: pule para a seção FOR THE LAZY ou siga o artigo vinculado do VonC.

Veja se você já gerou as chaves:

$ ls -a ~/.ssh/id_*

Se houver dois arquivos, você pode pular a próxima etapa.

$ ssh-keygen

Deixe tudo como o padrão, digite uma senha. Agora você deve ver resultados com este comando:

$ ls -a ~/.ssh/id_*

Verifique se há um arquivo de configuração existente:

$ ls -a ~/.ssh/config

Se você obtiver um resultado, verifique este arquivo para obter informações incorretas. Se não houver arquivo, faça o seguinte:

$ echo "Host bitbucket.org" >> ~/.ssh/config
$ echo " IdentityFile ~/.ssh/id_rsa" >> ~/.ssh/config

Confirme o conteúdo:

$ cat ~/.ssh/config

Host bitbucket.org
 IdentityFile ~/.ssh/id_rsa
  • O espaço único antes de "IdentityFile" é necessário.

Verifique se você está iniciando o agente SSH toda vez que executar o GitBash:

$ cat ~/.bashrc
  • Se você vir uma função chamada start_agent, esta etapa já foi concluída.
  • Se não houver arquivo, continue.
  • Se houver um arquivo que não contenha essa função, você estará em uma situação complicada. Provavelmente é seguro anexá-lo (usando as instruções abaixo), mas pode não ser! Se não tiver certeza, faça um backup do seu .bashrc antes de seguir as instruções abaixo ou vá para FOR THE LAZY seção .

Digite o seguinte no GitBash para criar seu arquivo .bashrc:

$ echo "SSH_ENV=$HOME/.ssh/environment" >> ~/.bashrc
$ echo "" >> ~/.bashrc
$ echo "# start the ssh-agent" >> ~/.bashrc
$ echo "function start_agent {" >> ~/.bashrc
$ echo "    echo \"Initializing new SSH agent...\"" >> ~/.bashrc
$ echo "    # spawn ssh-agent" >> ~/.bashrc
$ echo "    /usr/bin/ssh-agent | sed 's/^echo/#echo/' > \"\${SSH_ENV}\"" >> ~/.bashrc
$ echo "    echo succeeded" >> ~/.bashrc
$ echo "    chmod 600 \"\${SSH_ENV}\"" >> ~/.bashrc
$ echo "    . \"\${SSH_ENV}\" > /dev/null" >> ~/.bashrc
$ echo "    /usr/bin/ssh-add" >> ~/.bashrc
$ echo "}" >> ~/.bashrc
$ echo "" >> ~/.bashrc
$ echo "if [ -f \"\${SSH_ENV}\" ]; then" >> ~/.bashrc
$ echo "     . \"\${SSH_ENV}\" > /dev/null" >> ~/.bashrc
$ echo "     ps -ef | grep \${SSH_AGENT_PID} | grep ssh-agent$ > /dev/null || {" >> ~/.bashrc
$ echo "        start_agent;" >> ~/.bashrc
$ echo "    }" >> ~/.bashrc
$ echo "else" >> ~/.bashrc
$ echo "    start_agent;" >> ~/.bashrc
$ echo "fi" >> ~/.bashrc

Verifique se o arquivo foi criado com sucesso (o seu deve diferir apenas onde "seu nome de usuário" aparece):

$ cat ~/.bashrc
SSH_ENV=/c/Users/yourusername/.ssh/environment

# start the ssh-agent
function start_agent {
    echo "Initializing new SSH agent..."
    # spawn ssh-agent
    /usr/bin/ssh-agent | sed 's/^echo/#echo/' > "${SSH_ENV}"
    echo succeeded
    chmod 600 "${SSH_ENV}"
    . "${SSH_ENV}" > /dev/null
    /usr/bin/ssh-add
}

if [ -f "${SSH_ENV}" ]; then
     . "${SSH_ENV}" > /dev/null
     ps -ef | grep ${SSH_AGENT_PID} | grep ssh-agent$ > /dev/null || {
        start_agent;
    }
else
    start_agent;
fi
  • Feche o GitBash e abra-o novamente.
  • Você deve solicitar sua senha (para o arquivo SSH que você gerou anteriormente).
  • Se não for solicitado, você não definiu uma senha ou o GitBash não está executando o script .bashrc (o que seria estranho, considere revisar o conteúdo dele!). Se você estiver executando isso em um Mac (OS X), .bashrcnão é executado por padrão - .bash_profileé. Para corrigir isso, coloque esse trecho no seu .bash_profile:[[ -s ~/.bashrc ]] && source ~/.bashrc

Se você não inserisse uma senha, você teria visto algo assim ao iniciar o GitBash:

Initializing new SSH agent...
succeeded
Identity added: /c/Users/yourusername/.ssh/id_rsa (/c/Users/yourusername/.ssh/id_rsa)

E o seguinte deve retornar resultados:

$ ssh-add -l

No entanto, se você obtiver o seguinte em ssh-add -l:

Could not open a connection to your authentication agent.

Não gerou o agente SSH e é provável que o seu .bashrc seja a causa.

Se, ao iniciar o GitBash, você verá o seguinte:

Initializing new SSH agent...
sh.exe": : No such file or directory

Isso significa que você esqueceu de escapar do $ com a \ ao ecoar no arquivo (ou seja, as variáveis ​​foram expandidas). Recrie seu .bashrc para resolver isso.

Verifique se o agente está em execução e se suas chaves foram adicionadas:

$ ssh-add -l

Deve retornar algo semelhante a este:

2048 0f:37:21:af:1b:31:d5:cd:65:58:b2:68:4a:ba:a2:46 /Users/yourusername/.ssh/id_rsa (RSA)

Execute o seguinte comando para obter sua chave pública:

$ cat ~/.ssh/id_rsa.pub

(deve retornar algo começando com "ssh-rsa ......"

  • Clique no ícone da janela GitBash
  • Clique em Edit
  • Clique em Marcar
  • Realce a chave pública usando o mouse (incluindo o ssh-rsabit inicial e o final == [email protected])
  • Clique com o botão direito do mouse na janela (executa uma cópia)
  • Cole sua chave pública no bloco de notas.
  • Exclua todas as novas linhas, para que seja apenas uma única linha.
  • Pressione CTRL+Ae CTRL+Cpara copiar a chave pública novamente para a área de transferência.

Configure sua chave privada com o BitBucket, executando as seguintes etapas:

  • Abra seu navegador e navegue até o site BitBucket.org
  • Entre no BitBucket.org
  • Clique no seu avatar (canto superior direito)
  • Clique em Gerenciar conta
  • Clique em Chaves SSH (em Segurança no menu à esquerda)
  • Clique em Adicionar chave
  • Digite Global Public Keypara o rótulo
  • Cole a chave pública que você copiou do Bloco de notas

Uma Global Public Keyentrada agora deve estar visível na sua lista de chaves.

  • Voltar ao GitBash
  • cd no diretório que contém seu projeto
  • Altere sua origem para a variação SSH (não será se você executou as etapas FOR THE LAZY )

Verifique seus controles remotos:

$ git remote -v

Alterne para o URL SSH:

$ git remote set-url origin [email protected]:youraccount/yourproject.git

Verifique se as coisas estão funcionando corretamente:

$ git remote show origin

Você deve ver algo assim:

Warning: Permanently added the RSA host key for IP address '...' to the list of known hosts.
* remote origin
  Fetch URL: [email protected]:youruser/yourproject.git
  Push  URL: [email protected]:youruser/yourproject.git
  HEAD branch: master
  Remote branch:
    master tracked
  Local ref configured for 'git push':
    master pushes to master (fast-forwardable)

FEITO!

Você pode optar por usar HTTPS em vez de SSH. Isso exigirá que você digite sua senha durante operações remotas (é armazenada em cache temporariamente após a digitação). Aqui está como você pode configurar o HTTPS:

PARA O PREGUIÇOSO

Você deve corrigir o problema de SSH, conforme descrito por VonC; no entanto, se você estiver com pressa de confirmar e não tiver as ferramentas / tempo / conhecimento para gerar uma nova chave pública agora , defina sua origem para a alternativa HTTPS:

> https://[email protected]/accountname/reponame.git

Usando uma ferramenta GUI, como o TortoiseGit ou ferramentas de linha de comando .

Aqui está a documentação deste URL de origem alternativo.

Linha de comando para adicionar uma origem se não existir:

git remote add origin https://[email protected]/accountname/reponame.git

Linha de comando para alterar uma origem existente:

git remote set-url origin https://[email protected]/accountname/reponame.git

NOTA: o nome da sua conta não é o seu email.

Você também pode definir suas informações globais:

git config --global user.name "Your Name"
git config --global user.email "[email protected]"

Em seguida, tente seu push novamente (não há necessidade de confirmar novamente)

git push origin master
Graeme Wicksted
fonte
echo "Host bitbucket.org" >> ~ / .ssh.config, não deve durar '.' ser um '/'?
Peter Peter
1
Algum tempo acontece que você adicionou tudo mencionado acima, em ~/.bashrcmas ainda quando você executar o comando ssh-all -lainda mostra No agent Nesse caso, tente este comando ssh-agent /bin/bashe que a vontadeInitializing new SSH agent...
shinesecret
5
Uma das melhores respostas que eu já vi em StackOverflow
Sambhav Sharma
1
@JGallardo - Boa pergunta! A boa notícia é não. Essas são variáveis ​​nos scripts do shell bash - são semelhantes às variáveis ​​de ambiente nos arquivos em lote.
Graeme Wicksted
1
O fato de essa não ser a resposta aceita machuca meu coração. Great writeup!
Ruby_newbie
58

Este erro também ocorre se você esqueceu de adicionar a chave privada ssh-agent. Faça isso com:

ssh-add ~/.ssh/id_rsa
Matthias Braun
fonte
4
Foi a resposta no meu caso, algo que sempre esqueço quando crio uma nova chave.
Amertkara
1
Isso foi o que ajudou após atravessar o post acima
Tony Merritt
ele trabalhou para mim :) mas você precisa ter certeza de que você já tem ssh chave privada no seu diretório local e chave pública registrada em sua conta bitbucket
Daniel
25

Reformatado significa que você provavelmente excluiu suas chaves ssh públicas e privadas (em ~ / .ssh).

Você precisa regenerá-los e publicar sua chave pública ssh no seu perfil BitBucket, conforme documentado em " Usar o protocolo SSH com Bitbucket ", seguindo " Configurar SSH para Git com GitBash ".

Contas-> Gerenciar Contas-> Chaves SSH:

http://solvedproblems.hydex11.net/_media/solved-problems/crazy-problems/bitbucket_manage_account.png

Então:

http://solvedproblems.hydex11.net/_media/solved-problems/crazy-problems/bitbucket_add_ssh.png

Imagens do " Integrando o Mercurial / BitBucket ao software JetBrains "

VonC
fonte
7
Só para adicionar um pouco a isso. Certifique-se de usar o BitBucket (como mostrado na imagem) para adicionar a chave SSH às chaves SSH da sua conta (Contas-> Gerenciar contas-> Chaves SSH). Adicioná-lo como uma Chave de Implantação por meio das Configurações do Repositório permitirá que essa chave seja usada apenas para operações somente leitura (sem confirmação).
Welshk91
@ welshk91 eu concordo. Eu alterei a resposta para adicionar imagens mais detalhadas.
VonC
1
@VonC - obrigado por postar isso. Eu tenho tentado em vão fazê-lo funcionar em uma máquina Windows, e isso finalmente fez o truque. Obrigado, Ben
ben18785
21

Eu resolvi isso removendo o controle remoto usando o comando:

git remote remove origin

e tentei adicionar remoto usando https url em vez de ssh

git remote add origin httpsUrl

Ele solicita credenciais do github. Digite credenciais e tente pressionar para git usando:

git push origin master
Ankit Arora
fonte
1
isso me ajudou. esta é a resposta correta no meu caso. obrigado
binsnoel 30/03
Funciona para mim. Eu não
removi a
Obrigado pela resposta direta. Funcionou como um encanto - era exatamente o que eu estava procurando.
Alexandra
4

Eu tive o mesmo problema. Minhas chaves SSH foram definidas corretamente. Corrigi esse problema assim.

Depois de criar um novo projeto no Bitbucket, use clone. Digite o comando de clonagem no terminal e ele deve clonar o projeto vazio no seu computador. Depois disso, você pode copiar seus arquivos para esse diretório e começar a confirmar e enviar para o bitbucket.

Rafael
fonte
1
Que estranho. Eu tive o mesmo problema do OP hoje, mas sem ter reinstalado ou alterado o sistema, minhas chaves estavam boas. O git remote addprocesso simplesmente não funcionou hoje - recebi o erro de autenticação ao tentar enviar - mas excluir .git e, em seguida, usar git clonee copiar novamente minha fonte (apenas um README.md) funciona bem. Obrigado Rafael - certamente não teria pensado em tentar isso, se não fosse a sua resposta.
kris
contente que esta solução ajudou você
Rafael
1
Obrigado pela sua resposta. Consegui corrigir o problema apenas criando um novo diretório e clonando nesse novo diretório. mkdir /tmp/JUNK; cd /tmp/JUNK; git clone ...; cd ..; rm -rf JUNK
Red Cricket
2

Dois pequenos esclarecimentos que podem salvar alguém da confusão pela qual passei:

1 - Os URLs de conexão diferem para HTTPS e SSH

Ao conectar via https, você usa

https://[email protected]/owner-account/repo-name.git

no entanto, ao conectar via SSH, o nome da conta é sempre "git"

ssh://[email protected]/owner-account/repo-name.git

Tentar se conectar ao SSH com o nome da sua conta na frente levará ao erro que o pôster original recebeu. É assim que você pode fazer o teste de conexão com o git @, tentar por engano com seu nome de usuário e ver um erro.

2 - Chaves SSH por meio de contas da equipe serão descontinuadas em 2017

Se você estiver configurando chaves SSH em contas de equipe, eles recomendam alterná-las para contas pessoais. Uma dica útil para evitar

Paulo
fonte
1

Se você estiver usando o SourceTree (estou usando o 2.4.1), encontrei uma maneira mais simples de gerar uma chave SSH e adicioná-la às minhas configurações de Bitbucket. Isso resolveu o problema para mim.

  1. No SourceTree, vá para Preferências.
  2. Vá para a guia Contas e selecione sua conta.
  3. Deve haver uma opção para gerar e copiar uma chave SSH para a área de transferência.
  4. Depois de copiar isso, vá para o Bitbucket no seu navegador. Vá para [avatar] -> Configurações do Bitbucket.
  5. Vá para as chaves SSH.
  6. Clique em Adicionar chave
  7. Cole a chave que você copiou.

Recebi um email de confirmação do Bitbucket de que uma chave SSH foi adicionada à minha conta.

Para referência, no macOS, usando o Terminal, você pode usar o seguinte comando para ver as chaves geradas para o seu dispositivo. É aqui que a chave que você gerou é armazenada.

ls -la ~/.ssh

Como outros já declararam, esta documentação me ajudou: Use o protocolo SSH com o Bitbucket Cloud

Sarah
fonte
1

Faça o ssh como no tutorial do Atlassian e verifique se a chave privada está sendo colada no perfil, não no repositório :)

Hector
fonte
Você poderia incluir um link para o indicado Atlassian tutorial? Quais são as etapas para colar a chave no perfil e como sei se ela está colada no repositório?
EmmanuelB
Ela está bem aqui. Selecione a melhor escolha para sua combinação de casos! Confidence.atlassian.com/bitbucket/…
Hector
0

Eu recebi esse mesmo erro para um repositório - de repente, todos os outros estavam e ainda funcionam bem quando estou tentando enviar confirmações. O problema parecia estar com a chave SSH (como você já sabe nos comentários anteriores) - no bitbucket View Profile, clique em Manage Account.

No lado esquerdo, clique no SSH Keysdiretório e adicione o que você possui em seu sistema no diretório ~ / .ssh /.

Se você ainda não tiver um gerado - use as instruções de uma das postagens, mas certifique-se de usar o arquivo id_dsa.pub padrão ou o personalizado nomeado como um, exigindo posteriormente a -iopção com o caminho para a chave ao conectar ie

ssh -i ~/.ssh/customkeyname username@ip_address

Depois de adicionar sua chave local à sua conta no bitbucket, você poderá começar a interagir com seu repositório.

Sebastian Sulinski
fonte
0

Eu achei que a solução que funcionou melhor para mim foi dividir o impulso em pedaços menores.

e remover os arquivos grandes de imagem da captura de tela (10mb +) das confirmações

No final, a segurança não era um problema mais sobre limites de arquivos bin

Harry Bosh
fonte
Você recebeu o erro acima, observado pelo OP, e não foi um problema de autenticação / segurança? Era o tamanho do seu commit?
31917 JohnZaj
Foi o que aconteceu
Harry Bosh
0

Este erro também aparece quando o repositório não existe. Eu tentei todas as respostas até que vi o nome do repositório faltando um traço

Mirko
fonte
0

Para erros:

Acesso ao repositório [erro] negado. o acesso via chave de implantação é somente leitura. fatal: Não foi possível ler do repositório remoto. Verifique se você possui os direitos de acesso corretos e se o repositório existe.

[erro] fatal: não foi possível ler no repositório remoto.

[erro] fatal: não foi possível encontrar o auxiliar remoto para 'https'

Eu resolvi seguindo estas etapas:

Primeiro instale estas dependências:

$ yum install expat expat-devel openssl openssl-devel

Em seguida, remova o git:

$ yum remove git git-all

Agora crie e instale o Git na última versão, neste caso:

$ wget https://github.com/git/git/archive/v2.13.0.tar.gz
$ tar zxf v.2.13.0.tar.gz
$ cd git-2.13.0/

Em seguida, para a configuração:

$ make configure
$ ./configure --with-expat --with-openssl

E, finalmente, instale assim:

$ make 
$ make install install-doc install-html install-info

é isso, agora configure seu repositório com https:

$ git remote add origin https://github.com/*user*/*repo*.git
# Verify new remote
$ git remote -v

se você configurou uma chave ssh no servidor remoto, será necessário excluí-la.

Johan Morales
fonte
0

Eu recebi esse erro

Conexão com bitbucket.org fechada por host remoto. fatal: Não foi possível ler do repositório remoto. Verifique se você possui os direitos de acesso corretos.

Então eu tentei

git config --global user.email "[email protected]"

trabalhou sem aspas.

Vkreddy Komatireddy
fonte
0

Eu descobri que a linha de comando git não gostava das chaves geradas por meu concurso (Windows 10).

Veja minha resposta no Serverfault

HostMyBus
fonte
0

Estou usando o macOS e, embora eu tenha configurado minha chave pública no bitbucket na próxima vez que tentei pressionar

acesso ao repositório negado.

fatal: Não foi possível ler do repositório remoto.

Verifique se você possui os direitos de acesso corretos e se o repositório existe.

O que eu tive que fazer foi a Etapa 2. Adicione a chave ao ssh-agent conforme descrito no guia de configuração de chaves SSH do Bitbucket e, especialmente, na 3ª etapa:

(somente macOS) Para que seu computador se lembre da sua senha toda vez que reiniciar, abra (ou crie) o arquivo ~ / .ssh / config e adicione estas linhas ao arquivo:

Anfitrião *
UseKeychain sim

Espero que ajude um usuário Mac com o mesmo problema.

sstauross
fonte
0

Eu tive esse problema e pensei que estava louco. Uso SSH há 20 anos. e git sobre SSH desde 2012 ... mas por que não consegui buscar meu repositório de bitbucket no meu computador doméstico?

bem, eu tenho duas contas de bitbucket e tinha 4 chaves SSH carregadas dentro do meu agente. mesmo que meu .ssh / config tenha sido configurado para usar a tecla correta. quando o ssh estava inicializando a conexão, estava usando-os na ordem carregada no agente. então eu estava entrando na minha conta pessoal de bitbucket.

em seguida, obtendo um erro proibido tentando obter o repo. faz sentido.

Descarreguei a chave do agente

ssh-add -d ~/.ssh/personal_rsa

então eu poderia buscar os repositórios.

... Mais tarde, descobri que posso forçá-lo a usar apenas a identidade especificada

 Host bitbucket.org-user2
     HostName bitbucket.org
     User git
     IdentityFile ~/.ssh/user2
     IdentitiesOnly yes

Eu não sabia sobre essa última opção IdentitiesOnly

da própria documentação do bitbucket

https://blog.developer.atlassian.com/different-ssh-keys-multiple-bitbucket-accounts/

Mathieu J.
fonte
-1

Apenas tente

git remote add origin <HTTP URL>
Ashok Joshi
fonte
1
não gostamos de digitar nome de usuário / senha toda vez que buscamos / inserimos no bitbucket / github / etc /
Mathieu J.