Accès au référentiel refusé. l'accès via une clé de déploiement est en lecture seule

302

Après avoir cloné avec succès mon dépôt depuis Heroku et ajouté une autre télécommande

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

Je reçois toujours cette erreur après avoir exécuté la ligne (3) ou utilisé SourceTree

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

Tout d'abord, je ne comprends pas ce que ce message signifie dans la pratique. Et c'est dommage.

J'ai créé une paire de clés ssh et ajouté à heroku:

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

J'ai également ajouté ma clé dans la section des clés de déploiement dans BitBucket. Mais je dois manquer quelque chose. Cette question n'est pas par paresse, j'ai lu divers documents, y compris des guides BitBuckets. Mais cela ne résout toujours pas ce problème.

Ce message est lié à Puis-je importer mon référentiel Heroku Git dans Bitbuket? et comment?

FAITS SUPPLÉMENTAIRES:

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

On dirait que tout va bien.

zabumba
la source
1
L'ajout d'une clé SSH au lieu d'une clé de déploiement a fonctionné pour moi
Hari Das
N'oubliez pas de voter à la fois pour les questions et les réponses. À votre santé!!
zabumba

Réponses:

720

La première confusion de mon côté était de savoir exactement où définir les clés SSH dans BitBucket.

Je suis nouveau sur BitBucket et je définissais une clé de déploiement qui donne un accès en lecture seule.

Assurez-vous donc que vous définissez votre rsa pub keydans vos paramètres de compte BitBucket .

Cliquez sur votre avatar BitBucket et sélectionnez Paramètres Bitbucket (Gérer son compte). Là, vous pourrez définir des clés SSH .

J'ai simplement supprimé la clé de déploiement , je n'en ai pas besoin pour l'instant. Et ça a marché

entrez la description de l'image ici

zabumba
la source
48
Merci d'avoir répondu. C'est exactement la même chose que je manquais. J'ai ajouté une clé de déploiement au lieu d'une clé SSH.
27
Oui! Merci pour votre réponse. Atlassian devrait vraiment le rendre plus clair dans sa documentation.
Ralph David Abernathy
14
Oui, ce menu clé ssh est bien caché dans Bitbucket!
jonprasetyo
3
Grande aide! Mercy Joelmaranhao!
kmria
6
Lutté avec cela pendant 30 minutes avant de trouver votre réponse, merci beaucoup
micgeronimo
64

Maintenant, l'option SSH est sous les paramètres de sécurité

Cliquez sur votre avatar -> Paramètres Bitbucket -> Clé SSH -> Ajouter une clé

Collez votre clé publique

Sathish
la source
10
Je vous remercie. Je veux juste décrire mon cas. J'ai ajouté ma clé publique dans les paramètres du référentiel plutôt que dans mes clés de compte Bitbucket. J'ai donc supprimé la clé dans le référentiel et l'ai ajoutée dans les paramètres de mon profil afin de la faire fonctionner.
lyubeto
13

Les clés de déploiement sont en lecture seule. Pour activer l'accès en écriture, vous devez:

  • Supprimez cette clé de déploiement de vos paramètres de référentiel. De toute façon, vous ne pourrez pas écrire dans ce dépôt avec cette clé.

  • Allez dans "Avatar -> Paramètres -> Clés SSH" et ajoutez la même clé

  • Maintenant, essayez de pousser pour supprimer la branche

Vous avez pu écrire dans des référentiels auparavant, mais il s'agit d'un changement dans BitBucket où vous ne pouvez plus écrire avec la clé de déploiement.

timhysniu
la source
Merci, cela a fonctionné pour moi après avoir tiré les cheveux pendant une longue période
Umar Adil
10

La «clé de déploiement» est réservée à l'accès en lecture seule. Ce qui suit est un bon moyen de résoudre ce problème.

  • Créer et clé SSH et l'ajouter à bitbucket (Avatar utilisateur -> Paramètres Bitbucket-> Clés SSH)
  • ~ / .ssh / known_hosts
  • ssh-add -D (Supprimer les clés chargées dans l'agent SSH)
  • ssh-add ~ / .ssh / your_private_key_for_bitbucket
  • ssh [email protected] -Tv (Vérifiez que votre clé est utilisée pour se connecter à bitbucket)
  • git push 'nom distant' 'nom de branche'
Jerome Anthony
la source
9

Vous devez d'abord supprimer la clé de déploiement si vous souhaitez ajouter la même clé sous Gérer la clé SSH du compte.

sent.ror
la source
3
La suppression de la clé de déploiement me donneSomeone has already registered this as a deploy key.
dan-klasson
3
Soyez clair que vous devez ajouter la clé publique shh sous les PARAMÈTRES BITBUCKET (comme pour le compte BB complet) NON et je répète NON sous les paramètres de dépôt individuels. Si vous avez ajouté une clé sous les paramètres de dépôt, c'est pourquoi vous obtenez ces erreurs.
Nate Uni
8

TLDR: ssh-add ~ / .ssh / yourkey

Je viens de résoudre ce problème.

Et aucune des autres réponses n'a aidé.

J'ai eu un ./ssh/config avec toutes les bonnes choses, aussi un dépôt antérieur fonctionnant bien (même compte bitbucket, même clé). Ensuite, j'ai généré un deploy_key, puis créé un nouveau référentiel.

Après cela ne pouvait pas cloner le nouveau dépôt.

Je souhaite savoir comment / pourquoi l'agent ssh a tout gâché, mais l'ajout de la clé l'a résolu. Je veux dire l'ajout de la clé dans mon Ubuntu local, pas dans l'administrateur bitbucket. La commande est juste

    ~/.ssh$ ssh-add myregualrkey

J'espère que cela aide quelqu'un.

Tjunkie
la source
Excellent. C'était exactement ce que je cherchais.
jpaljasma
3
Je ne comprends pas ce que tu as fait.
kev
5

Je l'ai fait lorsque j'essayais d'utiliser une clé de déploiement, car c'est exactement ce que je voulais.

Je pouvais me connecter via ssh -T [email protected]et cela me dirait que j'avais accès à lire le référentiel que je voulais, mais git cloneéchouerait.

Effacer ~/.ssh/known_hosts, générer une nouvelle clé via ssh-keygen, ajouter cette nouvelle clé à bitbucket et réessayer l'a corrigé pour moi.

Sarink
la source
4

Je voudrais souligner à nouveau ce qui suit:

  • Vous avez peut-être ajouté la clé SSH à votre référentiel (par exemple ExampleRepo), mais ce n'est PAS là que la clé SSH va .
  • Il est destiné à entrer dans VOTRE PROFIL . Il s'agit du petit avatar dans le coin inférieur gauche de l'écran. Ici, vous trouverez un autre endroit pour mettre vos clés SSH (sous Sécurité)> puis vous ajoutez la clé ici à la place.
  • Si vous placez accidentellement votre clé SSH dans le référentiel (par opposition à votre compte), supprimez celle du référentiel.

Cela m'a pris beaucoup de temps à réaliser, d'une manière ou d'une autre même après avoir lu les réponses ici, il n'a pas cliqué.

David Liu
la source
3

Choisissez ou créez d'abord la clé que vous souhaitez utiliser pour passer à Bitbucket. Disons que sa clé publique est à~/.ssh/bitbucket.pub

  • Ajoutez votre clé publique à Bitbucket en vous connectant et en accédant à votre profil public, paramètres, clé ssh, ajouter une clé.
  • Configurez ssh pour utiliser cette clé lors de la communication avec Bitbucket. Par exemple, sous Linux, ajoutez à ~/.ssh/config:
    Host bitbucket.org
    IdentityFile ~/.ssh/bitbucket
Ivan Ogai
la source
2

Récemment, j'ai rencontré le même problème. J'ai eu l'erreur suivante:

accès au référentiel refusé. l'accès via une clé de déploiement est en lecture seule.

Vous pouvez avoir deux types de clés SSH:

  1. Pour l'ensemble de votre compte qui fonctionnera pour tous les référentiels
  2. Par clé SSH du référentiel qui ne peut être utilisée que pour ce référentiel spécifique.

J'ai simplement supprimé ma clé SSH du référentiel et ajouté une nouvelle clé SSH à mon compte et cela a bien fonctionné.

J'espère que ça aide quelqu'un. À votre santé

Yoones Mehdian
la source
1

J'avais le même problème que Kabir Sarin. La solution était de cloner le dépôt via SSH, au lieu d'utiliser l'URL https. c'est donc ce qui m'a aidé, et j'espère que les autres:

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

Pas:

  1. Créer des clés ssh sur le serveur source

    ssh-keygen

  2. Cat et copiez id_rsa.pub situé sous le répertoire ~. / Ssh

  3. Accédez à Bitbucket, si vous avez déjà défini les clés d'accès pour les référentiels, puis supprimez les clés publiques existantes
  4. Accédez à Bitbucket avatar> Paramètres Bitbucket> Clés SSH (sous Sécurité, volet gauche)> Cliquez sur 'Ajouter des clés'> collez la clé publique.
  5. Vérifiez si cela fonctionne en exécutant la commande ci-dessous sur le serveur source

    git remote show origin

  6. Pour récupérer et pousser à partir du serveur source, si le protocole est 'https', vous devez le changer en 'git + ssh' en exécutant la commande ci-dessous

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

  7. Vérifiez si vous pouvez faire pousser vers le repo.

Terminé!

rahul darga
la source
quel est le point lorsque la bonne réponse a déjà été donnée 3 ou 4 fois? pourquoi ne pas essayer de répondre à une question qui n'a toujours pas de réponse.
zabumba
1
Merci pour les aimables conseils.
rahul darga
0

Tout ce dont vous avez besoin - ajoutez une autre clé et utilisez-la.

Comme j'ai trouvé la première clé - toujours la clé de déploiement.

Victor Perov
la source
0

Parfois, cela ne fonctionne pas car vous définissez manuellement une autre clé pour bitbucket dans ~/.ssh/config.

sean
la source
0

Processus en deux étapes pour pouvoir pousser pull
Étape 1: Générer la clé ssh (publique et privée) sur mac

Étape 2: Mettre la clé privée dans mac et la clé publique dans le site Web git

ci-dessous les étapes détaillées sont pour les utilisateurs de mac

Étape 1: génération de clés

  1. (assurez-vous que git est installé) https://git-scm.com/download/mac
  2. ouvrez le terminal et tapez ssh-keygenceci vous invitera à entrer l'emplacement de stockage de la clé, vous pouvez taper/Users/[machinename]/.ssh/[keyname]
  3. Ensuite, il vous demandera un mot de passe, vous pouvez le laisser vide en appuyant sur entrée ou entrer un mot-clé à saisir à nouveau à l'invite suivante
  4. Cela aura créé deux clés pour vous, privée et publique, avec le nom [nom de clé] et [nom de clé] .pub

Étape 2: pousser les touches vers les emplacements appropriés [comptes mac et distants, par exemple Github, bitbucket, gitlab, etc.]

  1. Type ssh-add -K ~/.ssh/[keyname] terminal pour ajouter votre clé privée au mac
  2. Tapez pbcopy < ~/.ssh/[keyname].pubpour copier la clé publique dans le presse-papiers
  3. Ouvrez les paramètres du compte sur votre site Web git respectif et allez ajouter la clé, collez la clé publique copiée ci-dessus

Terminé, vous pouvez maintenant pousser-tirer.

Akshay Vijay Jain
la source
Pour ceux qui ont voté contre, j'ai eu du mal toute la journée et je n'ai trouvé aucune réponse résolvant directement mon problème, et les étapes mentionnées ici les résolvent directement et elles sont génériques. Quoi qu'il en soit
Akshay Vijay Jain
-1

voici le code complet pour cloner tous les dépôts d'une équipe / utilisateur BitBucket donné

# -*- 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)

Plus d'informations: https://thepythoncoding.blogspot.com/2019/06/python-script-to-clone-all-repositories.html

Kais Tounsi
la source
-3

pour cette erreur: conq: accès au référentiel refusé. l'accès via une clé de déploiement est en lecture seule.

Je change le nom de ma clé, exemple

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

Je travaille sur ma propre clé sur bitbucket

Elron
la source