Repository-Zugriff verweigert. Der Zugriff über einen Bereitstellungsschlüssel ist schreibgeschützt


302

Nachdem ich mein Repo erfolgreich von Heroku geklont und eine weitere Fernbedienung hinzugefügt hatte

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

Ich erhalte diesen Fehler immer noch, nachdem ich Zeile (3) ausgeführt oder SourceTree verwendet habe

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

Erstens verstehe ich nicht, was diese Botschaft in der Praxis bedeutet. Und das ist eine Schande.

Ich habe ein SSH-Schlüsselpaar erstellt und zu Heroku hinzugefügt:

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

Ich habe meinen Schlüssel auch im Abschnitt Bereitstellungsschlüssel in BitBucket hinzugefügt. Aber mir muss etwas fehlen. Diese Frage ist nicht aus Faulheit, ich habe verschiedene Dokumente gelesen, einschließlich BitBuckets-Anleitungen. Aber es kommt immer noch nicht um dieses Problem herum.

Dieser Beitrag bezieht sich auf Kann ich mein Heroku Git Repo in Bitbuket importieren? und wie?

ZUSÄTZLICHE FAKTEN:

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

Sieht so aus, als wäre alles in Ordnung.


1
Das Hinzufügen eines SSH-Schlüssels anstelle eines Bereitstellungsschlüssels hat bei mir funktioniert
Hari Das,

Denken Sie daran, sowohl Fragen als auch Antworten abzustimmen. Prost!!
Zabumba

Antworten:


720

Die erste Verwirrung auf meiner Seite war, wo genau SSH-Schlüssel in BitBucket gesetzt werden sollten.

Ich bin neu in BitBucket und habe einen Bereitstellungsschlüssel festgelegt, der nur Lesezugriff ermöglicht .

Stellen Sie also sicher, dass Sie Ihre Einstellungen rsa pub keyin Ihren BitBucket-Konten vornehmen .

Klicken Sie auf Ihren BitBucket-Avatar und wählen Sie Bitbucket-Einstellungen (Konto verwalten). Dort können Sie SSH-Schlüssel einstellen .

Ich habe einfach den Bereitstellungsschlüssel gelöscht , ich brauche vorerst keinen. Und es hat funktioniert

Geben Sie hier die Bildbeschreibung ein


48
Danke für die Antwort. Das ist genau das, was mir gefehlt hat. Ich habe einen Bereitstellungsschlüssel anstelle eines SSH-Schlüssels hinzugefügt.

27
Ja! Vielen Dank für Ihre Antwort. Atlassian sollte es in ihrer Dokumentation wirklich klarer machen.
Ralph David Abernathy

14
Ja, das SSH-Tastenmenü ist in Bitbucket gut versteckt!
Jonprasetyo

3
Tolle Hilfe! Gnade Joelmaranhao!
kmria


64

Jetzt befindet sich die SSH-Option unter den Sicherheitseinstellungen

Klicken Sie auf Ihren Avatar -> Bitbucket-Einstellungen -> SSH-Schlüssel -> Schlüssel hinzufügen

Fügen Sie Ihren öffentlichen Schlüssel ein


10
Danke dir. Ich möchte nur meinen Fall beschreiben. Ich habe meinen öffentlichen Schlüssel in den Repository-Einstellungen anstatt in meinen Bitbucket-Kontoschlüsseln hinzugefügt. Also habe ich den Schlüssel im Repository gelöscht und in meinen Profileinstellungen hinzugefügt, damit er funktioniert.
Lyubeto


13

Bereitstellungsschlüssel sind schreibgeschützt. Um den Schreibzugriff zu aktivieren, müssen Sie:

  • Entfernen Sie diesen Bereitstellungsschlüssel aus Ihren Repository-Einstellungen. Mit diesem Schlüssel können Sie sowieso nicht in dieses Repo schreiben.

  • Gehen Sie zu "Avatar -> Einstellungen -> SSH-Schlüssel" und fügen Sie denselben Schlüssel hinzu

  • Versuchen Sie nun zu drücken, um den Zweig zu entfernen

Sie konnten zuvor in Repositorys schreiben, dies ist jedoch eine Änderung in BitBucket, bei der Sie nicht mehr mit dem Bereitstellungsschlüssel schreiben können.


Danke, das hat bei mir funktioniert, nachdem ich lange an den Haaren gezogen hatte
Umar Adil

10

'Bereitstellungsschlüssel' ist nur für den schreibgeschützten Zugriff vorgesehen. Das Folgende ist ein guter Weg, um dies durchzuarbeiten.

  • Erstellen Sie einen SSH-Schlüssel und fügen Sie ihn zu bitbucket hinzu (Benutzer-Avatar -> Bitbucket-Einstellung-> SSH-Schlüssel)
  • ~ / .ssh / unknown_hosts
  • ssh-add -D (Schlüssel entfernen, die in den SSH-Agenten geladen wurden)
  • ssh-add ~ / .ssh / your_private_key_for_bitbucket
  • ssh git@bitbucket.org -Tv (Stellen Sie sicher, dass Ihr Schlüssel verwendet wird, um eine Verbindung zu bitbucket herzustellen.)
  • git push 'remote name' 'branch name'

9

Sie müssen zuerst den Bereitstellungsschlüssel löschen, wenn Sie denselben Schlüssel unter Konto-SSH-Schlüssel verwalten hinzufügen möchten.


3
Das Löschen des Bereitstellungsschlüssels gibt mirSomeone has already registered this as a deploy key.
dan-klasson

3
Stellen Sie klar, dass Sie den öffentlichen Schlüssel shh unter den BITBUCKET-EINSTELLUNGEN hinzufügen sollten (wie im vollständigen BB-Konto). NICHT und ich wiederhole NICHT unter den einzelnen Repo-Einstellungen. Wenn Sie unter den Repo-Einstellungen einen Schlüssel hinzugefügt haben, werden diese Fehler angezeigt.
Nate Uni

8

TLDR: ssh-add ~ / .ssh / yourkey

Ich habe gerade dieses Problem durchgearbeitet.

Und keine der anderen Antworten half.

Ich hatte eine ./ssh/config mit den richtigen Sachen, auch ein früheres Repository, das gut funktionierte (gleiches Bitbucket-Konto, gleicher Schlüssel). Dann habe ich einen deploy_key generiert und danach ein neues Repository erstellt.

Danach konnte das neue Repo nicht mehr geklont werden.

Ich wünschte, ich wüsste, wie / warum der SSH-Agent dies vermasselte, aber das Hinzufügen des Schlüssels löste es. Ich meine, den Schlüssel in meinem lokalen Ubuntu hinzuzufügen, nicht in Bitbucket Admin. Der Befehl ist gerecht

    ~/.ssh$ ssh-add myregualrkey

Hoffe das hilft jemandem.


Ausgezeichnet. Genau das habe ich gesucht.
Jpaljasma

3
Ich verstehe nicht, was du getan hast.
Kev

5

Dies geschah, als ich versuchte, einen Bereitstellungsschlüssel zu verwenden, weil ich genau das wollte.

Ich konnte eine Verbindung über herstellen ssh -T git@bitbucket.orgund es würde mir sagen, dass ich Zugriff hatte, um das gewünschte Repository zu lesen, aber es git clonewürde fehlschlagen.

Löschen ~/.ssh/known_hosts, Generieren eines neuen Schlüssels über ssh-keygen, Hinzufügen dieses neuen Schlüssels zu Bitbucket und erneutes Versuchen, das Problem für mich zu beheben.


4

Ich möchte Folgendes noch einmal betonen:

  • Möglicherweise haben Sie den SSH-Schlüssel zu Ihrem Repository hinzugefügt (z. B. ExampleRepo), aber hier befindet sich der SSH-Schlüssel NICHT .
  • Es soll in IHR PROFIL gehen . Dies ist der kleine Avatar in der unteren linken Ecke des Bildschirms. Hier finden Sie einen anderen Ort, an dem Sie Ihre SSH-Schlüssel ablegen können (unter Sicherheit). Dann fügen Sie stattdessen den Schlüssel hier hinzu.
  • Wenn Sie versehentlich Ihren SSH-Schlüssel in das Repository gestellt haben (im Gegensatz zu Ihrem Konto), löschen Sie den im Repository.

Es hat ewig gedauert, bis mir klar wurde, dass es selbst nach dem Lesen der Antworten hier nicht geklickt hat.


3

Wählen oder erstellen Sie zuerst den Schlüssel, den Sie zum Drücken auf Bitbucket verwenden möchten. Angenommen, der öffentliche Schlüssel befindet sich bei~/.ssh/bitbucket.pub

  • Fügen Sie Ihren öffentlichen Schlüssel zu Bitbucket hinzu, indem Sie sich anmelden und zu Ihrem öffentlichen Profil, Einstellungen, SSH-Schlüssel und Schlüssel hinzufügen gehen.
  • Konfigurieren Sie ssh so, dass dieser Schlüssel bei der Kommunikation mit Bitbucket verwendet wird. ZB unter Linux hinzufügen zu ~/.ssh/config:
    Host bitbucket.org
    IdentityFile ~/.ssh/bitbucket

2

Vor kurzem stand ich vor dem gleichen Problem. Ich habe folgenden Fehler erhalten:

Repository-Zugriff verweigert. Der Zugriff über einen Bereitstellungsschlüssel ist schreibgeschützt.

Sie können zwei Arten von SSH-Schlüsseln verwenden:

  1. Für Ihr gesamtes Konto, das für alle Repositorys funktioniert
  2. Pro Repository SSH-Schlüssel, der nur für dieses bestimmte Repository verwendet werden kann.

Ich habe einfach meinen Repository-SSH-Schlüssel entfernt und meinem Konto einen neuen SSH-Schlüssel hinzugefügt, und es hat gut funktioniert.

Ich hoffe es hilft jemandem. Prost


1

Ich hatte das gleiche Problem, das Kabir Sarin hatte. Die Lösung bestand darin, das Repo über SSH zu klonen, anstatt die https-URL zu verwenden. Das hat mir und hoffentlich auch anderen geholfen:

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

1

Schritte:

  1. Erstellen Sie SSH-Schlüssel auf dem Quellserver

    ssh-keygen

  2. Cat and copy id_rsa.pub befindet sich im Verzeichnis ~. / SSsh

  3. Gehen Sie zu Bitbucket. Wenn Sie bereits die Zugriffsschlüssel für Repository (s) festgelegt haben, löschen Sie vorhandene öffentliche Schlüssel.
  4. Gehen Sie zu Bitbucket-Avatar> Bitbucket-Einstellungen> SSH-Schlüssel (unter Sicherheit, linker Bereich)> Klicken Sie auf 'Schlüssel hinzufügen'> fügen Sie den öffentlichen Schlüssel ein.
  5. Überprüfen Sie, ob es funktioniert, indem Sie den folgenden Befehl auf dem Quellserver ausführen

    git remote show origin

  6. Wenn das Protokoll beim Abrufen und Pushen vom Quellserver 'https' lautet, müssen Sie es in 'git + ssh' ändern, indem Sie den folgenden Befehl ausführen

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

  7. Überprüfen Sie, ob Sie zum Repo pushen können.

Erledigt!


Was bringt es, wenn die richtige Antwort bereits drei- oder viermal gegeben wurde? Warum nicht versuchen, eine Frage zu beantworten, die noch keine Antwort hat?
Zabumba

1
Vielen Dank für den freundlichen Rat.
Rahul Darga

0

Alles was Sie brauchen - fügen Sie einen weiteren Schlüssel hinzu und verwenden Sie ihn.

Wie ich den ersten Schlüssel gefunden habe - immer den Bereitstellungsschlüssel.


0

Manchmal funktioniert es nicht, weil Sie manuell einen anderen Schlüssel für Bitbucket in festgelegt haben ~/.ssh/config.


0

Schritt in zwei Schritten, um Pull
drücken zu können Schritt 1: SSH-Schlüssel (öffentlich und privat) auf dem Mac

generieren Schritt 2: Privaten Schlüssel in Mac und öffentlichen Schlüssel in Git-Website einfügen Die

folgenden detaillierten Schritte gelten für Mac-Benutzer

Schritt 1: Schlüssel generieren

  1. (Stellen Sie sicher, dass Sie git installiert haben.) https://git-scm.com/download/mac
  2. Öffnen Sie das Terminal und geben Sie ssh-keygendies ein. Sie werden aufgefordert, den Speicherort für den Schlüssel einzugeben, den Sie eingeben können/Users/[machinename]/.ssh/[keyname]
  3. Als nächstes werden Sie nach einer Passphrase gefragt. Sie können diese entweder durch Drücken der Eingabetaste leer lassen oder ein Schlüsselwort eingeben, das bei der nächsten Eingabeaufforderung erneut eingegeben werden soll
  4. Dadurch wurden zwei Schlüssel für Sie erstellt, privat und öffentlich, mit den Namen [Schlüsselname] und [Schlüsselname] .pub

Schritt 2: Drücken der Tasten an die entsprechenden Stellen [Mac- und Remote-Konten, z. B. Github, Bitbucket, Gitlab usw.]

  1. Art ssh-add -K ~/.ssh/[keyname] terminal ein, um Ihren privaten Schlüssel zum Mac hinzuzufügen
  2. Geben Sie ein, pbcopy < ~/.ssh/[keyname].pubum den öffentlichen Schlüssel in die Zwischenablage zu kopieren
  3. Öffnen Sie die Kontoeinstellungen auf Ihrer jeweiligen Git-Website und gehen Sie zum Hinzufügen des Schlüssels. Fügen Sie dort den oben kopierten öffentlichen Schlüssel ein

Fertig, jetzt können Sie ziehen ziehen.


Für diejenigen, die abgestimmt haben, hatte ich den ganzen Tag Probleme und konnte keine Antwort finden, die mein Problem direkt löst. Die hier genannten Schritte lösen sie direkt und sie sind generisch. Sowieso
Akshay Vijay Jain

-1

Hier ist der vollständige Code zum Klonen aller Repos eines bestimmten BitBucket-Teams / Benutzers

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

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


-3

für diesen Fehler: conq: Repository-Zugriff verweigert. Der Zugriff über einen Bereitstellungsschlüssel ist schreibgeschützt.

Ich ändere beispielsweise den Namen meines Schlüssels

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

Ich arbeite an meinem eigenen Schlüssel für Bitbucket

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.