Odmowa dostępu do repozytorium. dostęp za pomocą klucza wdrażania jest tylko do odczytu

302

Po pomyślnym sklonowaniu mojego repozytorium z heroku i dodaniu kolejnego pilota

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

Nadal pojawia się ten błąd po uruchomieniu linii (3) lub użyciu SourceTree

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

Po pierwsze, nie rozumiem, co ta wiadomość oznacza w praktyce. I szkoda.

Stworzyłem parę kluczy ssh i dodałem do heroku:

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

Dodałem również mój klucz w sekcji kluczy wdrażania w BitBucket. Ale coś mi brakuje. To pytanie nie jest z lenistwa, czytałem różne dokumenty, w tym przewodniki po BitBuckets. Ale nadal nie można obejść tego problemu.

Ten post dotyczy Czy mogę zaimportować moje repozytorium heroku git do bitbuket? i jak?

DODATKOWE FAKTY:

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

Wygląda na to, że wszystko jest w porządku.

zabumba
źródło
1
Dla mnie zadziałało dodanie klucza SSH zamiast klucza wdrażania
Hari Das,
Pamiętaj, aby głosować zarówno na pytania, jak i odpowiedzi. Twoje zdrowie!!
zabumba

Odpowiedzi:

720

Pierwsze zamieszanie po mojej stronie dotyczyło tego, gdzie dokładnie ustawić klucze SSH w BitBucket.

Jestem nowy w BitBucket i ustawiałem klucz wdrażania, który daje dostęp tylko do odczytu .

Upewnij się więc, że ustawiasz swoje ustawienia rsa pub keykonta BitBucket .

Kliknij swój awatar BitBucket i wybierz Ustawienia Bitbucket (Zarządzać kontem). Tam będziesz mógł ustawić klucze SSH .

Po prostu usunąłem klucz wdrażania , na razie go nie potrzebuję. I zadziałało

wprowadź opis zdjęcia tutaj

zabumba
źródło
48
Dziękuję za odpowiedź. To jest dokładnie to samo, czego mi brakowało. Dodałem klucz wdrażania zamiast klucza SSH.
27
Tak! Dziękuję za Twoją odpowiedź. Atlassian powinien naprawdę wyjaśnić to w swojej dokumentacji.
Ralph David Abernathy,
14
Tak, menu klucza ssh jest dobrze ukryte w Bitbucket!
jonprasetyo
3
Świetna pomoc! Miłosierdzie Joelmaranhao!
kmria
6
Zmagałem się z tym przez 30 minut, zanim znalazłem odpowiedź, dziękuję bardzo
micgeronimo
64

Teraz opcja SSH znajduje się w ustawieniach zabezpieczeń

Kliknij Twój awatar -> Ustawienia Bitbucket -> Klucz SSH -> Dodaj klucz

Wklej swój klucz publiczny

Satish
źródło
10
Dziękuję Ci. Chcę tylko opisać moją sprawę. Dodałem mój klucz publiczny w ustawieniach repozytorium zamiast w kluczach do mojego konta Bitbucket. Więc usunąłem klucz z repozytorium i dodałem go w ustawieniach mojego profilu, aby go uruchomić.
lyubeto
13

Klucze wdrażania są tylko do odczytu. Aby włączyć dostęp do zapisu, musisz:

  • Usuń ten klucz wdrażania z ustawień repozytorium. I tak nie będziesz mógł pisać do tego repozytorium za pomocą tego klucza.

  • Idź do „Avatar -> Ustawienia -> Klucze SSH” i dodaj ten sam klucz

  • Teraz spróbuj nacisnąć, aby usunąć gałąź

Wcześniej mogłeś pisać do repozytoriów, ale jest to zmiana w BitBucket, w której nie możesz już pisać za pomocą klucza wdrażania.

timhysniu
źródło
Dzięki temu zadziałało to po długim ciągnięciu włosów
Umar Adil
10

„Klucz wdrażania” służy tylko do dostępu tylko do odczytu. Oto dobry sposób na obejście tego.

  • Utwórz i klucz SSH i dodaj go do bitbucket (Avatar użytkownika -> Ustawienie Bitbucket-> Klucze SSH)
  • ~ / .ssh / known_hosts
  • ssh-add -D (Usuń klucze załadowane do agenta SSH)
  • ssh-add ~ / .ssh / your_private_key_for_bitbucket
  • ssh [email protected] -Tv (Sprawdź, czy twój klucz przyzwyczaja się do łączenia z bitbucket)
  • git push „nazwa zdalna” „nazwa oddziału”
Jerome Anthony
źródło
9

Najpierw musisz usunąć klucz wdrażania, jeśli chcesz dodać ten sam klucz w obszarze Zarządzaj kluczem SSH konta.

sent.ror
źródło
3
Usunięcie klucza wdrażania daje miSomeone has already registered this as a deploy key.
dan-klasson
3
Wyraźnie, że powinieneś dodać klucz publiczny shh w USTAWIENIACH BITBUCKET (jak w przypadku pełnego konta BB) NIE i powtarzam NIE w ramach indywidualnych Ustawień Repo. Jeśli dodałeś klucz w ustawieniach repo, dlatego otrzymujesz te błędy.
Nate Uni
8

TLDR: ssh-add ~ / .ssh / yourkey

Właśnie przepracowałem ten problem.

I żadna inna odpowiedź nie pomogła.

Miałem ./ssh/config ze wszystkimi właściwymi rzeczami, również wcześniejsze repozytorium działające dobrze (to samo konto bitbucket, ten sam klucz). Następnie wygenerowałem klucz wdrażania, a następnie utworzyłem nowe repozytorium.

Po tym nie można sklonować nowego repozytorium.

Chciałbym wiedzieć, jak / dlaczego agent ssh to psuje, ale dodanie klucza rozwiązało to. Mam na myśli dodanie klucza do mojego lokalnego Ubuntu, a nie do administratora bitbucket. Polecenie jest słuszne

    ~/.ssh$ ssh-add myregualrkey

Mam nadzieję, że to komuś pomoże.

Tjunkie
źródło
Świetny. Właśnie tego szukałem.
jpaljasma
3
Nie rozumiem co zrobiłeś.
kev
5

Zdarzyło się tak, gdy próbowałem użyć klucza wdrażania, ponieważ właśnie tego chciałem.

Mogę połączyć się za pośrednictwem, ssh -T [email protected]a to powie mi, że mam dostęp do odczytu repozytorium, którego chciałem, ale się git clonenie powiedzie.

Usunięcie ~/.ssh/known_hosts, wygenerowanie nowego klucza poprzez ssh-keygendodanie tego nowego klucza do bitbucket i ponowienie próby naprawiło go dla mnie.

sarink
źródło
4

Chciałbym ponownie podkreślić, co następuje:

  • Być może dodałeś klucz SSH do swojego repozytorium (np. ExampleRepo), ale NIE tutaj jest klucz SSH .
  • Ma on wchodzić w TWÓJ PROFIL . To jest mały awatar w lewym dolnym rogu ekranu. Tutaj znajdziesz inne miejsce na umieszczenie kluczy SSH (w obszarze Bezpieczeństwo)>, a następnie dodasz tutaj klucz.
  • Jeśli przypadkowo umieścisz swój klucz SSH w repozytorium (w przeciwieństwie do konta), usuń go z repozytorium.

Uświadomiłem sobie wieki, ale nawet po przeczytaniu tutaj odpowiedzi nie kliknęło.

David Liu
źródło
3

Ostatnio napotkałem ten sam problem. Wystąpił następujący błąd:

odmowa dostępu do repozytorium. dostęp za pomocą klucza wdrażania jest tylko do odczytu.

Możesz mieć dwa rodzaje kluczy SSH:

  1. Dla całego konta, które będzie działać dla wszystkich repozytoriów
  2. Klucz SSH dla repozytorium, którego można użyć tylko dla tego konkretnego repozytorium.

Po prostu usunąłem klucz SSH repozytorium i dodałem nowy klucz SSH do mojego konta i działało to dobrze.

Mam nadzieję, że to komuś pomoże. Twoje zdrowie

Yoones Mehdian
źródło
3

Najpierw wybierz lub utwórz klucz, którego chcesz użyć do przesyłania do Bitbucket. Powiedzmy, że jego klucz publiczny to~/.ssh/bitbucket.pub

  • Dodaj swój klucz publiczny do Bitbucket, logując się i przechodząc do swojego profilu publicznego, ustawień, klucza SSH, klucza dodawania.
  • Konfiguruj ssh, aby używał tego klucza podczas komunikacji z Bitbucket. Np. W systemie Linux dodaj do ~/.ssh/config:
    Host bitbucket.org
    IdentityFile ~/.ssh/bitbucket
Ivan Ogai
źródło
2

Kroki:

  1. Utwórz klucze ssh na serwerze źródłowym

    ssh-keygen

  2. Cat i skopiuj id_rsa.pub znajdujący się w katalogu ~. / Ssh

  3. Przejdź do Bitbucket, jeśli już ustawiłeś klucze dostępu do repozytorium (ów), usuń istniejące klucze publiczne
  4. Przejdź do awatara Bitbucket> Ustawienia Bitbucket> Klucze SSH (w obszarze Bezpieczeństwo, lewe okienko)> Kliknij „Dodaj klucze”> wklej klucz publiczny.
  5. Sprawdź, czy to działa, uruchamiając poniżej polecenia na serwerze źródłowym

    git remote show origin

  6. W przypadku pobierania i wypychania z serwera źródłowego, jeśli protokołem jest „https”, musisz zmienić go na „git + ssh”, uruchamiając poniższe polecenie

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

  7. Sprawdź, czy możesz wykonać push na repozytorium.

Gotowy!

Rahul Darga
źródło
jaki jest sens, kiedy prawidłowa odpowiedź została udzielona już 3 lub 4 razy? dlaczego nie spróbować odpowiedzieć na pytanie, na które wciąż nie ma odpowiedzi.
zabumba
1
Dziękuję za miłą radę.
rahul darga
1

Miałem ten sam problem, co Kabir Sarin. Rozwiązaniem było sklonowanie repozytorium za pośrednictwem SSH, zamiast korzystania z adresu URL https. więc to mi pomogło i mam nadzieję, że inni:

    git clone [email protected]:{accountName}/{repoName}.git
Lippai Zoltan
źródło
1

Dwustopniowy proces umożliwiający push pull
Krok 1: Wygeneruj klucz ssh (publiczny i prywatny) na komputerze Mac

Krok 2: Umieść klucz prywatny na komputerze Mac i klucz publiczny na stronie git

poniżej szczegółowe kroki dla użytkowników komputerów Mac

Krok 1: Generowanie kluczy

  1. (upewnij się, że masz zainstalowany git) https://git-scm.com/download/mac
  2. otwórz terminal i wpisz, ssh-keygenco spowoduje wyświetlenie monitu o podanie miejsca przechowywania klucza, możesz wpisać/Users/[machinename]/.ssh/[keyname]
  3. Następnie poprosi o podanie hasła, możesz je pozostawić puste, naciskając Enter lub wpisać słowo kluczowe, które należy wprowadzić ponownie w następnym monicie
  4. Spowoduje to utworzenie dla ciebie dwóch kluczy, prywatnego i publicznego, o nazwach [keyname] i [keyname] .pub

Krok 2: Przekazywanie kluczy do odpowiednich lokalizacji [konta Mac i zdalne, tj. Github, Bitbucket, Gitlab itp.]

  1. Wpisz ssh-add -K ~/.ssh/[keyname]terminal, aby dodać swój klucz prywatny do komputera Mac
  2. Wpisz, pbcopy < ~/.ssh/[keyname].pubaby skopiować klucz publiczny do schowka
  3. Otwórz ustawienia konta na odpowiedniej stronie git i przejdź do dodawania klucza, tam wklej skopiowany powyżej klucz publiczny

Gotowe, teraz możesz pchać ciągnąć.

Akshay Vijay Jain
źródło
Dla tych, którzy głosowali za mną, walczyłem cały dzień i nie mogłem znaleźć żadnej odpowiedzi, która bezpośrednio rozwiązałaby mój problem, a kroki wymienione tutaj bezpośrednio rozwiązują je i są one ogólne. W każdym razie
Akshay Vijay Jain
0

Wszystko czego potrzebujesz - dodaj kolejny klucz i użyj go.

Jak znalazłem pierwszy klucz - zawsze klucz wdrażania.

Victor Perov
źródło
0

Czasami to nie działa, ponieważ ręcznie ustawiasz inny klucz do bitbucket w ~/.ssh/config.

Sean
źródło
-1

tutaj jest pełny kod do klonowania wszystkich repozytoriów od danego zespołu / użytkownika 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)

Więcej informacji: https://thepythoncoding.blogspot.com/2019/06/python-script-to-clone-all-repositories.html

Kais Tounsi
źródło
-3

dla tego błędu: conq: odmowa dostępu do repozytorium. dostęp za pomocą klucza wdrażania jest tylko do odczytu.

Zmieniam nazwę mojego klucza, przykład

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

Pracuję nad własnym kluczem na bitbucket

Elron
źródło