การเข้าถึงที่เก็บถูกปฏิเสธ การเข้าถึงผ่านคีย์การปรับใช้เป็นแบบอ่านอย่างเดียว


302

หลังจากโคลน repo ของฉันจาก 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

ฉันยังคงได้รับข้อผิดพลาดนี้หลังจากรัน line (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 แล้ว แต่ก็ยังไม่เข้าใจปัญหานี้

โพสต์นี้เกี่ยวข้องกับฉันสามารถนำเข้า repo heroku git ของฉันไปยัง 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

ความสับสนครั้งแรกในด้านของฉันเกี่ยวกับที่ตั้งSSH Keysใน BitBucket อย่างแน่นอน

ฉันใหม่กับ BitBucket และฉันได้ตั้งค่าคีย์การปรับใช้ซึ่งให้สิทธิ์การเข้าถึงเพื่ออ่านเท่านั้น

เพื่อให้แน่ใจว่าคุณกำลังตั้งของคุณrsa pub keyของคุณในการตั้งค่าบัญชี BitBucket

คลิกที่ไอคอน BitBucket ของคุณและเลือกการตั้งค่า Bitbucket (จัดการบัญชี) คุณจะสามารถตั้งค่าคีย์ SSHได้ที่นั่น

ฉันเพิ่งลบรหัสการใช้งานฉันไม่ต้องการอะไรในตอนนี้ และมันก็ใช้งานได้

ป้อนคำอธิบายรูปภาพที่นี่


48
ขอบคุณสำหรับคำตอบ. นี่คือสิ่งเดียวกันกับที่ฉันหายไป ฉันเพิ่มคีย์การปรับใช้แทนคีย์ SSH

27
ใช่ ขอบคุณสำหรับคำตอบ. Atlassian ควรทำให้ชัดเจนในเอกสารของพวกเขา
— Ralph David Abernathy

14
ใช่ว่าเมนูปุ่ม ssh นั้นถูกซ่อนไว้อย่างดีใน Bitbucket!
— jonprasetyo

3
สุดยอดความช่วยเหลือ! เมตตา Joelmaranhao!
— kmria

6
ดิ้นรนกับสิ่งนี้เป็นเวลา 30 นาทีก่อนที่จะพบคำตอบของคุณขอบคุณมาก
— micgeronimo

64

ตอนนี้ตัวเลือก SSH อยู่ภายใต้การตั้งค่าความปลอดภัย

คลิกที่ Avatar ของคุณ -> การตั้งค่า Bitbucket -> Key SSH -> Add Key

วางกุญแจสาธารณะของคุณ


10
ขอบคุณ. ฉันแค่ต้องการอธิบายกรณีของฉัน ฉันเพิ่มกุญแจสาธารณะของฉันในการตั้งค่าที่เก็บข้อมูลแทนในรหัสบัญชี Bitbucket ของฉัน ดังนั้นฉันจึงลบคีย์ในที่เก็บและเพิ่มในการตั้งค่าโปรไฟล์ของฉันเพื่อให้มันทำงานได้
— lyubeto

17

คุณต้องเพิ่มคีย์ของคุณในโปรไฟล์และไม่ไปยังที่เก็บข้อมูลที่เฉพาะเจาะจง ทำตามนี้: https://community.atlassian.com/t5/Bitbucket-questions/How-do-I-add-an-SSH-key-as-opposed-to-a-deployment-keys/qaq-p/413373


นี่คือกรณีของฉันขอบคุณ!
— รอบชิงชนะเลิศ

13

คีย์การปรับใช้เป็นแบบอ่านอย่างเดียว ในการเปิดใช้งานการเข้าถึงเพื่อเขียนคุณต้อง:

  • ลบคีย์การปรับใช้นี้ออกจากการตั้งค่าที่เก็บของคุณ คุณจะไม่สามารถเขียนข้อความนี้ด้วยรหัสนี้ได้

  • ไปที่ "Avatar -> Settings -> Keys SSH" และเพิ่มรหัสเดียวกัน

  • ตอนนี้พยายามดันเพื่อลบสาขา

คุณสามารถเขียนไปยังที่เก็บมาก่อน แต่นี่เป็นการเปลี่ยนแปลงใน BitBucket ซึ่งคุณไม่สามารถเขียนด้วยปุ่มปรับใช้อีกต่อไป


ขอบคุณสิ่งนี้ใช้ได้กับฉันหลังจากดึงผมมาเป็นเวลานาน
— Umar Adil

10

'คีย์การปรับใช้' ใช้สำหรับการเข้าถึงแบบอ่านอย่างเดียวเท่านั้น ต่อไปนี้เป็นวิธีที่ดีในการทำงานผ่านสิ่งนี้

  • สร้างและคีย์ SSH และเพิ่มลงใน bitbucket (User Avatar -> Bitbucket Setting-> Keys 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 ของบัญชี


3
การลบคีย์การนำไปใช้งานจะทำให้ฉันSomeone has already registered this as a deploy key.
— dan-klasson

3
ชัดเจนว่าคุณควรเพิ่มรหัสสาธารณะ shh ภายใต้การตั้งค่า BITBUCKET (เช่นเดียวกับบัญชี BB แบบเต็ม) ไม่และฉันทำซ้ำไม่ได้ภายใต้การตั้งค่า Repo แต่ละรายการ หากคุณเพิ่มคีย์ภายใต้การตั้งค่า repo นั่นคือสาเหตุที่คุณได้รับข้อผิดพลาดเหล่านี้
— Nate Uni

8

TLDR: ssh-add ~ / .ssh / yourkey

ฉันเพิ่งแก้ไขปัญหานี้

และไม่มีคำตอบอื่นใดช่วย

ฉันมี. / ssh/config กับทุกสิ่งที่ถูกต้องและพื้นที่เก็บข้อมูลก่อนหน้านี้ทำงานได้ดี (บัญชี bitbucket เดียวกันคีย์เดียวกัน) จากนั้นฉันสร้าง deploy_key และหลังจากนั้นก็สร้างที่เก็บใหม่

หลังจากนั้นไม่สามารถคัดลอก repo ใหม่ได้

ฉันหวังว่าฉันรู้ว่าตัวแทน ssh ทำสิ่งนี้ได้อย่างไร แต่การเพิ่มคีย์แก้ไขมัน ฉันหมายถึงการเพิ่มกุญแจใน Ubuntu ท้องถิ่นของฉันไม่ใช่ผู้ดูแลระบบ bitbucket คำสั่งเป็นเพียง

    ~/.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 ลงในที่เก็บโดยไม่ตั้งใจ (ตรงข้ามกับบัญชีของคุณ) ให้ลบปุ่มนั้นในที่เก็บ

เอาทุกวัยมาทำให้ฉันตระหนักถึงแม้หลังจากอ่านคำตอบที่นี่ก็ไม่ได้คลิก


3

ก่อนอื่นให้เลือกหรือสร้างรหัสที่คุณต้องการใช้ในการผลักดันไปยัง Bitbucket สมมติว่ารหัสสาธารณะของมันอยู่ที่~/.ssh/bitbucket.pub

  • เพิ่มกุญแจสาธารณะของคุณไปยัง Bitbucket โดยเข้าสู่ระบบและไปที่โปรไฟล์สาธารณะของคุณ, การตั้งค่า, ssh-key, เพิ่มคีย์
  • กำหนดค่า ssh เพื่อใช้คีย์นั้นเมื่อสื่อสารกับ Bitbucket เช่นใน Linux เพิ่มไปที่~/.ssh/config:
    Host bitbucket.org
    IdentityFile ~/.ssh/bitbucket

2

เมื่อเร็ว ๆ นี้ฉันประสบปัญหาเดียวกัน ฉันได้รับข้อผิดพลาดดังต่อไปนี้:

การเข้าถึงที่เก็บข้อมูลถูกปฏิเสธ การเข้าถึงผ่านคีย์การปรับใช้เป็นแบบอ่านอย่างเดียว

คุณสามารถมีคีย์ SSH ได้สองชนิด:

  1. สำหรับบัญชีทั้งหมดของคุณซึ่งจะใช้กับที่เก็บข้อมูลทั้งหมด
  2. คีย์ SSH ต่อที่เก็บซึ่งสามารถใช้สำหรับที่เก็บเฉพาะนั้นเท่านั้น

ฉันเพิ่งลบคีย์ SSH ของที่เก็บของฉันและเพิ่มคีย์ SSH ใหม่ให้กับบัญชีของฉันและใช้งานได้ดี

ฉันหวังว่ามันจะช่วยให้ใครบางคน ไชโย


1

ฉันมีปัญหาเดียวกันกับ Kabir Sarin ทางออกคือการลอกเลียนแบบ repo ผ่าน 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. ตรวจสอบว่าคุณสามารถกดไปที่ repo

ทำ!


ประเด็นเมื่อคำตอบที่ถูกต้องได้รับแล้ว 3 หรือ 4 ครั้ง? ทำไมไม่ลองตอบคำถามที่ยังไม่มีคำตอบ
— zabumba

1
ขอบคุณสำหรับคำแนะนำ
— rahul darga

0

ทั้งหมดที่คุณต้องการ - เพิ่มรหัสอื่นและใช้งาน

ดังที่ฉันได้พบกุญแจแรก - กุญแจปรับใช้เสมอ


0

บางครั้งมันไม่ทำงานเพราะคุณตั้งค่าคีย์อื่นสำหรับบิตเบ็~/.ssh/configต


0

กระบวนการสองขั้นตอนเพื่อให้สามารถกดดึง
ขั้นที่ 1: สร้างคีย์ ssh (สาธารณะและส่วนตัว) บน mac

ขั้นที่ 2: ใส่กุญแจส่วนตัวใน mac และกุญแจสาธารณะในเว็บไซต์ git

ด้านล่างขั้นตอนโดยละเอียดสำหรับผู้ใช้ mac

ขั้นตอนที่ 1: การสร้างกุญแจ

  1. (ตรวจสอบให้แน่ใจว่าคุณได้ติดตั้งคอมไพล์แล้ว) 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 ของคุณแล้วไปที่ปุ่มเพิ่มวางรหัสสาธารณะที่คัดลอกไว้ด้านบน

ทำตอนนี้คุณสามารถกดดึง


สำหรับผู้ที่ downvoted ฉันกำลังดิ้นรนทั้งวันและฉันไม่สามารถหาคำตอบได้โดยตรงเพื่อแก้ไขปัญหาของฉันและขั้นตอนที่กล่าวถึงในที่นี้จะช่วยแก้ปัญหาเหล่านั้นได้โดยตรง Anyways
— Akshay Vijay Jain

-1

นี่คือรหัสเต็มเพื่อคัดลอก repos ทั้งหมดจาก 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.