Acesso ao repositório negado. o acesso via chave de implantação é somente leitura

302

Depois de clonar com sucesso o meu repo do heroku e adicionar outro controle remoto

1/ git clone [email protected]:[APP].git
2/ git remote add bitbucket ssh://[email protected]/[ACCOUNT]/[REPO].git
3/ git push bitbucket master

Ainda estou recebendo esse erro após executar a linha (3) ou usar o SourceTree

conq: repository access denied. access via a deployment key is read-only.

Primeiro, não entendo o que essa mensagem significa na prática. E isso é uma vergonha.

Eu criei o par de chaves ssh e adicionei ao heroku:

ssh-keygen -t rsa 
heroku keys:add ./id_rsa.pub 

Também adicionei minha chave na seção de chaves de implantação no BitBucket. Mas devo estar faltando alguma coisa. Esta questão não é de preguiça, tenho lido vários documentos, incluindo os guias do BitBuckets. Mas ainda não contorna esse problema.

Esta publicação está relacionada a Posso importar meu repositório heroku git para o bitbuket? e como?

FATOS ADICIONAIS:

ssh -T [email protected]
conq: authenticated via a deploy key.

You can use git or hg to connect to Bitbucket. Shell access is disabled.


$ ssh -v [email protected]
OpenSSH_5.6p1, OpenSSL 0.9.8r 8 Feb 2011
debug1: Reading configuration data /Users/joel/.ssh/config
debug1: Applying options for bitbucket.org
debug1: Reading configuration data /etc/ssh_config
debug1: Applying options for *
debug1: Connecting to bitbucket.org [207.223.240.181] port 22.
debug1: Connection established.
debug1: identity file /Users/joel/.ssh/id_rsa type 1
debug1: identity file /Users/joel/.ssh/id_rsa-cert type -1
debug1: Remote protocol version 2.0, remote software version OpenSSH_5.3
debug1: match: OpenSSH_5.3 pat OpenSSH*
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_5.6
debug1: SSH2_MSG_KEXINIT sent
debug1: SSH2_MSG_KEXINIT received
debug1: kex: server->client aes128-ctr hmac-md5 none
debug1: kex: client->server aes128-ctr hmac-md5 none
debug1: SSH2_MSG_KEX_DH_GEX_REQUEST(1024<1024<8192) sent
debug1: expecting SSH2_MSG_KEX_DH_GEX_GROUP
debug1: SSH2_MSG_KEX_DH_GEX_INIT sent
debug1: expecting SSH2_MSG_KEX_DH_GEX_REPLY
debug1: Host 'bitbucket.org' is known and matches the RSA host key.
debug1: Found key in /Users/joel/.ssh/known_hosts:5
debug1: ssh_rsa_verify: signature correct
debug1: SSH2_MSG_NEWKEYS sent
debug1: expecting SSH2_MSG_NEWKEYS
debug1: SSH2_MSG_NEWKEYS received
debug1: Roaming not allowed by server
debug1: SSH2_MSG_SERVICE_REQUEST sent
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug1: Authentications that can continue: publickey
debug1: Next authentication method: publickey
debug1: Offering RSA public key: /Users/joel/.ssh/id_rsa
debug1: Remote: Forced command: conq deploykey:13907
debug1: Remote: Port forwarding disabled.
debug1: Remote: X11 forwarding disabled.
debug1: Remote: Agent forwarding disabled.
debug1: Remote: Pty allocation disabled.
debug1: Server accepts key: pkalg ssh-rsa blen 279
debug1: read PEM private key done: type RSA
debug1: Remote: Forced command: conq deploykey:13907
debug1: Remote: Port forwarding disabled.
debug1: Remote: X11 forwarding disabled.
debug1: Remote: Agent forwarding disabled.
debug1: Remote: Pty allocation disabled.
debug1: Authentication succeeded (publickey).
Authenticated to bitbucket.org ([207.223.240.181]:22).
debug1: channel 0: new [client-session]
debug1: Requesting [email protected]
debug1: Entering interactive session.
debug1: Sending environment.
debug1: Sending env LC_CTYPE = UTF-8
PTY allocation request failed on channel 0

Parece que está tudo bem.

zabumba
fonte
1
Adicionando uma chave SSH em vez de chave Implantação funcionou para mim
Hari Das
Lembre-se de votar nas perguntas e nas respostas. Felicidades!!
Zabumba

Respostas:

720

A primeira confusão do meu lado foi sobre exatamente onde definir as chaves SSH no BitBucket.

Eu sou novo no BitBucket e estava definindo uma Chave de Implantação que fornece apenas acesso de leitura .

Portanto, verifique se você está definindo o seu rsa pub keynas Configurações da sua Conta BitBucket .

Clique no seu avatar BitBucket e selecione Configurações de Bitbucket (Gerenciar conta) Lá você poderá definir as chaves SSH .

Simplesmente excluí a Chave de Implantação , não preciso de nenhuma por enquanto. E funcionou

insira a descrição da imagem aqui

zabumba
fonte
48
Obrigado pela resposta. Isso é exatamente a mesma coisa que eu estava perdendo. Adicionei uma chave de implantação em vez de uma chave SSH.
27
Sim! Obrigado pela sua resposta. Atlassian deve realmente deixar isso mais claro em sua documentação.
Ralph David Abernathy
14
Sim, esse menu de teclas ssh está bem escondido no Bitbucket!
jonprasetyo
3
Ótima ajuda! Mercy Joelmaranhao!
kmria
6
Lutado com isso por 30 minutos antes encontrado sua resposta, muito obrigado
micgeronimo
64

Agora a opção SSH está nas configurações de segurança

Clique em Seu Avatar -> Configurações de Bitbucket -> Chave SSH -> Adicionar Chave

Cole sua chave pública

Sathish
fonte
10
Obrigado. Eu só quero descrever o meu caso. Eu adicionei minha chave pública nas configurações do repositório em vez de nas chaves da minha conta Bitbucket. Então, eu apaguei a chave no repositório e a adicionei nas configurações do meu perfil para fazê-la funcionar.
lyubeto
13

As chaves de implantação são somente leitura. Para habilitar o acesso de gravação, você precisa:

  • Remova essa chave de implantação das configurações do seu repositório. Você não poderá gravar neste repositório com essa chave de qualquer maneira.

  • Vá para "Avatar -> Configurações -> Chaves SSH" e adicione a mesma chave

  • Agora tente pressionar para remover o ramo

Você conseguiu escrever nos repositórios antes, mas esta é uma alteração no BitBucket, na qual você não pode mais escrever com a chave deploy.

timhysniu
fonte
Graças isso funcionou para mim depois de puxar o cabelo por um longo
Umar Adil
10

'Chave de implantação' é apenas para acesso Somente leitura. A seguir, é uma boa maneira de resolver isso.

  • Crie uma chave SSH e adicione-a ao bitbucket (Avatar do usuário -> Configuração do Bitbucket-> chaves SSH)
  • ~ / .ssh / known_hosts
  • ssh-add -D (remover chaves carregadas no agente SSH)
  • ssh-add ~ / .ssh / your_private_key_for_bitbucket
  • ssh [email protected] -Tv (Verifique se sua chave está sendo usada para se conectar ao bitbucket)
  • git push 'nome remoto' 'nome da ramificação'
Jerome Anthony
fonte
9

Você deve excluir a chave de implantação primeiro se quiser adicionar a mesma chave em Gerenciar chave SSH da conta.

sent.ror
fonte
3
Eliminar a chave deploy me dáSomeone has already registered this as a deploy key.
dan-Klasson
3
Lembre-se de que você deve adicionar a chave pública shh nas Configurações do BITBUCKET (como na conta BB completa) NOT e repito NOT nas Configurações individuais do repositório. Se você adicionou uma chave nas configurações de recompra, é por isso que está recebendo esses erros.
Nate Uni
8

TLDR: ssh-add ~ / .ssh / yourkey

Acabei de resolver esse problema.

E nenhuma das outras respostas ajudou.

Eu tinha um ./ssh/config com todas as coisas certas, também um repositório anterior funcionando bem (mesma conta de bitbucket, mesma chave). Então eu gerei uma deploy_key e depois criei um novo repositório.

Depois disso, não foi possível clonar o novo repositório.

Eu gostaria de saber como / por que o agente ssh estava atrapalhando isso, mas a adição da chave resolveu o problema. Quero dizer, adicionar a chave no meu Ubuntu local, não no administrador de bitbucket. O comando é apenas

    ~/.ssh$ ssh-add myregualrkey

Espero que isso ajude alguém.

Tjunkie
fonte
Excelente. Era exatamente isso que eu estava procurando.
precisa saber é o seguinte
3
Eu não entendo o que você fez.
Kev
5

Isso aconteceu quando estava tentando usar uma chave de implantação, porque era exatamente isso que eu queria.

Eu poderia conectar via ssh -T [email protected]e me diria que eu tinha acesso para ler o repositório que eu queria, mas git clonefalharia.

Limpar ~/.ssh/known_hosts, gerar uma nova chave via ssh-keygen, adicionar essa nova chave ao bitbucket e tentar novamente a corrigiu.

sarink
fonte
4

Gostaria de enfatizar novamente o seguinte:

  • Você pode ter adicionado a chave SSH ao seu repositório (por exemplo, ExampleRepo), mas não é para onde a chave SSH vai .
  • Destina-se a entrar em SEU PERFIL . Este é o pequeno avatar no canto inferior esquerdo da tela. Aqui, você encontrará um diferente local para colocar suas chaves SSH (em Segurança)> e depois adicionar a chave aqui.
  • Se você acidentalmente colocar sua chave SSH no repositório (em oposição à sua conta), exclua a chave no repositório.

Levei anos para perceber, de alguma forma, mesmo depois de ler as respostas aqui, não houve um clique.

David Liu
fonte
3

Primeiro, escolha ou crie a chave que você deseja usar para enviar para o Bitbucket. Digamos que sua chave pública esteja em~/.ssh/bitbucket.pub

  • Adicione sua chave pública ao Bitbucket fazendo login e acessando seu perfil público, configurações, ssh-key, add key.
  • Configure o ssh para usar essa chave ao se comunicar com o Bitbucket. Por exemplo, no Linux, adicione a ~/.ssh/config:
    Host bitbucket.org
    IdentityFile ~/.ssh/bitbucket
Ivan Ogai
fonte
2

Recentemente, enfrentei o mesmo problema. Eu recebi o seguinte erro:

acesso ao repositório negado. o acesso via chave de implantação é somente leitura.

Você pode ter dois tipos de chaves SSH:

  1. Para toda a sua conta, que funcionará para todos os repositórios
  2. Chave SSH por repositório, que pode ser usada apenas para esse repositório específico.

Simplesmente removi minha chave SSH do repositório e adicionei uma nova chave SSH à minha conta e funcionou bem.

Eu espero que isso ajude alguém. Felicidades

Yoones Mehdian
fonte
1

Eu tive o mesmo problema que Kabir Sarin. A solução foi clonar o repositório via SSH, em vez de usar o URL https. então foi isso que me ajudou, e espero que outros:

    git clone [email protected]:{accountName}/{repoName}.git
Lippai Zoltan
fonte
1

Passos:

  1. Crie chaves ssh no servidor de origem

    ssh-keygen

  2. Gato e cópia id_rsa.pub localizado no diretório ~. / Ssh

  3. Vá para Bitbucket, se você já definiu as chaves de acesso para repositórios, exclua as chaves públicas existentes
  4. Vá para Bitbucket avatar> Configurações de Bitbucket> Chaves SSH (em Segurança, painel esquerdo)> Clique em 'Adicionar Chaves'> cole a chave pública.
  5. Verifique se funciona executando o comando abaixo no servidor de origem

    git remote show origin

  6. Para buscar e enviar a partir do servidor de origem, se o protocolo for 'https', será necessário alterá-lo para 'git + ssh' executando o comando abaixo

    git remote set-url origin git+ssh://<bitbucketaccount>@bitbucket.org/<accountname>/repo.git

  7. Verifique se você pode fazer push para o repositório.

Feito!

rahul darga
fonte
qual é o ponto em que a resposta certa já foi dada 3 ou 4 vezes? por que não tentar responder a uma pergunta que ainda não tem resposta.
Zabumba
1
Obrigado pelo gentil conselho.
Rahul darga
0

Tudo que você precisa - adicione outra chave e use-a.

Como eu encontrei a primeira chave - sempre chave de implantação.

Victor Perov
fonte
0

Às vezes, não funciona porque você define manualmente outra chave para o bitbucket ~/.ssh/config.

sean
fonte
0

Dois processo passo para ser capaz de empurrar puxar
Passo 1: Gerar ssh chave (público e privado) no mac

Passo 2: Coloque a chave privada no mac e chave pública no website git

abaixo etapas detalhadas são para usuários de Mac

Etapa 1: Gerando Chaves

  1. (verifique se você tem o git instalado) https://git-scm.com/download/mac
  2. abra o terminal e digite ssh-keygenisto solicitará que você insira o local de armazenamento para a chave, digite/Users/[machinename]/.ssh/[keyname]
  3. Em seguida, ele solicitará a senha, você pode deixá-la em branco pressionando enter ou digite uma palavra-chave a ser inserida novamente no próximo prompt.
  4. Isso criará duas chaves para você, privadas e públicas, com os nomes [keyname] e [keyname] .pub

Etapa 2: pressionar as teclas em locais apropriados [contas Mac e remotas, por exemplo, Github, bitbucket, gitlab etc.]

  1. Tipo ssh-add -K ~/.ssh/[keyname] terminal para adicionar sua chave privada ao mac
  2. Digite pbcopy < ~/.ssh/[keyname].pubpara copiar a chave pública para a área de transferência
  3. Abra as configurações da conta no seu site git e vá para adicionar chave, cole a chave pública copiada acima

Feito, agora você pode pressionar pull.

Akshay Vijay Jain
fonte
Para aqueles que votaram mal, eu estava lutando o dia inteiro e não consegui encontrar nenhuma resposta que resolvesse diretamente o meu problema, e as etapas mencionadas aqui os resolvem diretamente e são genéricas. De qualquer forma
Akshay Vijay Jain
-1

Aqui está o código completo para clonar todos os repositórios de uma determinada equipe / usuário do BitBucket

# -*- coding: utf-8 -*-
"""

    ~~~~~~~~~~~~

    Little script to clone all repos from a given BitBucket team/user.

    :author: https://thepythoncoding.blogspot.com/2019/06/python-script-to-clone-all-repositories.html
    :copyright: (c) 2019
"""

from git import Repo
from requests.auth import HTTPBasicAuth

import argparse
import json
import os
import requests
import sys

def get_repos(username, password, team):
    bitbucket_api_root = 'https://api.bitbucket.org/1.0/users/'
    raw_request = requests.get(bitbucket_api_root + team, auth=HTTPBasicAuth(username, password))
    dict_request = json.loads(raw_request.content.decode('utf-8'))
    repos = dict_request['repositories']

    return repos

def clone_all(repos):
    i = 1
    success_clone = 0
    for repo in repos:
        name = repo['name']
        clone_path = os.path.abspath(os.path.join(full_path, name))

        if os.path.exists(clone_path):
            print('Skipping repo {} of {} because path {} exists'.format(i, len(repos), clone_path))
        else:
            # Folder name should be the repo's name
            print('Cloning repo {} of {}. Repo name: {}'.format(i, len(repos), name))
            try:
                git_repo_loc = '[email protected]:{}/{}.git'.format(team, name)
                Repo.clone_from(git_repo_loc, clone_path)
                print('Cloning complete for repo {}'.format(name))
                success_clone = success_clone + 1
            except Exception as e:
                print('Unable to clone repo {}. Reason: {} (exit code {})'.format(name, e.stderr, e.status))
        i = i + 1

    print('Successfully cloned {} out of {} repos'.format(success_clone, len(repos)))

parser = argparse.ArgumentParser(description='clooney - clone all repos from a given BitBucket team/user')

parser.add_argument('-f',
                    '--full-path',
                    dest='full_path',
                    required=False,
                    help='Full path of directory which will hold the cloned repos')

parser.add_argument('-u',
                    '--username',
                    dest="username",
                    required=True,
                    help='Bitbucket username')

parser.add_argument('-p',
                    '--password',
                    dest="password",
                    required=False,
                    help='Bitbucket password')

parser.add_argument('-t',
                    '--team',
                    dest="team",
                    required=False,
                    help='The target team/user')

parser.set_defaults(full_path='')
parser.set_defaults(password='')
parser.set_defaults(team='')

args = parser.parse_args()

username = args.username
password = args.password
full_path = args.full_path
team = args.team

if not team:
    team = username

if __name__ == '__main__':
    try:
        print('Fetching repos...')
        repos = get_repos(username, password, team)
        print('Done: {} repos fetched'.format(len(repos)))
    except Exception as e:
        print('FATAL: Could not get repos: ({}). Terminating script.'.format(e))
        sys.exit(1)

    clone_all(repos)

Mais informações: https://thepythoncoding.blogspot.com/2019/06/python-script-to-clone-all-repositories.html

Kais Tounsi
fonte
-3

para este erro: conq: acesso ao repositório negado. o acesso via chave de implantação é somente leitura.

Eu mudo o nome da minha chave, exemplo

cd /home/try/.ssh/
mv try id_rsa
mv try.pub id_rsa.pub

Eu trabalho com minha própria chave no bitbucket

Elron
fonte