Доступ к хранилищу запрещен. доступ через ключ развертывания только для чтения

302

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

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. Но это все еще не обойти эту проблему.

Этот пост связан с тем, могу ли я импортировать мою Gitku Git репо в битбукет? и как?

ДОПОЛНИТЕЛЬНЫЕ ФАКТЫ:

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

Похоже, все в порядке.

zabumba
источник
1
Добавление ключа SSH вместо ключа развертывания работало для меня
Хари Дас
Не забудьте проголосовать и за вопрос, и за ответы. Ура !!
Забумба

Ответы:

720

Первая путаница с моей стороны была о том, где именно установить ключи SSH в BitBucket.

Я новичок в BitBucket, и я устанавливал ключ развертывания, который дает только доступ для чтения .

Поэтому убедитесь, что вы устанавливаете свои rsa pub keyв настройках учетной записи BitBucket .

Нажмите на свой аватар BitBucket и выберите Настройки Bitbucket (Управлять счетом). Там вы сможете установить ключи SSH .

Я просто удалил ключ развертывания , пока он мне не нужен. И это сработало

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

zabumba
источник
48
Спасибо за ответ. Это точно то же самое, что мне не хватало. Я добавил ключ развертывания вместо ключа SSH.
27
Да! Спасибо за ваш ответ. Atlassian действительно должен сделать это более понятным в своей документации.
Ральф Дэвид Абернати
14
Да, это меню ключей SSH хорошо спрятано в Bitbucket!
jonprasetyo
3
Большая помощь! Милосердие Джоэлмаранхао!
кмрия
6
Боролся с этим за 30 минут до того, как нашел свой ответ, большое спасибо
micgeronimo
64

Теперь опция SSH находится в настройках безопасности

Выберите Ваш аватар -> Настройки Bitbucket -> Ключ SSH -> Добавить ключ

Вставьте свой открытый ключ

Sathish
источник
10
Спасибо. Я просто хочу описать мой случай. Я добавил свой открытый ключ в настройки хранилища, а не в ключи своей учетной записи Bitbucket. Поэтому я удалил ключ в репозитории и добавил его в настройки своего профиля, чтобы он заработал.
Любето
13

Ключи развертывания доступны только для чтения. Чтобы включить доступ для записи, вам необходимо:

  • Удалите этот ключ развертывания из настроек репозитория. В любом случае вы не сможете писать в этот репозиторий с этим ключом.

  • Зайдите в «Аватар -> Настройки -> SSH Keys» и добавьте тот же ключ

  • Теперь попробуйте нажать, чтобы удалить ветку

Ранее вы могли писать в репозитории, но это изменение в BitBucket, когда вы больше не можете писать с помощью ключа развертывания.

timhysniu
источник
Спасибо, это сработало для меня после того, как вырвал волосы надолго
Умар Адил
10

«Ключ развертывания» предназначен только для доступа только для чтения. Следующее - хороший способ проработать это.

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

Сначала необходимо удалить ключ развертывания, если вы собираетесь добавить тот же ключ в разделе «Управление учетной записью SSH-ключ».

sent.ror
источник
3
Удаление ключа развертывания дает мнеSomeone has already registered this as a deploy key.
Дэн-Klasson
3
Будьте уверены, что вы должны добавить открытый ключ shh в настройках BITBUCKET (как в случае полной учетной записи BB), а я повторяю НЕ в отдельных настройках репо. Если вы добавили ключ в настройках репо, именно поэтому вы получаете эти ошибки.
Нейт Уни
8

TLDR: ssh-add ~ / .ssh / yourkey

Я только что решил эту проблему.

И ни один из других ответов не помог.

У меня был файл ./ssh/config со всеми необходимыми материалами, а также более ранний репозиторий, работающий нормально (та же учетная запись Bitbucket, тот же ключ). Затем я сгенерировал ключ deploy_key и после этого создал новый репозиторий.

После этого не удалось клонировать новый репо.

Хотелось бы знать, как / почему агент ssh все испортил, но добавление ключа решило это. Я имею в виду добавление ключа в мою локальную Ubuntu, а не в администратор Bitbucket. Команда просто

    ~/.ssh$ ssh-add myregualrkey

Надеюсь, это кому-нибудь поможет.

Tjunkie
источник
Превосходно. Это было именно то, что я искал.
jpaljasma
3
Я не понимаю, что ты сделал.
Кев
5

Это случилось, когда я пытался использовать ключ развертывания, потому что это именно то, что я хотел.

Я мог подключиться через него, ssh -T git@bitbucket.orgи он сказал бы, что у меня есть доступ для чтения нужного репозитория, ноgit clone получится.

Очистка ~/.ssh/known_hosts, генерация нового ключа через ssh-keygen, добавление этого нового ключа в bitbucket и повторная попытка исправить это для меня.

sarink
источник
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. Cat и скопируйте 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 раза? почему бы не попытаться ответить на вопрос, на который до сих пор нет ответа.
Забумба
1
Спасибо за добрый совет.
рахуль дарга
0

Все, что вам нужно - добавить еще один ключ и использовать его.

Как я нашел первый ключ - всегда ключ развертывания.

Виктор Перов
источник
0

Иногда это не работает, потому что вы вручную устанавливаете другой ключ для bitbucket в ~/.ssh/config.

Sean
источник
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. Далее будет запрошена фраза-пароль. Вы можете оставить это поле пустым, нажав клавишу ввода, или ввести какое-либо ключевое слово для повторного ввода в следующем приглашении.
  4. Это создаст для вас два ключа, приватный и публичный, с именами [имя ключа] и [имя ключа] .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

Я работаю над своим собственным ключом на bitbucket

Элрон
источник