Доступ до сховища заборонено. доступ через ключ розгортання доступний лише для читання


302

Після успішного клонування мого репо з heroku і додав ще один пульт

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

Я все ще отримую цю помилку після запуску рядка (3) або використання SourceTree

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

По-перше, я не розумію, що означає це повідомлення на практиці. І це сором.

Я створив пару ключів ssh і додав у heroku:

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

Я також додав свій ключ у розділі ключів розгортання в BitBucket. Але мені, мабуть, щось не вистачає. Це питання не лінь, я читав різні документи, включаючи посібники з BitBuckets. Але це все ще не обходить проблему.

Це повідомлення пов'язане з тим, чи можу я імпортувати своє heroku git repo у бітбукет? і як?

ДОДАТКОВІ ФАКТИ:

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

Схоже, все добре.


1
Додавання SSH ключа замість ключа розгортання працювало для мене
Харі Дас

Не забудьте проголосувати і питання, і відповіді. Ура !!
zabumba

Відповіді:


720

Перша плутанина на моєму боці полягала в тому, де саме встановити SSH-ключі в BitBucket.

Я новачок у BitBucket, і я встановлював ключ розгортання, який надає доступ лише для читання .

Тому переконайтеся, що ви налаштовуєте rsa pub keyв налаштуваннях свого акаунта BitBucket .

Клацніть аватар BitBucket і виберіть Налаштування Bitbucket (Управління рахунком). Там ви зможете встановити SSH-ключі .

Я просто видалив ключ розгортання , мені він зараз не потрібен. І це спрацювало

введіть тут опис зображення


48
Дякую за відповідь. Це саме те, що мені бракувало. Я додав ключ розгортання замість ключа SSH.

27
Так! Спасибі за вашу відповідь. Атласієць дійсно повинен зробити це більш зрозумілим у своєму документуванні.
Ральф Девід Абернаті

14
Так, меню клавіш ssh добре приховано в Bitbucket!
jonprasetyo

3
Чудова допомога! Мерсі Джоелмаранхао!
кмрія

6
Боровся з цим протягом 30 хвилин, перш ніж знайшов свою відповідь, велике спасибі
micgeronimo

64

Тепер параметр SSH знаходиться під налаштуваннями безпеки

Клацніть Аватар -> Налаштування Bitbucket -> Ключ SSH -> Додати ключ

Вставте ваш відкритий ключ


10
Дякую. Я просто хочу описати свій випадок. Я додав свій відкритий ключ у налаштуваннях сховища замість ключів облікового запису Bitbucket. Тому я видалив ключ із сховища та додав його до налаштувань профілю, щоб він працював.
любето


13

Клавіші розгортання читаються лише для читання. Щоб увімкнути доступ до запису, потрібно:

  • Видаліть цей ключ розгортання з налаштувань сховища. Ви не зможете записатись до цього репо з цим ключем.

  • Перейдіть до "Аватар -> Налаштування -> Ключі SSH" та додайте ту саму клавішу

  • Тепер спробуйте натиснути, щоб видалити гілку

Ви раніше могли писати у сховища, але це зміна в BitBucket, де ви більше не можете писати за допомогою ключа розгортання.


Дякую, це спрацювало для мене після того, як довго потягнув волосся
Умар Аділ

10

"Ключ розгортання" призначений лише для доступу лише для читання. Далі є хорошим способом вирішити це.

  • Створіть і ключ SSH та додайте його до бітбукета (Аватар користувача -> Налаштування Bitbucket-> Ключі SSH)
  • ~ / .ssh / known_hosts
  • ssh-add -D (Видалити ключі, завантажені в агент SSH)
  • ssh-add ~ / .ssh / your_private_key_for_bitbucket
  • ssh git@bitbucket.org -Tv (Перевірте, чи ваш ключ звик підключатися до бітбукета)
  • git push 'віддалене ім'я' "назва гілки"

9

Спершу потрібно видалити ключ розгортання, якщо ви збираєтесь додати той самий ключ у розділі Керування SSH-ключем облікового запису.


3
Видалення ключа розгортання дає меніSomeone has already registered this as a deploy key.
dan-klasson

3
Будьте зрозумілі, що вам слід додати відкритий ключ shh у розділі НАЛАШТУВАННЯ BITBUCKET (як для повного рахунку BB) НЕ, і я повторюю НЕ в окремих налаштуваннях Repo. Якщо ви додали ключ у налаштуваннях репо, саме тому ви отримуєте ці помилки.
Nate Uni

8

TLDR: ssh-add ~ / .ssh / yourkey

Я щойно працював над цією проблемою.

І жодна з інших відповідей не допомогла.

У мене був ./ssh/config з усіма потрібними речами, а також більш раннє сховище, що працює добре (той самий обліковий запис bitbucket, той же ключ). Потім я згенерував ключ-розгортач, а після цього створив нове сховище.

Після цього не вдалося клонувати нове репо.

Мені б хотілося, щоб я знав, як / чому агент SSH це зіпсував, але додавання ключа вирішило це. Я маю на увазі додавання ключа в моєму локальному Ubuntu, а не в адміністраторі Bitbucket. Команда справедлива

    ~/.ssh$ ssh-add myregualrkey

Сподіваюся, що це комусь допоможе.


Відмінно. Це саме те, що я шукав.
jpaljasma

3
Я не розумію, що ти зробив.
кев

5

У мене це сталося, коли я намагався використовувати ключ розгортання, тому що саме цього я хотів.

Я міг підключитися через, ssh -T git@bitbucket.orgі це скаже мені, що я маю доступ читати сховане мною сховище, але git cloneне вдалося.

Розмитнення ~/.ssh/known_hosts , генерування нового ключа за допомогою ssh-keygen, додавання нового ключа до бітбукета та повторення спроби виправити його для мене.


4

Я хотів би ще раз наголосити на наступному:

  • Можливо, ви додали ключ SSH до вашого сховища (наприклад, ExampleRepo), але це НЕ, куди переходить ключ SSH .
  • Це покликане зайти у ВАШ ПРОФІЛЬ . Це маленький аватар у нижньому лівому куті екрана. Тут ви знайдете інше місце, щоб помістити свої SSH-ключі (під Безпека)>, а потім замість цього ви додасте ключ.
  • Якщо ви випадково помістили свій ключ SSH у сховище (на відміну від вашого облікового запису), видаліть його у сховищі.

Мені довелося віками усвідомити, чомусь навіть після прочитання відповідей тут не натискали.


3

Спочатку виберіть або створіть ключ, який ви хочете використовувати для натискання на Bitbucket. Скажімо, його відкритий ключ знаходиться на рівні~/.ssh/bitbucket.pub

  • Додайте свій відкритий ключ до Bitbucket, увійшовши в систему і перейшовши до свого загальнодоступного профілю, налаштувань, ssh-ключа, клавіші додання.
  • Налаштуйте ssh для використання цього ключа під час спілкування з Bitbucket. Напр. В Linux додайте до ~/.ssh/config:
    Host bitbucket.org
    IdentityFile ~/.ssh/bitbucket

2

Нещодавно я зіткнувся з тим же питанням. Я отримав таку помилку:

Доступ до сховища заборонено. доступ через ключ розгортання доступний лише для читання.

Ви можете мати два види ключів SSH:

  1. Для всього вашого облікового запису, який буде працювати для всіх сховищ
  2. На ключ SSH репозиторію, який можна використовувати лише для цього конкретного сховища.

Я просто вилучив ключ SSH мого сховища та додав до свого облікового запису новий ключ SSH, і він добре працював.

Я сподіваюся, що це комусь допоможе. Ура


1

У мене був той самий випуск, який мав Кабір Сарін. Рішенням було клонування репо через SSH, замість використання https URL-адреси. тож ось що мені допомогло, і сподіваюся, інші:

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

1

Кроки:

  1. Створіть ключі ssh на вихідному сервері

    ssh-keygen

  2. Кішка та копія id_rsa.pub, що знаходиться в каталозі ~. / Ssh

  3. Перейдіть до Bitbucket, якщо ви вже встановили ключі доступу для сховищ, тоді видаліть наявні відкриті ключі
  4. Перейдіть до аватара Bitbucket> Налаштування Bitbucket> Ключі SSH (у розділі Безпека, ліва панель)> Клацніть «Додати ключі»> вставте відкритий ключ.
  5. Перевірте, чи працює він, виконавши команду нижче на вихідному сервері

    git remote show origin

  6. Для отримання та натискання з вихідного сервера, якщо протокол є "https", вам потрібно змінити його на "git + ssh", виконавши команду нижче

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

  7. Перевірте, чи можете ви натиснути на репо.

Готово!


який сенс, коли правильну відповідь дано вже 3 або 4 рази? чому б не спробувати відповісти на запитання, на яке досі немає відповіді.
zabumba

1
Дякую за добру пораду.
rahul darga

0

Все, що вам потрібно - додайте ще один ключ і використовуйте його.

Як я знайшов перший ключ - завжди ключ розгортання.


0

Іноді це не працює, оскільки ви вручну встановили інший ключ для бітбукета в ~/.ssh/config.


0

Двоетапний процес, щоб мати можливість натиснути "
Крок 1": Створення ключа ssh (відкритого та приватного) на mac.

Крок 2: Поставте приватний ключ у mac та відкритий ключ на веб-сайті git

нижче, детальні кроки призначені для користувачів Mac.

Крок 1: Створення ключів

  1. (переконайтеся, що у вас встановлено git) https://git-scm.com/download/mac
  2. відкрити термінал і введіть ssh-keygenцей пункт запропонує ввести місце зберігання ключа, який ви можете ввести/Users/[machinename]/.ssh/[keyname]
  3. Далі він запитає пароль, ви можете залишити його порожнім, натиснувши клавішу enter або ввести якесь ключове слово, яке потрібно ввести знову при наступному запиті
  4. Це створить для вас два ключі, приватний та загальнодоступний, з іменами [keyname] та [keyname] .pub

Крок 2: натискання клавіш на відповідні місця [mac та віддалені рахунки, тобто Github, bitbucket, gitlab тощо]

  1. Тип ssh-add -K ~/.ssh/[keyname] термінал, щоб додати свій приватний ключ до mac
  2. Введіть, pbcopy < ~/.ssh/[keyname].pubщоб скопіювати відкритий ключ у буфер обміну
  3. Відкрийте налаштування облікового запису на відповідному веб-сайті git та перейдіть до додавання ключа, там вставте відкритий ключ, скопійований вище

Зроблено, тепер ви можете натиснути.


Для тих, хто виступає проти, я цілий день боровся, і я не міг знайти жодної відповіді, яка безпосередньо вирішила б мою проблему, і кроки, згадані тут, безпосередньо вирішують їх, і вони є загальними. У будь-якому разі
Акшай Віджай Джайн

-1

ось повний код для клонування всіх репост із заданої команди / користувача 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)

Більше інформації: https://thepythoncoding.blogspot.com/2019/06/python-script-to-clone-all-repositories.html


-3

для цієї помилки: conq: доступ до сховища відхилений. доступ через ключ розгортання доступний лише для читання.

Я змінюю ім’я свого ключа, наприклад

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

Я працюю над власним ключем на бітбукеті

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.