리포지토리 액세스가 거부되었습니다. 배포 키를 통한 액세스는 읽기 전용입니다


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를 bitbuket으로 가져올 수 있습니까? 그리고 어떻게?

추가 사실 :

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 키를 추가하면 나에게 도움이되었다
Hari Das

질문과 답변 모두에 투표하십시오. 건배!!
zabumba

답변:


720

내 측면의 첫 번째 혼란 은 BitBucket에서 SSH 키 를 정확히 설정하는 위치에 관한 것 입니다.

BitBucket을 처음 사용하고 읽기 액세스 만 제공 하는 배포 키 를 설정하고있었습니다 .

따라서 BitBucket 계정 설정rsa pub key 에서 설정해야 합니다 .

BitBucket 아바타를 클릭하고 Bitbucket 설정 (계정 관리). 거기에서 SSH 키 를 설정할 수 있습니다 .

나는 단순히 배포 키 를 삭제했지만 지금은 필요하지 않습니다. 그리고 그것은 효과가 있었다

여기에 이미지 설명을 입력하십시오


48
답변 해주셔서 감사합니다. 이것은 내가 잃어버린 것과 똑같습니다. SSH 키 대신 배포 키를 추가했습니다.

27
예! 답변 주셔서 감사합니다. Atlassian은 문서를보다 명확하게 만들어야합니다.
Ralph David Abernathy

14
예, ssh 키 메뉴는 Bitbucket에 잘 숨겨져 있습니다!
jonprasetyo

3
큰 도움! 자비 Joelmaranhao!
kmria

6
답을 발견하기 전에 30 분 동안이 고생 대단히 감사합니다
micgeronimo을

64

이제 SSH 옵션이 보안 설정에 있습니다

아바타-> 비트 버킷 설정-> SSH 키-> 키 추가를 클릭하십시오.

공개 키 붙여 넣기


10
감사합니다. 내 사건을 설명하고 싶습니다. Bitbucket 계정 키 대신 리포지토리 설정에 공개 키를 추가했습니다. 그래서 저장소에서 키를 삭제하고 키 설정을 위해 프로파일 설정에 추가했습니다.
lyubeto


13

배포 키는 읽기 전용입니다. 쓰기 액세스를 사용하려면 다음을 수행해야합니다.

  • 리포지토리 설정에서이 배포 키를 제거하십시오. 어쨌든이 키를 사용하여이 저장소에 쓸 수 없습니다.

  • "아바타-> 설정-> SSH 키"로 이동하여 동일한 키를 추가하십시오

  • 이제 분기를 제거하려고

이전에 리포지토리에 쓸 수 있었지만 더 이상 배포 키로 쓸 수없는 BitBucket의 변경 사항입니다.


고마워, 이것은 오랫동안 머리를
Umar Adil

10

'배포 키'는 읽기 전용 액세스 전용입니다. 다음은이 작업을 수행하는 좋은 방법입니다.

  • SSH 키를 생성하여 비트 버킷에 추가 (사용자 아바타-> 비트 버킷 설정-> 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
전체 BB 계정에서와 같이 BITBUCKET SETTINGS 아래에 shh 공개 키를 추가하지 않아야하며 개별 Repo 설정에서 NOT 반복합니다. repo 설정 아래에 키를 추가하면 이러한 오류가 발생합니다.
Nate Uni

8

TLDR : ssh-add ~ / .ssh / yourkey

방금이 문제를 해결했습니다.

그리고 다른 대답은 도움이되지 않았습니다.

나는 모든 올바른 것들과 함께 ./ssh/config를 가지고 있었고 이전 저장소도 잘 작동했습니다 (동일한 비트 버킷 계정, 동일한 키). 그런 다음 deploy_key를 생성 한 후 새 저장소를 작성했습니다.

그 후 새 저장소를 복제 할 수 없습니다.

ssh 에이전트가 이것을 망쳐 놓은 방법 / 이유를 알고 있었지만 키를 추가하면 문제가 해결되었습니다. 비트 버킷 관리자가 아닌 로컬 우분투에 키를 추가하는 것을 의미합니다. 명령은 단지

    ~/.ssh$ ssh-add myregualrkey

이것이 누군가를 돕기를 바랍니다.


우수한. 이것은 내가 찾던 것입니다.
jpaljasma

3
당신이 한 일을 이해하지 못합니다.
kev

5

배포 키를 사용하려고 할 때 이런 일이 발생했습니다. 그것이 바로 내가 원하는 것이기 때문입니다.

연결을 통해 ssh -T git@bitbucket.org원하는 저장소를 읽을 수 있다고 말했지만 git clone실패했습니다.

를 지우고을 ~/.ssh/known_hosts통해 새 키를 생성하고 ssh-keygen비트 버킷에 새 키를 추가 한 다음 다시 시도하면 해결되었습니다.


4

다음을 다시 강조하고 싶습니다.

  • 저장소에 SSH 키를 추가했을 수도 있지만 (예 : ExampleRepo) SSH 키가있는 곳아닙니다. .
  • 그것은 당신의 프로필 에 들어가기위한 것입니다 . 화면 왼쪽 하단에있는 작은 아바타입니다. 여기, 당신은 다른 찾을 수 있습니다 에 보안 아래의 SSH 키를 넣을 장소를 키를 추가하십시오.
  • 실수로 SSH 키를 리포지토리에 저장 한 경우 (계정이 아닌) 리포지토리에서 SSH 키를 삭제하십시오.

어떻게 든 여기에서 대답을 읽은 후에도 클릭하지 않는 것을 깨달았습니다.


3

먼저 Bitbucket으로 푸시하는 데 사용할 키를 선택하거나 만듭니다. 공개 키가 있다고 가정 해 봅시다.~/.ssh/bitbucket.pub

  • 로그인하고 공개 프로필, 설정, ssh-key, add key로 이동하여 공개 키를 Bitbucket에 추가하십시오.
  • Bitbucket과 통신 할 때 해당 키를 사용하도록 ssh를 구성하십시오. 예를 들어 Linux의 경우 다음에 추가하십시오 ~/.ssh/config.
    Host bitbucket.org
    IdentityFile ~/.ssh/bitbucket

2

최근에 나는 같은 문제에 직면했다. 다음과 같은 오류가 발생했습니다.

저장소 액세스가 거부되었습니다. 배포 키를 통한 액세스는 읽기 전용입니다.

두 가지 종류의 SSH 키를 가질 수 있습니다.

  1. 모든 리포지토리에 사용할 수있는 전체 계정
  2. 특정 저장소에만 사용할 수있는 저장소 당 SSH 키 .

리포지토리 SSH 키를 제거하고 계정에 새 SSH 키를 추가하면 제대로 작동합니다.

누군가에게 도움이되기를 바랍니다. 건배


1

카비 사린과 같은 문제가있었습니다. 해결책은 https URL을 사용하는 대신 SSH를 통해 저장소를 복제하는 것이 었습니다. 그래서 이것이 저에게 도움이 되었기를 바랍니다.

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

1

단계 :

  1. 소스 서버에서 ssh 키 작성

    ssh-keygen

  2. ~. / ssh 디렉토리에있는 id_rsa.pub를 복사하고 복사하십시오.

  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 키 (공공 및 민간) 생성

자식 웹 사이트에서 맥의 개인 키와 공개 키를 넣어 : 2 단계를

자세한 단계는 맥 사용자를위한 아래로

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, 비트 버킷, gitlab 등)

  1. 유형 ssh-add -K ~/.ssh/[keyname]터미널에 하여 개인 키를 Mac에 추가하십시오
  2. pbcopy < ~/.ssh/[keyname].pub공개 키를 클립 보드에 복사하는 유형
  3. 해당 자식 웹 사이트에서 계정 설정을 열고 키를 추가하여 위에 복사 된 공개 키를 붙여 넣습니다.

완료, 이제 당길 수 있습니다.


downvoted 한 사람들에게, 나는 하루 종일 고투하고 있었고 내 문제를 직접 해결하는 대답을 찾을 수 없었으며 여기에 언급 된 단계가 직접 해결하여 일반적입니다. 어쨌든
Akshay Vijay Jain

-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

비트 버킷에서 내 키로 작업

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.