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


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.