Accesso al repository negato. l'accesso tramite una chiave di distribuzione è di sola lettura


302

Dopo aver clonato con successo il mio repository da heroku e aggiunto un altro telecomando

1/ git clone git@heroku.com:[APP].git
2/ git remote add bitbucket ssh://git@bitbucket.org/[ACCOUNT]/[REPO].git
3/ git push bitbucket master

Ricevo ancora questo errore dopo aver eseguito la riga (3) o usando SourceTree

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

Innanzitutto non capisco cosa significhi questo messaggio in pratica. E questo è un peccato.

Ho creato la coppia di chiavi ssh e aggiunto ad heroku:

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

Ho anche aggiunto la mia chiave nella sezione chiavi di distribuzione in BitBucket. Ma mi manca qualcosa. Questa domanda non è per pigrizia, ho letto vari documenti tra cui le guide di BitBuckets. Ma questo problema non si risolve ancora.

Questo post è correlato a Posso importare il mio repository heroku git in bitbuket? e come?

FATTI AGGIUNTIVI:

ssh -T hg@bitbucket.org
conq: authenticated via a deploy key.

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


$ ssh -v git@bitbucket.org
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 no-more-sessions@openssh.com
debug1: Entering interactive session.
debug1: Sending environment.
debug1: Sending env LC_CTYPE = UTF-8
PTY allocation request failed on channel 0

Sembra che tutto vada bene.


1
L'aggiunta di una chiave SSH invece della chiave di distribuzione ha funzionato per me
Hari Das,

Ricorda di votare sia le domande che le risposte. Saluti!!
zabumba,

Risposte:


720

La prima confusione da parte mia era su dove esattamente impostare le chiavi SSH in BitBucket.

Sono nuovo di BitBucket e stavo impostando una chiave di distribuzione che fornisce solo l' accesso in lettura .

Quindi assicurati di impostare le impostazioni del rsa pub keytuo account BitBucket .

Fai clic sul tuo avatar BitBucket e seleziona Impostazioni Bitbucket (Gestisci profilo). Lì sarai in grado di impostare le chiavi SSH .

Ho semplicemente eliminato la chiave di distribuzione , non ne ho bisogno per ora. E ha funzionato

inserisci qui la descrizione dell'immagine


48
Grazie per la risposta. Questa è esattamente la stessa cosa che mi mancava. Ho aggiunto una chiave di distribuzione anziché una chiave SSH.

27
Sì! La ringrazio per la risposta. Atlassian dovrebbe davvero renderlo più chiaro nella loro documentazione.
Ralph David Abernathy,

14
Sì, il menu dei tasti ssh è ben nascosto in Bitbucket!
jonprasetyo,

3
Grande aiuto! Misericordia Joelmaranhao!
kmria,

6
Lottato con questo per 30 minuti prima di aver trovato la tua risposta, grazie mille
micgeronimo

64

Ora l'opzione SSH è nelle impostazioni di sicurezza

Fai clic sul tuo avatar -> Impostazioni Bitbucket -> Chiave SSH -> Aggiungi chiave

Incolla la tua chiave pubblica


10
Grazie. Voglio solo descrivere il mio caso. Ho aggiunto la mia chiave pubblica nelle impostazioni del repository anziché nelle chiavi del mio account Bitbucket. Quindi ho eliminato la chiave nel repository e l'ho aggiunta nelle impostazioni del mio profilo per farlo funzionare.
Lyubeto,


13

Le chiavi di distribuzione sono di sola lettura. Per abilitare l'accesso in scrittura è necessario:

  • Rimuovere questa chiave di distribuzione dalle impostazioni del repository. Non sarai in grado di scrivere a questo repository con questa chiave comunque.

  • Vai su "Avatar -> Impostazioni -> Chiavi SSH" e aggiungi la stessa chiave

  • Ora prova a spingere per rimuovere il ramo

Prima era possibile scrivere nei repository, ma questa è una modifica di BitBucket in cui non è più possibile scrivere con la chiave di distribuzione.


Grazie, questo ha funzionato per me dopo aver tirato i capelli a lungo
Umar Adil,

10

'Chiave di distribuzione' è solo per l'accesso in sola lettura. Di seguito è un buon modo per risolvere questo problema.

  • Crea e chiave SSH e aggiungilo a bitbucket (Avatar utente -> Impostazioni Bitbucket-> Chiavi SSH)
  • ~ / .ssh / known_hosts
  • ssh-add -D (rimuove le chiavi caricate sull'agente SSH)
  • ssh-add ~ / .ssh / your_private_key_for_bitbucket
  • ssh git@bitbucket.org -Tv (Verifica che la tua chiave si stia abituando a connettersi a bitbucket)
  • git push 'nome remoto' 'nome ramo'

9

È necessario eliminare prima la chiave di distribuzione se si intende aggiungere la stessa chiave in Gestisci chiave SSH account.


3
L'eliminazione della chiave deploy mi dàSomeone has already registered this as a deploy key.
dan-klasson il

3
Sii chiaro che dovresti aggiungere la chiave pubblica shh nelle IMPOSTAZIONI BITBUCKET (come per l'account BB completo) NOT e ripeterò NOT nelle singole Impostazioni Repo. Se hai aggiunto una chiave nelle impostazioni del repository, è per questo che ricevi questi errori.
Nate Uni,

8

TLDR: ssh-add ~ / .ssh / yourkey

Ho appena risolto questo problema.

E nessuna delle altre risposte ha aiutato.

Avevo un ./ssh/config con tutte le cose giuste, anche un repository precedente funzionava bene (stesso account bitbucket, stessa chiave). Quindi ho generato un deploy_key e successivamente ho creato un nuovo repository.

Dopodiché non è stato possibile clonare il nuovo repository.

Vorrei sapere come / perché l'agente ssh stava rovinando tutto, ma l'aggiunta della chiave l'ha risolto. Intendo aggiungere la chiave nel mio Ubuntu locale, non nell'amministratore bitbucket. Il comando è giusto

    ~/.ssh$ ssh-add myregualrkey

Spero che questo aiuti qualcuno.


Eccellente. Questo era esattamente quello che stavo cercando.
jpaljasma,

3
Non capisco cosa hai fatto.
kev,

5

Ho avuto questo accadere quando stavo cercando di utilizzare una chiave di distribuzione perché era esattamente quello che volevo.

Potrei connettermi tramite ssh -T git@bitbucket.orge mi direbbe che avevo accesso a leggere il repository che volevo, ma git clonenon ci riuscirei.

Chiarire ~/.ssh/known_hosts , generare una nuova chiave tramite ssh-keygen, aggiungere quella nuova chiave a bitbucket e riprovare a risolverlo per me.


4

Vorrei sottolineare nuovamente quanto segue:

  • È possibile che sia stata aggiunta la chiave SSH al proprio repository (ad esempio ExampleRepo), ma NON è qui che si trova la chiave SSH .
  • È pensato per entrare nel TUO PROFILO . Questo è il piccolo avatar nell'angolo in basso a sinistra dello schermo. Qui ne troverai uno diverso posto dove mettere le tue chiavi SSH (sotto Sicurezza)> quindi aggiungi la chiave qui.
  • Se si inserisce accidentalmente la chiave SSH nel repository (al contrario del proprio account), quindi eliminare quella nel repository.

Mi ci sono voluti anni per rendermi conto, in qualche modo anche dopo aver letto le risposte qui non ha fatto clic.


3

Innanzitutto scegli o crea la chiave che desideri utilizzare per inviare a Bitbucket. Diciamo che la sua chiave pubblica è a~/.ssh/bitbucket.pub

  • Aggiungi la tua chiave pubblica a Bitbucket accedendo e andando al tuo profilo pubblico, impostazioni, ssh-key, aggiungi chiave.
  • Configura ssh per usare quella chiave quando comunichi con Bitbucket. Ad esempio in Linux aggiungere a ~/.ssh/config:
    Host bitbucket.org
    IdentityFile ~/.ssh/bitbucket

2

Di recente ho affrontato lo stesso problema. Ho ricevuto il seguente errore:

accesso al repository negato. l'accesso tramite una chiave di distribuzione è di sola lettura.

Puoi avere due tipi di chiavi SSH:

  1. Per il tuo intero account che funzionerà per tutti i repository
  2. Chiave SSH per repository che può essere utilizzata solo per quel repository specifico.

Ho semplicemente rimosso la mia chiave SSH del repository e aggiunto una nuova chiave SSH al mio account e ha funzionato bene.

Spero che aiuti qualcuno. Saluti


1

Ho avuto lo stesso problema di Kabir Sarin. La soluzione era clonare il repository tramite SSH, anziché utilizzare l'URL https. quindi questo è ciò che mi ha aiutato, e spero che altri:

    git clone git@bitbucket.org:{accountName}/{repoName}.git

1

passi:

  1. Crea chiavi ssh sul server di origine

    ssh-keygen

  2. Cat e copia id_rsa.pub che si trova nella directory ~. / Ssh

  3. Vai su Bitbucket, se hai già impostato le chiavi di accesso per i repository, quindi elimina le chiavi pubbliche esistenti
  4. Vai su Avatar Bitbucket> Impostazioni Bitbucket> Chiavi SSH (sotto Sicurezza, riquadro sinistro)> Fai clic su "Aggiungi chiavi"> incolla la chiave pubblica.
  5. Verifica se funziona eseguendo il comando seguente sul server di origine

    git remote show origin

  6. Per recuperare e inviare dal server di origine, se il protocollo è "https", è necessario modificarlo in "git + ssh" eseguendo il comando seguente

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

  7. Controlla se riesci a fare push al repository.

Fatto!


qual è il punto in cui la risposta giusta è stata data già 3 o 4 volte? perché non provare a rispondere a una domanda che non ha ancora una risposta.
zabumba,

1
Grazie per il gentile consiglio.
Rahul Darga,

0

Tutto ciò di cui hai bisogno: aggiungi un'altra chiave e usala.

Come ho trovato la prima chiave, sempre Chiave di distribuzione.


0

A volte non funziona perché hai impostato manualmente un'altra chiave per bitbucket ~/.ssh/config.


0

Procedura in due passaggi per poter premere pull
Fase 1: generare la chiave ssh (pubblica e privata) su mac

Fase 2: inserire la chiave privata in mac e chiave pubblica nel sito Web git di

seguito i passaggi dettagliati sono per gli utenti mac

Passaggio 1: generazione delle chiavi

  1. (assicurati di aver installato git) https://git-scm.com/download/mac
  2. apri il terminale e digita ssh-keygenquesto ti chiederà di inserire la posizione di archiviazione per la chiave, puoi digitare/Users/[machinename]/.ssh/[keyname]
  3. Successivamente ti chiederà la passphrase, puoi lasciarla vuota premendo invio o inserire qualche parola chiave da inserire nuovamente al prossimo prompt
  4. Ciò avrà creato due chiavi per te, private e pubbliche, con nome [keyname] e [keyname] .pub

Step2: premere i tasti in posizioni appropriate [mac e account remoti, ad es. Github, bitbucket, gitlab ecc.]

  1. genere ssh-add -K ~/.ssh/[keyname] terminale per aggiungere la tua chiave privata al mac
  2. Digitare pbcopy < ~/.ssh/[keyname].pubper copiare la chiave pubblica negli Appunti
  3. Apri le impostazioni dell'account sul tuo rispettivo sito Web Git e vai ad aggiungere la chiave, lì incolla la chiave pubblica copiata sopra

Fatto, ora puoi spingere pull.


Per coloro che hanno effettuato il downvoting, stavo lottando tutto il giorno e non sono riuscito a trovare alcuna risposta per risolvere direttamente il mio problema, e i passaggi menzionati qui li risolvono direttamente e sono generici. Comunque
Akshay Vijay Jain il

-1

ecco il codice completo per clonare tutti i repository da un determinato team / utente 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 = 'git@bitbucket.org:{}/{}.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)

Maggiori informazioni: https://thepythoncoding.blogspot.com/2019/06/python-script-to-clone-all-repositories.html


-3

per questo errore: conq: accesso al repository negato. l'accesso tramite una chiave di distribuzione è di sola lettura.

Cambio il nome della mia chiave, ad esempio

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

Lavoro sulla mia chiave su bitbucket

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.