成功克隆我的回购从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指南。但它仍然没有解决这个问题。

这篇文章是有关我可以导入我的heroku git回购到bitbucket ?以及如何?

额外的事实:

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

看起来一切都很好。


我的第一个困惑是在BitBucket中具体在哪里设置SSH密钥。

我是BitBucket的新手,我正在设置一个部署密钥,只提供读访问。

所以确保你在BitBucket帐户设置中设置了你的rsa pub密钥。

点击你的比特桶头像,选择比特桶设置(管理账户)。在那里,您将能够设置SSH密钥。

我只是删除了部署键,我现在不需要任何。这个方法奏效了


如果您打算在管理帐户SSH密钥下添加相同的密钥,则必须先删除部署密钥。


所有你需要的-添加另一个密钥并使用它。

正如我发现的第一个关键-始终部署关键。


当我试图使用部署键时发生了这种情况,因为这正是我想要的。

我可以通过ssh -T git@bitbucket.org连接,它会告诉我,我可以读取我想要的存储库,但git克隆会失败。

清除~/。Ssh /known_hosts,通过Ssh -keygen生成一个新密钥,将新密钥添加到bitbucket,并重新尝试为我修复它。


我和卡比尔·萨林有同样的问题。解决方案是通过SSH克隆回购,而不是使用https URL。 这对我和其他人都有帮助:

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

TLDR: ssh-add ~/.ssh/yourkey

我刚刚算出了这道题。

其他答案都没用。

我确实有一个。/ssh/config与所有正确的东西,也是一个早期的存储库工作良好(相同的比特桶帐户,相同的密钥)。然后生成一个deploy_key,然后创建一个新的存储库。

之后,不能克隆新的回购。

我希望我知道ssh代理是如何/为什么搞砸的,但添加密钥解决了它。我的意思是在我的本地Ubuntu中添加密钥,而不是在bitbucket管理中。命令是公正的

    ~/.ssh$ ssh-add myregualrkey

希望这能帮助到一些人。


有时它不起作用,因为你手动在~/.ssh/config中为bitbucket设置了另一个键。


对于此错误:conq:存储库访问被拒绝。通过部署键的访问是只读的。

我改变了密钥的名称,例如

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

我在bitbucket上使用自己的密钥


现在SSH选项在安全设置下

点击你的头像——> Bitbucket Settings——> SSH Key——> Add Key

粘贴公钥


“部署键”仅用于只读访问。下面是解决这个问题的好方法。

创建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推送“远程名称”“分支名称”


部署键为只读。要启用写访问,您需要:

从存储库设置中删除此部署键。无论如何,您都不能用这个键向这个回购写入数据。 进入“头像->设置-> SSH密钥”并添加相同的密钥 现在试着推去树枝

以前你可以写入存储库,但这是BitBucket的一个变化,你不再能够使用部署键写入。


两步工艺才能推拉 Step1:生成ssh密钥(公钥和私钥)在mac2:将私钥放在mac中,公钥放在git网站中,下面的详细步骤是针对mac用户的

步骤1:生成密钥

(确保你安装了git)https://git-scm.com/download/mac 打开终端,输入ssh-keygen,这将提示您输入密钥的存储位置,您可以输入/Users/[machinename]/.ssh/[keyname] 接下来,它将要求密码短语,你可以通过按enter键让它空白,或者输入一些关键字,在下一个提示再次输入 这将为您创建两个密钥,私有和公共,名称[keyname]和[keyname].pub

第二步:将键推到适当的位置[mac和远程帐户,即Github, bitbucket, gitlab等]

输入ssh-add -K ~/。在终端上Ssh /[keyname]添加您的私钥到MAC 输入pbcopy < ~/.ssh/[keyname]。Pub将公钥复制到剪贴板 在你各自的git网站上打开账户设置,然后去添加密钥,在那里粘贴上面复制的公钥

完成,现在你可以推拉了。


步骤:

Create ssh keys on source server ssh-keygen Cat and copy id_rsa.pub located under ~./ssh directory Go to Bitbucket, if you have already set the access keys for repository(s) then delete existing public key(s) Go to Bitbucket avatar> Bitbucket settings> SSH Keys (under Security, left pane)> Click on 'Add Keys'> paste the public key. Check if it works by running below command on the source server git remote show origin For fetch and push from the source server, if the protocol is 'https' then you have to change it to 'git+ssh' by running below command git remote set-url origin git+ssh://<bitbucketaccount>@bitbucket.org/<accountname>/repo.git Check if you can do push to the repo.

完成了!


最近我也遇到了同样的问题。我得到了以下错误:

存储库访问被拒绝。通过部署键的访问是只读的。

您可以有两种SSH密钥:

对于您的整个帐户,这将适用于所有存储库 每个存储库只能用于该特定存储库的SSH密钥。

我只是删除了我的存储库SSH密钥,并添加了一个新的SSH密钥到我的帐户,它工作得很好。

我希望它能帮助到一些人。干杯


我愿再次强调以下几点:

您可能已经将SSH密钥添加到存储库(例如examplereo)中,但这不是SSH密钥所在的位置。 它意味着进入你的个人资料。这是屏幕左下角的小角色。在这里,你会发现一个不同的地方把你的SSH密钥(在安全下)>,然后你在这里添加密钥。 如果您不小心将SSH密钥放入存储库(而不是您的帐户),则删除存储库中的SSH密钥。

我花了很长时间才意识到,不知何故,即使在阅读了这里的答案后,它也没有点击。


您需要将密钥添加到您的配置文件中,而不是添加到特定的存储库中。 遵循这个: https://community.atlassian.com/t5/Bitbucket-questions/How-do-I-add-an-SSH-key-as-opposed-to-a-deployment-keys/qaq-p/413373


首先选择或创建你想用于推送到Bitbucket的键。假设它的公钥是~/.ssh/bitbucket.pub

通过登录并进入你的公共配置文件,设置,ssh-key, Add key,将你的公钥添加到Bitbucket。 配置ssh在与Bitbucket通信时使用该密钥。例如,在Linux中添加~/.ssh/config:

    Host bitbucket.org
    IdentityFile ~/.ssh/bitbucket

这里是从给定的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