无法推送到 Bitbucket 上的 Git 存储库

Posted

技术标签:

【中文标题】无法推送到 Bitbucket 上的 Git 存储库【英文标题】:Cannot push to Git repository on Bitbucket 【发布时间】:2013-04-11 02:07:31 【问题描述】:

我创建了一个新的存储库,但遇到了一个奇怪的错误。我以前在 Bitbucket 上使用过 Git,但我刚刚重新格式化,现在我似乎无法让 Git 工作。完成提交后,我不得不将我的电子邮件和姓名添加到全局变量中,但随后它提交得很好。

当我尝试使用命令时

git push origin master

它不起作用。我收到这条消息:

$ git push origin master
Permission denied (publickey).
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

我在这里不知所措。我正在与之共享此存储库的朋友,可以正常访问并推送到它,但我似乎无法让它工作。

【问题讨论】:

您可以在远程 url 中使用 https 而不是 gits。例如:yourusername@bitbucket.org/teamname/repository.git 我通过密切关注 Atlassian 关于如何在您的机器上设置 SSH 的教程解决了同样的问题:confluence.atlassian.com/display/BITBUCKET/Set+up+SSH+for+Git 类似问题:***.com/questions/12940626/… 【参考方案1】:

为那些刚开始在 Windows 上使用 Git 和 BitBucket 以及不熟悉 Bash 的人编写这篇文章(因为在搜索问题中的错误消息时,这既是常见问题,也是 Google 排名靠前的结果)。

对于那些不介意 HTTPS 并且正在寻找快速修复的人,请滚动到此答案的底部以获取 为懒惰者

下的说明

对于那些希望解决实际问题的人,请按照以下说明进行操作:

尽快修复 SSH 问题

这是一组源自 VonC 链接的 URL 的指令。它被修改为尽可能有弹性和简洁。

不要输入 $ 或任何不以 $ 开头的行($ 表示这是您在 GitBash 中输入的内容)。

打开 GitBash

如果您还没有设置您的全局信息:

$ git config --global user.name "Your Name"
$ git config --global user.email "you@example.com"

检查 OpenSSH:

$ ssh -v localhost
OpenSSH_4.6p1, OpenSSL...

看到类似的东西了吗?

是:继续。 否:跳至 为懒惰者 部分或关注 VonC 的链接文章。

看看你是否已经生成了密钥:

$ ls -a ~/.ssh/id_*

如果有两个文件,可以跳过下一步。

$ ssh-keygen

将所有内容保留为默认值,输入密码。您现在应该可以看到使用此命令的结果:

$ ls -a ~/.ssh/id_*

检查现有的配置文件:

$ ls -a ~/.ssh/config

如果您得到结果,请检查此文件是否有错误信息。如果不存在文件,请执行以下操作:

$ echo "Host bitbucket.org" >> ~/.ssh/config
$ echo " IdentityFile ~/.ssh/id_rsa" >> ~/.ssh/config

确认内容:

$ cat ~/.ssh/config

Host bitbucket.org
 IdentityFile ~/.ssh/id_rsa
“IdentityFile”前的单个空格是必需的。

每次运行 GitBash 时检查您是否正在启动 SSH 代理:

$ cat ~/.bashrc
如果您看到一个名为start_agent 的函数,则此步骤已经完成。 如果没有文件,请继续。 如果有一个文件不包含这个函数,那么你就陷入了困境。附加到它可能是安全的(使用下面的说明),但它可能不是!如果不确定,请在按照以下说明操作之前备份您的 .bashrc,或跳至 为懒惰 部分。

在 GitBash 中输入以下内容以创建您的 .bashrc 文件:

$ echo "SSH_ENV=$HOME/.ssh/environment" >> ~/.bashrc
$ echo "" >> ~/.bashrc
$ echo "# start the ssh-agent" >> ~/.bashrc
$ echo "function start_agent " >> ~/.bashrc
$ echo "    echo \"Initializing new SSH agent...\"" >> ~/.bashrc
$ echo "    # spawn ssh-agent" >> ~/.bashrc
$ echo "    /usr/bin/ssh-agent | sed 's/^echo/#echo/' > \"\$SSH_ENV\"" >> ~/.bashrc
$ echo "    echo succeeded" >> ~/.bashrc
$ echo "    chmod 600 \"\$SSH_ENV\"" >> ~/.bashrc
$ echo "    . \"\$SSH_ENV\" > /dev/null" >> ~/.bashrc
$ echo "    /usr/bin/ssh-add" >> ~/.bashrc
$ echo "" >> ~/.bashrc
$ echo "" >> ~/.bashrc
$ echo "if [ -f \"\$SSH_ENV\" ]; then" >> ~/.bashrc
$ echo "     . \"\$SSH_ENV\" > /dev/null" >> ~/.bashrc
$ echo "     ps -ef | grep \$SSH_AGENT_PID | grep ssh-agent$ > /dev/null || " >> ~/.bashrc
$ echo "        start_agent;" >> ~/.bashrc
$ echo "    " >> ~/.bashrc
$ echo "else" >> ~/.bashrc
$ echo "    start_agent;" >> ~/.bashrc
$ echo "fi" >> ~/.bashrc

验证文件是否已成功创建(您的文件应该只在“您的用户名”出现的地方有所不同):

$ cat ~/.bashrc
SSH_ENV=/c/Users/yourusername/.ssh/environment

# start the ssh-agent
function start_agent 
    echo "Initializing new SSH agent..."
    # spawn ssh-agent
    /usr/bin/ssh-agent | sed 's/^echo/#echo/' > "$SSH_ENV"
    echo succeeded
    chmod 600 "$SSH_ENV"
    . "$SSH_ENV" > /dev/null
    /usr/bin/ssh-add


if [ -f "$SSH_ENV" ]; then
     . "$SSH_ENV" > /dev/null
     ps -ef | grep $SSH_AGENT_PID | grep ssh-agent$ > /dev/null || 
        start_agent;
    
else
    start_agent;
fi
关闭 GitBash 并重新打开它。 系统会要求您输入密码(对于您之前生成的 SSH 文件)。 如果没有提示,您要么没有设置密码,要么 GitBash 没有运行 .bashrc 脚本(这很奇怪,所以请考虑查看它的内容!)。如果您在 Mac(OS X) 上运行它,默认情况下不会执行 .bashrc - .bash_profile 是。要解决此问题,请将这个 sn-p 放入您的 .bash_profile: [[ -s ~/.bashrc ]] && source ~/.bashrc

如果你没有输入密码,你会在启动 GitBash 时看到这样的内容:

Initializing new SSH agent...
succeeded
Identity added: /c/Users/yourusername/.ssh/id_rsa (/c/Users/yourusername/.ssh/id_rsa)

以下应该返回结果:

$ ssh-add -l

但是,如果您从ssh-add -l 获得以下信息:

Could not open a connection to your authentication agent.

它没有生成 SSH 代理,并且您的 .bashrc 可能是原因。

如果在启动 GitBash 时看到:

Initializing new SSH agent...
sh.exe": : No such file or directory

这意味着您在回显到文件时忘记使用 \ 转义 $(即,变量已扩展)。重新创建你的 .bashrc 来解决这个问题。

验证代理正在运行并且您的密钥已添加:

$ ssh-add -l

应该返回类似这样的东西:

2048 0f:37:21:af:1b:31:d5:cd:65:58:b2:68:4a:ba:a2:46 /Users/yourusername/.ssh/id_rsa (RSA)

运行以下命令获取您的公钥:

$ cat ~/.ssh/id_rsa.pub

(它应该返回以“ssh-rsa ......”开头的内容

单击 GitBash 窗口图标 点击编辑 点击标记 使用鼠标突出显示公钥(包括开头的ssh-rsa 位和结尾的== youremail@yourdomain.com 位) 右键单击窗口(执行复制) 将您的公钥粘贴到记事本中。 删除所有换行符,使其只有一行。 按CTRL+A 然后按CTRL+C 将公钥再次复制到剪贴板。

通过执行以下步骤使用 BitBucket 配置您的私钥:

打开浏览器并导航到BitBucket.org 站点 登录BitBucket.org 点击您的头像(右上角) 点击管理账户 单击 SSH 密钥(在左侧菜单的安全性下) 点击添加键 为标签输入Global Public Key 粘贴您从记事本复制的公钥

Global Public Key 条目现在应该在您的键列表中可见。

返回 GitBash cd 进入包含您的项目的目录 将您的来源更改为 SSH 变体(如果您运行 FOR THE LAZY 步骤,则不会)

检查你的遥控器:

$ git remote -v

切换到 SSH 网址:

$ git remote set-url origin git@bitbucket.org:youraccount/yourproject.git

检查一切是否正常:

$ git remote show origin

你应该看到这样的东西:

Warning: Permanently added the RSA host key for IP address '...' to the list of known hosts.
* remote origin
  Fetch URL: git@bitbucket.org:youruser/yourproject.git
  Push  URL: git@bitbucket.org:youruser/yourproject.git
  HEAD branch: master
  Remote branch:
    master tracked
  Local ref configured for 'git push':
    master pushes to master (fast-forwardable)

完成!

您可以选择使用 HTTPS 而不是 SSH。它将要求您在远程操作期间输入密码(在您输入一次后它会暂时缓存)。以下是配置 HTTPS 的方法:

给懒人

您应该按照 VonC 的说明修复 SSH 问题;但是,如果您急于提交并且没有工具/时间/知识 来生成新的公钥现在,请将您的来源设置为HTTPS 替代方案:

> https://accountname@bitbucket.org/accountname/reponame.git

使用 GUI 工具,例如 TortoiseGit 或 command line tools。

Here is the documentation of this alternative origin URL.

在不存在时添加原点的命令行:

git remote add origin https://accountname@bitbucket.org/accountname/reponame.git

命令行更改现有原点:

git remote set-url origin https://accountname@bitbucket.org/accountname/reponame.git

注意:您的帐户名不是您的电子邮件。

您可能还想设置全局信息:

git config --global user.name "Your Name"
git config --global user.email "you@example.com"

然后再次尝试推送(无需再次提交)

git push origin master

【讨论】:

有时碰巧你已经在~/.bashrc中添加了上面提到的所有内容,但是当你运行命令ssh-all -l时它仍然显示No agent 在这种情况下,试试这个命令ssh-agent /bin/bash,那将@ 987654372@ 只是好奇,这是一个新手问题。 SSH_ENVSSH_AGENT_PID 应该替换为我们自己的信息?我们在哪里可以找到它?我认为我在信息方面比你有差距。 @JGallardo - 好问题!好消息是没有。这些是 bash shell 脚本中的变量——它们类似于批处理文件中的环境变量。 奇怪的是,在我的公钥中,最后不是“myemail@mydomain.com”而是“myusername@mycomputername.local” 我在此过程后收到错误“错误:无法打开.git/FETCH_HEAD:权限被拒绝”【参考方案2】:

如果您忘记将私钥添加到ssh-agent,也会出现此错误。这样做:

ssh-add ~/.ssh/id_rsa

【讨论】:

这是我的答案,我在创建新密钥时总是忘记。 它对我有用 :) 但你需要确保你的本地目录中已经有 ssh 私钥,并且你的 bitbucket 帐户中已经注册了公钥【参考方案3】:

2021 年更新,commented James:

我必须将我的密钥添加到 工作区,而不是基于“每个存储库”。

因为这些键是只读的,而工作区的键允许推送。

bitbucket.org/<my-workspace>/workspace/settings/ssh-keys 

请务必从子存储库中删除相同的密钥,否则您将无法将其添加到工作区。


原始答案(2013 年):

重新格式化意味着您可能删除了您的公共和私人 ssh 密钥(在 ~/.ssh 中)。

您需要重新生成它们并在您的 BitBucket 配置文件中发布您的公共 ssh 密钥,如“Use the SSH protocol with Bitbucket”中所述,在“Set up SSH for Git with GitBash”之后。

帐户->管理帐户->SSH 密钥:

然后:

图片来自“Integrating Mercurial/BitBucket with JetBrains software”

【讨论】:

只是为了补充一点。如果您使用 BitBucket(如屏幕截图所示),请确保将 SSH 密钥添加到您帐户的 SSH 密钥(帐户->管理帐户->SSH 密钥)。通过存储库设置将其添加为部署密钥只会让该密钥用于只读操作(不提交)。 @welshk91 我同意。我已经修改了答案以添加更详细的图片。 @VonC - 感谢您发布此信息。我一直在徒劳地试图让它在 Windows 机器上工作,这终于成功了。谢谢,本 2021 年更新:我必须将我的密钥添加到工作区,而不是基于“每个存储库”。由于这些键是只读的,而工作区的键允许推送。 bitbucket.org/<my-workspace>/workspace/settings/ssh-keys 请务必从子存储库中删除相同的密钥,否则您将无法将其添加到工作区 @James 感谢您的更新。我已将您的评论包含在答案中以提高知名度。【参考方案4】:

我通过使用命令删除远程解决了这个问题:

git remote remove origin

然后尝试使用 https url 而不是 ssh 添加远程

git remote add origin httpsUrl

它要求提供 github 凭据。输入凭据,然后尝试使用以下命令推送到 git:

git push origin master

【讨论】:

这对我有帮助。这是我的正确答案。谢谢 它对我有用。我没有删除原点,我只是添加了一个新的 感谢您的直接回复。像魅力一样工作 - 这正是我想要的。【参考方案5】:

只需要~/.ssh目录下的配置文件 参考:https://confluence.atlassian.com/bitbucket/set-up-ssh-for-git-728138079.html 在配置文件中添加波纹管配置

Host bitbucket.org
 IdentityFile ~/.ssh/<privatekeyfile>

【讨论】:

你救了我的命!【参考方案6】:

我遇到了同样的问题。我的 SSH 密钥设置正确。 我这样解决了这个问题。

在 Bitbucket 中创建新项目后,使用克隆。在终端中输入克隆命令,它应该将空项目克隆到您的计算机。 之后,您可以将文件复制到此目录并开始提交并推送到 bitbucket。

【讨论】:

多么奇怪。我今天遇到了与 OP 相同的问题,但没有重新安装或进行任何系统更改,我的密钥很好。 git remote add 进程今天不起作用 - 我在尝试推送时遇到身份验证错误 - 但删除 .git 然后使用 git clone 并重新复制我的源代码(只是一个 README.md)可以正常工作。谢谢你拉斐尔 - 如果不是你的回答,我当然不会想到尝试。 很高兴这个解决方案对您有所帮助 感谢您的回答。我可以通过创建一个新目录并在该新目录中克隆来解决问题。 mkdir /tmp/JUNK; cd /tmp/JUNK; git clone ...; cd ..; rm -rf JUNK【参考方案7】:

两个小的澄清可能会避免我所经历的困惑:

1 - HTTPS 和 SSH 的连接 URL 不同

当通过 https 连接时,您使用

https://your_account_name@bitbucket.org/owner-account/repo-name.git

但是,当通过 SSH 连接时,帐户名称是 always "git"

ssh://git@bitbucket.org/owner-account/repo-name.git

尝试在前面使用您的帐户名连接到 SSH 将导致原始发布者收到的错误。这就是你如何连接到 git@ 进行测试,然后错误地尝试使用你的用户名并看到错误。

2 - 通过团队帐户的 SSH 密钥将在 2017 年弃用

如果您在团队帐户上设置 SSH 密钥,他们建议将其切换到个人帐户。避免 e 的有用提示

【讨论】:

【参考方案8】:

这可能不是每个人的情况,但我仍然在这里做一个答案,以防有人有同样的原因。基本上我有两个 Bitbucket 帐户,每个帐户都有两个不同的公钥。通过运行ssh -Tv bitbucket.org,我设法看到我的笔记本电脑正在发送不正确的密钥(但由于两个公钥都在 bitbucket 中注册,密钥仍然被批准,然后因为密钥链接到另一个无权访问回购的帐户我在推,推被拒绝)。

所以我遵循了这个指南,我的问题就消失了:https://blog.developer.atlassian.com/different-ssh-keys-multiple-bitbucket-accounts/

【讨论】:

【参考方案9】:

如果您使用的是 SourceTree(我使用的是 2.4.1),我找到了一种更简单的方法来生成 SSH 密钥并将其添加到我的 Bitbucket 设置中。这解决了我的问题。

    在 SourceTree 中,转到首选项。 转到“帐户”选项卡并选择您的帐户。 应该有一个选项可以生成 SSH 密钥并将其复制到剪贴板。 复制后,在浏览器中转到 Bitbucket。转到 [头像] -> Bitbucket 设置。 转到 SSH 密钥。 点击添加键 粘贴您复制的密钥。

我收到了一封来自 Bitbucket 的确认电子邮件,说明 SSH 密钥已添加到我的帐户中。

作为参考,在 macOS 上,使用终端,您可以使用以下命令查看为您的设备生成的密钥。这是存储您生成的密钥的位置。

ls -la ~/.ssh

正如其他人所说,这个文档帮助了我:Use the SSH protocol with Bitbucket Cloud

【讨论】:

【参考方案10】:

我使用的是 macOS,虽然我在下次尝试推送时在 bitbucket 中设置了我的公钥

存储库访问被拒绝。

致命:无法从远程存储库读取。

请确保您拥有正确的访问权限 并且存储库存在。

我要做的是第 2 步。按照Bitbucket SSH keys setup guide 中的描述将密钥添加到 ssh-agent,尤其是第 3 步:

(仅限 macOS)以便您的计算机每次都记住您的密码 它重新启动,打开(或创建)~/.ssh/config 文件并添加这些 文件的行:

主机 * 使用钥匙串是的

希望它能帮助遇到同样问题的 mac 用户。

【讨论】:

【参考方案11】:

按照 Atlassian 教程完成 ssh,并确保将私钥粘贴到配置文件中,而不是存储库中:)

【讨论】:

能否附上一个指向上述Atlassian tutorial 的链接?将密钥粘贴到配置文件中的步骤是什么?我如何知道它是否已粘贴到存储库中? 她就在这里。为您的案例组合选择最佳选择! confluence.atlassian.com/bitbucket/…【参考方案12】:

Git 更改了它的一些 repo 说明 - 检查您是否已将本地 repo 连接到 Git 云 - 检查每个步骤以查看您是否错过了任何步骤。

Git 文档[https://docs.github.com/en/free-pro-team@latest/github/authenticating-to-github/connecting-to-github-with-ssh] 如果您更喜欢以下文档 -它更详细,值得一读,以了解为什么总结了以下步骤。

我的 Git 清单:-

    master 分支已更改为 main 如果您已经初始化了您的 repo 并想从头开始,请使用 $rm -rf .git 取消跟踪 git,这会递归删除 git 检查您没有使用“Apple Git”。输入 which git 它应该是 /usr/local/bin/git - 如果你使用 Homebrew 安装 git $brew install git 为提交配置您的姓名和电子邮件地址(请务必使用您在 Github 注册的电子邮件地址):
$git config --global user.name "Your Name"
$git config --global user.email "you@example.com"
配置 git 以跟踪文件名的大小写变化:
$git config --global core.ignorecase false

如果您犯了错误,您可以更新文件$ls -a 以找到文件然后$open .gitignore 并编辑它,保存并关闭。

    使用 SSH 密钥将本地链接到存储库。 SSH 密钥是一种无需密码即可识别受信任计算机的方法。 生成新密钥的步骤
输入ssh-keygen -t rsa -C "your_email@example.com" SAVE THE KEY 生成新的 SSH 密钥 系统将提示您输入文件以保存密钥和密码。两个步骤都按 Enter 键,两个选项都留空(默认名称,没有密码)。 将新密钥添加到 ssh-agent: ssh-add ~/.ssh/id_rsa 通过登录 Github,访问 帐户设置 并单击 SSH 密钥,将您的 SSH 密钥添加到 GitHub。点击添加 SSH 密钥

您也可以通过单击您的个人资料图片和左侧导航栏中的编辑键来找到它。

使用终端命令将您的密钥复制到剪贴板: pbcopy &lt; ~/.ssh/id_rsa.pub

Title 字段中输入可以识别您的机器的内容,例如 YOUR_NAME 的 MacBook Air

Key 字段中,只需点击 cmd + V 即可粘贴您之前创建的密钥 - 不要添加或删除和键的字符或空格

单击添加密钥并通过键入以下内容检查终端中的所有内容: ssh -T git@github.com

您应该会看到以下消息:

Hi YOUR_NAME! You've successfully authenticated, but GitHub does not provide shell access.

现在您的本地计算机已连接到云,您可以在线或在本地计算机上创建一个 repo。 Git 已将分支 main 的名称更改为 master。 链接存储库时,使用 HTTPS 密钥比使用 SSH 密钥更容易。虽然您最初需要 SSH 链接存储库以避免问题中的错误。

Permission denied (publickey).
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

按照您现在在存储库中获得的步骤进行操作 - GitHub 添加了一个额外的步骤来创建分支(撰写时间为 2020 年 10 月)。

在命令行上创建一个新的仓库 echo "# testing-with-jest" >> README.md 混帐初始化 git 添加 README.md git commit -m "第一次提交" git 分支 -M 主要 git remote add origin - (使用 HTTPS url 而不是 SSH) git push -u origin main

从命令行推送现有存储库 git remote add origin (使用 HTTPS url 而不是 SSH) git 分支 -M 主要 git push -u origin main

如果你弄错了,你总是可以通过从本地机器$rm -rf .git 的 git 文件夹中删除初始化并重新开始来重新开始 - 但首先检查没有遗漏上述步骤是有用的,并且总是最好的事实来源是文档——即使阅读和理解需要更长的时间!

【讨论】:

【参考方案13】:

我在一个存储库中遇到了同样的错误 - 突然,当我尝试推送提交时,所有其他存储库都可以正常工作。问题似乎出在 SSH 密钥上(正如您从之前的 cmets 中已经知道的那样) - 在 bitbucket 上转到 View Profile,然后单击 Manage Account

在左侧单击SSH Keys,然后在 ~/.ssh/ 目录下添加您系统上的那个。

如果您还没有生成一个 - 请使用其中一篇文章中的说明,但请确保您使用默认的 id_dsa.pub 文件或自定义命名的文件,稍后需要 -i 选项和连接ie时的密钥路径

ssh -i ~/.ssh/customkeyname username@ip_address

将本地密钥添加到您在 bitbucket 上的帐户后,您就可以开始与您的存储库进行交互了。

【讨论】:

【参考方案14】:

我发现最适合我的解决方案是将推送分成更小的块。

并从提交中删除大屏幕截图文件(10mb+)

安全性最终不是问题,更多关于 bin 文件的限制

【讨论】:

您收到上述错误,由 OP 指出,这不是身份验证/安全问题吗?这是你提交的大小? 事情就是这样【参考方案15】:

当存储库不存在时也会出现此错误。我尝试了所有答案,直到我看到 repo 名称缺少破折号

【讨论】:

【参考方案16】:

对于错误:

[错误] 存储库访问被拒绝。 通过部署密钥进行的访问是只读的。 致命:无法从远程存储库中读取。 请确保您拥有正确的访问权限 并且存储库存在。

[错误] 致命:无法从远程存储库读取。

[错误] 致命:找不到“https”的远程帮助程序

我按照以下步骤解决了:

首先安装这个依赖:

$ yum install expat expat-devel openssl openssl-devel

然后删除 git:

$ yum remove git git-all

现在在上一个版本上构建并安装 Git,在这种情况下:

$ wget https://github.com/git/git/archive/v2.13.0.tar.gz
$ tar zxf v.2.13.0.tar.gz
$ cd git-2.13.0/

然后进行配置:

$ make configure
$ ./configure --with-expat --with-openssl

最后像这样安装:

$ make 
$ make install install-doc install-html install-info

就是这样,现在使用 https 配置您的 repo:

$ git remote add origin https://github.com/*user*/*repo*.git
# Verify new remote
$ git remote -v

如果您在远程服务器中配置了 ssh 密钥,则必须将其删除。

【讨论】:

【参考方案17】:

我收到了这个错误

到 bitbucket.org 的连接被远程主机关闭。 致命:无法从远程存储库中读取。 请确保您拥有正确的访问权限。

然后我尝试了

git config --global user.email "you@example.com"

没有引号。

【讨论】:

【参考方案18】:

我发现 git 命令行并不喜欢我的选美生成密钥(Windows 10)。

在Serverfault上查看我的回答

【讨论】:

【参考方案19】:

这可能是由于 SSH 代理(和/或 BitBucket)中有多个 SSH 密钥造成的。检查Atlassian documentation for the workaround for this

【讨论】:

【参考方案20】:

我遇到了这个问题,我以为我疯了。我已经使用 SSH 20 年了。自 2012 年以来通过 SSH 和 git...但是为什么我不能在我的家用计算机上获取我的 bitbucket 存储库?

好吧,我有两个 bitbucket 帐户,并且在我的代理中加载了 4 个 SSH 密钥。 即使我的 .ssh/config 配置为使用正确的密钥。 当 ssh 初始化连接时,它正在使用它们以便将它们加载到代理中。所以我正在登录我的个人 bitbucket 帐户。

然后在尝试获取 repo 时遇到 Forbidden 错误。 有道理。

我从代理那里卸载了密钥

ssh-add -d ~/.ssh/personal_rsa

然后我可以获取 repos。

...后来我发现我可以强制它只使用指定的身份

 Host bitbucket.org-user2
     HostName bitbucket.org
     User git
     IdentityFile ~/.ssh/user2
     IdentitiesOnly yes

我不知道最后一个选项IdentitiesOnly

来自 bitbucket 文档本身

https://blog.developer.atlassian.com/different-ssh-keys-multiple-bitbucket-accounts/

【讨论】:

【参考方案21】:

试试看

git remote add origin <HTTP URL>

【讨论】:

我们不喜欢每次获取/推送到 bitbucket/github/etc/ 时都输入用户名/密码 在这种情况下,您可以使用 ssh 一个 URL。你只需要在你的 git repo 中添加你的公共 SSH 密钥。

以上是关于无法推送到 Bitbucket 上的 Git 存储库的主要内容,如果未能解决你的问题,请参考以下文章

如何将本地更改推送到 Bitbucket 上的远程 Git 存储库

如何从 Cake 构建任务将标签推送到 Bamboo 中的 Bitbucket Git 存储库?

为啥我无法将我的代码推送到 BitBucket?

无法推送到mercurial(bitbucket)repo'等待锁定存储库'

Bitbucket管道无法推送到heroku

如何更新 Git 的密码?