Truy cập kho lưu trữ bị từ chối. truy cập thông qua khóa triển khai là chỉ đọc


302

Sau khi nhân bản thành công repo của tôi từ heroku và thêm một điều khiển từ xa khác

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

Tôi vẫn gặp lỗi này sau khi chạy dòng (3) hoặc sử dụng SourceTree

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

Đầu tiên tôi không hiểu thông điệp này có ý nghĩa gì trong thực tế. Và đó là sự xấu hổ.

Tôi đã tạo cặp khóa ssh và thêm vào heroku:

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

Tôi cũng đã thêm khóa của mình vào phần khóa triển khai trong BitBucket. Nhưng tôi phải thiếu một cái gì đó. Câu hỏi này không nằm ngoài sự lười biếng, tôi đã đọc các tài liệu khác nhau bao gồm các hướng dẫn của BitBuckets. Nhưng nó vẫn không khắc phục được vấn đề này.

Bài đăng này có liên quan đến Tôi có thể nhập heroku git repo của mình vào bitbologne không? và làm thế nào?

SỰ THẬT BỔ SUNG:

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

Hình như tất cả đều ổn.


1
Thêm khóa SSH thay vì Khóa triển khai làm việc cho tôi
Hari Das

Hãy nhớ bỏ phiếu lên cả câu hỏi và câu trả lời. Chúc mừng !!
zabumba

Câu trả lời:


720

Sự nhầm lẫn đầu tiên về phía tôi là về nơi chính xác để đặt Khóa SSH trong BitBucket.

Tôi chưa quen với BitBucket và tôi đã thiết lập Khóa triển khai chỉ cung cấp quyền truy cập đọc .

Vì vậy, hãy đảm bảo bạn đang thiết lập rsa pub keytrong Cài đặt tài khoản BitBucket của mình .

Nhấp vào hình đại diện BitBucket của bạn và chọn Cài đặt Bitbucket (Quản lý tài khoản). Ở đó bạn sẽ có thể đặt Khóa SSH .

Tôi chỉ đơn giản là xóa Khóa triển khai , bây giờ tôi không cần bất kỳ khóa nào. Va no đa hoạt động

nhập mô tả hình ảnh ở đây


48
Cảm ơn câu trả lời. Đây chính xác là điều tôi đã bỏ lỡ. Tôi đã thêm khóa triển khai thay vì Khóa SSH.

27
Đúng! Cảm ơn bạn vì câu trả lời. Atlassian nên thực sự làm cho nó rõ ràng hơn trong tài liệu của họ.
Ralph David Abernathy

14
Có, menu khóa ssh được ẩn rất tốt trong Bitbucket!
jonprasetyo

3
Giúp đỡ nhiều! Joelmaranhao thương xót!
kmria


64

Bây giờ tùy chọn SSH nằm trong cài đặt bảo mật

Nhấp vào Avatar của bạn -> Cài đặt Bitbucket -> Khóa SSH -> Thêm khóa

Dán khóa công khai của bạn


10
Cảm ơn bạn. Tôi chỉ muốn mô tả trường hợp của tôi. Tôi đã thêm khóa công khai của mình trong cài đặt kho lưu trữ thay vì trong khóa tài khoản Bitbucket của mình. Vì vậy, tôi đã xóa khóa trong kho lưu trữ và thêm nó vào cài đặt hồ sơ của mình để làm cho nó hoạt động.
lyubeto


13

Khóa triển khai chỉ được đọc. Để cho phép truy cập ghi, bạn cần:

  • Xóa khóa triển khai này khỏi cài đặt kho lưu trữ của bạn. Bạn sẽ không thể viết thư cho repo này bằng phím này.

  • Chuyển đến "Avatar -> Cài đặt -> Khóa SSH" và thêm khóa tương tự

  • Bây giờ hãy cố gắng đẩy để loại bỏ chi nhánh

Bạn đã có thể ghi vào kho lưu trữ trước đây nhưng đây là một thay đổi trong BitBucket khi bạn không còn có thể viết bằng khóa triển khai.


Cảm ơn điều này đã làm việc cho tôi sau khi nhổ tóc lâu
Umar Adil

10

'Khóa triển khai' chỉ dành cho truy cập Chỉ đọc. Sau đây là một cách tốt để làm việc này.

  • Tạo và khóa SSH và thêm nó vào bitbucket (Avatar người dùng -> Cài đặt Bitbucket-> Khóa SSH)
  • ~ / .ssh / know_hosts
  • ssh-add -D (Xóa các khóa được tải cho tác nhân SSH)
  • ssh-add ~ / .ssh / your_private_key_for_bitbucket
  • ssh git@bitbucket.org -Tv (Xác minh rằng khóa của bạn đang được sử dụng để kết nối với bitbucket)
  • git đẩy 'tên từ xa' 'tên chi nhánh'

9

Trước tiên, bạn phải xóa khóa triển khai nếu bạn muốn thêm cùng một khóa trong Quản lý khóa SSH tài khoản.


3
Xóa khóa triển khai mang lại cho tôiSomeone has already registered this as a deploy key.
dan-klasson

3
Hãy rõ ràng rằng bạn nên thêm khóa công khai shh trong CÀI ĐẶT BITBucksET (như đối với tài khoản BB đầy đủ) KHÔNG và tôi lặp lại KHÔNG trong Cài đặt Repo riêng lẻ. Nếu bạn đã thêm một khóa trong cài đặt repo đó là lý do tại sao bạn gặp phải những lỗi này.
Nate Uni

8

TLDR: ssh-add ~ / .ssh / yourkey

Tôi vừa mới giải quyết vấn đề này.

Và không có câu trả lời nào khác giúp được.

Tôi đã có một ./ssh/config với tất cả các công cụ phù hợp, cũng là một kho lưu trữ trước đó hoạt động tốt (cùng một tài khoản bitbucket, cùng một khóa). Sau đó, tôi đã tạo một triển khai_key và sau đó tạo ra một kho lưu trữ mới.

Sau đó không thể sao chép repo mới.

Tôi ước tôi biết làm thế nào / tại sao đại lý ssh đã làm hỏng điều này, nhưng thêm khóa đã giải quyết nó. Tôi có nghĩa là thêm khóa trong Ubuntu cục bộ của tôi, không phải trong quản trị viên bitbucket. Lệnh chỉ là

    ~/.ssh$ ssh-add myregualrkey

Hy vọng điều này sẽ giúp được ai đó.


Thông minh. Đây chính xác là những gì tôi đang tìm kiếm.
jpaljasma

3
Tôi không hiểu bạn đã làm gì.
kev

5

Tôi đã có điều này xảy ra khi tôi đang cố gắng sử dụng khóa triển khai vì đó chính xác là những gì tôi muốn.

Tôi có thể kết nối qua ssh -T git@bitbucket.orgvà nó sẽ cho tôi biết tôi có quyền truy cập để đọc kho lưu trữ mà tôi muốn, nhưng git clonesẽ thất bại.

Xóa ~/.ssh/known_hosts, tạo một khóa mới thông qua ssh-keygen, thêm khóa mới đó vào bitbucket và thử lại đã sửa nó cho tôi.


4

Tôi muốn nhấn mạnh lại như sau:

  • Bạn có thể đã thêm khóa SSH vào kho lưu trữ của mình (ví dụ exampleRepo), nhưng đây KHÔNG phảinơi khóa SSH đi .
  • Nó có nghĩa là đi vào HỒ SƠ CỦA BẠN . Đây là hình đại diện nhỏ ở góc dưới bên trái của màn hình. Tại đây, bạn sẽ tìm thấy một nơi khác để đặt Khóa SSH (bên dưới Bảo mật)> sau đó bạn thêm khóa vào đây.
  • Nếu bạn vô tình đưa khóa SSH của mình vào kho lưu trữ (trái ngược với tài khoản của bạn), thì hãy xóa khóa trong kho lưu trữ.

Mất nhiều năm để tôi nhận ra, bằng cách nào đó ngay cả sau khi đọc câu trả lời ở đây, nó vẫn không nhấp.


3

Trước tiên, chọn hoặc tạo khóa bạn muốn sử dụng để đẩy lên Bitbucket. Hãy nói rằng khóa công khai của nó là tại~/.ssh/bitbucket.pub

  • Thêm khóa công khai của bạn vào Bitbucket bằng cách đăng nhập và vào hồ sơ công khai, cài đặt, ssh-key, thêm khóa.
  • Định cấu hình ssh để sử dụng khóa đó khi giao tiếp với Bitbucket. Ví dụ: trong Linux thêm vào ~/.ssh/config:
    Host bitbucket.org
    IdentityFile ~/.ssh/bitbucket

2

Gần đây tôi phải đối mặt với vấn đề tương tự. Tôi đã nhận được lỗi sau:

truy cập kho lưu trữ bị từ chối. truy cập thông qua khóa triển khai là chỉ đọc.

Bạn có thể có hai loại khóa SSH:

  1. Đối với toàn bộ tài khoản của bạn sẽ hoạt động cho tất cả các kho lưu trữ
  2. Mỗi khóa SSH kho lưu trữ chỉ có thể được sử dụng cho kho lưu trữ cụ thể đó.

Tôi chỉ cần xóa khóa SSH kho lưu trữ của mình và thêm khóa SSH mới vào tài khoản của mình và nó hoạt động tốt.

Tôi hi vọng nó giúp ích cho ai đó. Chúc mừng


1

Tôi đã có cùng một vấn đề Kabir Sarin có. Giải pháp là sao chép repo qua SSH, thay vì sử dụng URL https. Vì vậy, đây là những gì đã giúp tôi, và hy vọng những người khác:

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

1

Các bước:

  1. Tạo khóa ssh trên máy chủ nguồn

    ssh-keygen

  2. Cát và sao chép id_rsa.pub nằm trong thư mục ~. / Ssh

  3. Truy cập Bitbucket, nếu bạn đã đặt các khóa truy cập cho (các) kho lưu trữ thì hãy xóa (các) khóa công khai hiện có
  4. Chuyển đến hình đại diện Bitbucket> Cài đặt Bitbucket> Khóa SSH (bên dưới Bảo mật, ngăn bên trái)> Nhấp vào 'Thêm khóa'> dán khóa chung.
  5. Kiểm tra nếu nó hoạt động bằng cách chạy lệnh dưới đây trên máy chủ nguồn

    git remote show origin

  6. Để tìm nạp và đẩy từ máy chủ nguồn, nếu giao thức là 'https' thì bạn phải thay đổi nó thành 'git + ssh' bằng cách chạy bên dưới lệnh

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

  7. Kiểm tra nếu bạn có thể làm đẩy đến repo.

Làm xong!


điểm nào khi câu trả lời đúng đã được đưa ra 3 hoặc 4 lần? Tại sao không cố gắng trả lời một câu hỏi mà vẫn chưa có câu trả lời.
zabumba

1
Cảm ơn bạn cho lời khuyên tốt bụng.
rahul darga

0

Tất cả bạn cần - thêm một khóa khác và sử dụng nó.

Như tôi đã tìm thấy khóa đầu tiên - luôn là Khóa triển khai.


0

Đôi khi nó không hoạt động vì bạn tự đặt một khóa khác cho bitbucket ~/.ssh/config.


0

Quy trình hai bước để có thể đẩy kéo
Bước 1: Tạo khóa ssh (công khai và riêng tư) trên mac

Bước 2: Đặt khóa riêng trong mac và khóa chung trong trang web git

bên dưới các bước chi tiết dành cho người dùng mac

Bước 1: Tạo khóa

  1. (đảm bảo bạn đã cài đặt git) https://git-scm.com/doad/mac
  2. mở terminal và gõ ssh-keygencái này sẽ nhắc bạn nhập vị trí lưu trữ cho khóa, bạn có thể gõ/Users/[machinename]/.ssh/[keyname]
  3. Tiếp theo nó sẽ yêu cầu cụm mật khẩu, bạn có thể để trống bằng cách nhấn enter hoặc nhập một số từ khóa để được nhập lại ở dấu nhắc tiếp theo
  4. Điều này sẽ tạo ra hai khóa cho bạn, riêng tư và công khai, với tên [tên khóa] và [tên khóa] .pub

Bước2: đẩy các phím đến các vị trí thích hợp [mac và các tài khoản từ xa, ví dụ như Github, bitbucket, gitlab, v.v.]

  1. Kiểu ssh-add -K ~/.ssh/[keyname] vào thiết bị đầu cuối để thêm khóa riêng của bạn vào mac
  2. Kiểu pbcopy < ~/.ssh/[keyname].pub để sao chép khóa công khai vào clipboard
  3. Mở cài đặt tài khoản trên trang web git tương ứng của bạn và đi đến thêm khóa, ở đó dán khóa công khai được sao chép ở trên

Xong, bây giờ bạn có thể đẩy kéo.


Đối với những người đã từ chối, tôi đã vật lộn cả ngày và tôi không thể tìm thấy bất kỳ câu trả lời nào trực tiếp giải quyết vấn đề của mình và các bước được đề cập ở đây trực tiếp giải quyết chúng và chúng là chung chung. Dù sao đi nữa
Akshay Vijay Jain

-1

Đây là mã đầy đủ để sao chép tất cả các repos từ một nhóm / người dùng BitBucket nhất định

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

Thông tin thêm: https://thepythoncoding.blogspot.com/2019/06/python-script-to-clone-all-repose khu.html


-3

cho lỗi này: conq: truy cập kho lưu trữ bị từ chối. truy cập thông qua khóa triển khai là chỉ đọc.

Tôi thay đổi tên của khóa của tôi, ví dụ

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

Tôi làm việc trên khóa riêng của mình trên bitbucket

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.