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

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

当我尝试使用命令时

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.

我不知所措了。我的朋友与我共享这个存储库,访问它很好,推到它也很好,但我似乎不能让它工作。

201888 次浏览

更新2021年,作为 评论詹姆斯:

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

因为这些键是只读的,并且工作区中的键允许推。

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

只要确保从子回购删除相同的关键,否则这将不会让您添加到工作区。

使用访问键更新2022年第4季度:

https://bitbucket.org/<my-workspace>/workspace/projects/<my-project>/settings/access-keys

原答案(2013) :

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

您需要重新生成它们,并在 BitBucket 配置文件中发布您的公共 ssh 密钥,如“ 对 Bitbucket 使用 SSH 协议”中所示,在“ 用 GitBash 为 Git 设置 SSH”之后。

帐户-> 管理帐户-> SSH 密码匙:

http://solvedproblems.hydex11.net/_media/solved-problems/crazy-problems/bitbucket_manage_account.png

然后:

http://solvedproblems.hydex11.net/_media/solved-problems/crazy-problems/bitbucket_add_ssh.png

来自 集成 Mercurial/BitBucket 和 JetBrains 软件的图片

我也有同样的问题。我的 SSH 密钥设置正确。 我把这个问题解决了。

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

为那些刚开始在 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的函数,则此步骤已经完成。
  • 如果没有文件,请继续。
  • 如果有一个文件没有包含这个函数,那么您就陷入了困境。它可能是安全的附加到它(使用下面的说明) ,但它可能不是!如果不确定,请备份。在遵循下面的指示之前,或者直接跳到 给懒人的部分。

在 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

验证文件是否已成功创建(只有出现“ yourusername”的地方不同) :

$ 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。为了解决这个问题,将这个代码片段放在 .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

这意味着在回显到文件时忘记用 a 转义 $(即。变量被展开)。重新创建你的。解决这个问题。

验证代理正在运行,并且已经添加了密钥:

$ 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 密钥(在左侧菜单的 Security 下)
  • 单击“添加键”
  • 输入 Global Public Key作为标签
  • 粘贴从记事本复制的公钥

Global Public Key条目现在应该可以在键列表中看到。

  • 返回 GitBash
  • Cd 到包含项目的目录中
  • 将原点更改为 SSH 变体(如果运行 给懒人的步骤,则不会更改为 SSH 变体)

检查你的遥控器:

$ 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

使用诸如 TortoiseGit命令行工具命令行工具之类的 GUI 工具。

下面是这个替代原始 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

如果忘记向 ssh-agent添加私钥,也会发生此错误。请使用:

ssh-add ~/.ssh/id_rsa

对于一个存储库,我得到了同样的错误——突然之间,所有其他存储库都出现了错误,并且在我尝试推送提交时仍然运行良好。问题似乎出在 SSH 键上(正如您在前面的注释中已经知道的那样)-在 bitbucket 上转到 View Profile,然后单击 Manage Account

在左手边点击 SSH Keys,然后在 ~/下添加你系统中的 SSH Keys。Ssh/目录。

如果还没有生成任何一个,请使用其中一篇文章中的说明,但是要确保使用默认的 id _ dsa。发布文件或自定义命名的文件,以后需要 -i选项和连接时键的路径,即。

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

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

有两个小小的澄清可以帮助某人避免我所经历的困惑:

1-HTTPS 和 SSH 的连接 URL 不同

当通过 https 连接时,使用

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

但是当通过 SSH 连接时,帐户名是 一直都是“ git”

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

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

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

如果要在团队帐户上设置 SSH 密钥,他们建议将其切换到个人帐户。

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

git remote remove origin

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

git remote add origin httpsUrl

它会询问 github 凭据,输入凭据,然后尝试使用:

git push origin master

我发现对我来说最有效的解决方法就是把推力分解成更小的块。

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

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

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

  1. 在 SourceTree 中,转到 Preferences。
  2. 转到“帐户”选项卡并选择您的帐户。
  3. 应该有一个选项来生成 SSH 密钥并将其复制到剪贴板。
  4. 复制完成后,进入浏览器中的 Bitbucket,进入[化身]-> Bitbucket 设置。
  5. 转到 SSH 密钥。
  6. 单击 Add key
  7. 粘贴您复制的密钥。

我收到了一封来自 Bitbucket 的确认邮件,确认我的帐户添加了一个 SSH 密钥。

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

ls -la ~/.ssh

正如其他人所说,这个文档帮助了我: 在 Bitbucket Cloud 中使用 SSH 协议

只需要 ~/. ssh 目录下的配置文件
Ref: < a href = “ https://confluence.atlassian.com/bitbucket/set-up-ssh-for-git-728138079.html”rel = “ norefrer”> https://confluence.atlassian.com/bitbucket/set-up-ssh-for-git-728138079.html
在配置文件 < br >

中添加以下配置
Host bitbucket.org
IdentityFile ~/.ssh/<privatekeyfile>

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

对于错误:

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

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

[错误] 无法找到“ 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 配置您的回购:

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

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

我得到了这个错误

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

然后我试了

Git config —— global user.email“ you@example.com”

没有引号。

我发现 git 命令行不喜欢我的选美比赛生成的密钥(Windows10)。

服务器故障上看到我的答案

我正在使用 macOS,虽然我已经设置了我的公钥在 bitbucket 下次我试图推我得到了

拒绝存储库访问。

无法从远程存储库读取。

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

我所要做的就是 Bitbucket SSH 密钥设置指南中描述的 步骤2. 将密钥添加到 ssh-agent,特别是第三步:

这样你的电脑每次都能记住你的密码 它重新启动、打开(或创建) ~/. ssh/config 文件并添加这些 行到文件:

主持人 *
是的

希望它能帮助 Mac 用户解决同样的问题。

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

这可能是由于 SSH 代理(和/或 BitBucket)中有多个 SSH 密钥造成的

试试吧

git remote add origin <HTTP URL>

我有这个问题,我以为我疯了。我已经使用 SSH 20年了。从2012年开始就放弃 SSH 了... ... 但是为什么我不能在家里的电脑上找到我的 bitbucket 存储库呢?

我有两个 bitbucket 账户,并且在我的代理中加载了4个 SSH 密钥。 即使我的. ssh/config 被配置为使用正确的键。 当 ssh 初始化连接时,它按照加载到代理中的顺序使用它们。所以我登陆了我的私人账户。

然后得到一个禁止的错误,试图获取回购。 有道理。

我从代理人那里卸下了钥匙

ssh-add -d ~/.ssh/personal_rsa

我就能拿到回购协议了。

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

 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/

也许不是每个人都是这样,但是我还是要在这里给出一个答案,以防有人有同样的原因。基本上我有两个 Bitbucket 帐户,每个帐户有两个不同的公钥。通过运行 ssh -Tv bitbucket.org,我设法看到我的笔记本电脑发送了错误的密钥(但是因为两个公共密钥都在 bitbucket 中注册,所以密钥仍然被批准,然后因为密钥链接到另一个账户,而这个账户没有访问我正在推送的回购,所以推送被拒绝)。

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

Git 已经修改了一些回购指令——检查你是否已经将本地回购连接到 Git 云——检查这些步骤中的每一步,看看是否有遗漏。

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

我的 Git 检查清单:-

  1. 主分支已改为主分支
  2. 如果您已经初始化您的回购,并希望从头开始,取消跟踪 git 与 $rm -rf .git递归删除 git
  3. 检查你没有使用“苹果 Git”。键入 which git它应该说 /usr/local/bin/git-如果你是安装 git 与家酿 $brew install git
  4. 为提交配置您的姓名和电子邮件地址(确保使用您在 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和编辑它,保存和关闭。

  1. 使用 SSH 密钥将本地链接到回购。SSH 密钥是一种识别可信计算机的方法,不涉及密码。
    生成新密钥的步骤
  • 通过键入 ssh-keygen -t rsa -C "your_email@example.com" SAVE THE KEY 生成一个新的 SSH 密钥
  • 系统将提示您输入保存密钥的文件和密码短语。按回车键进入两个步骤,两个选项都为空(默认名称,没有密码短语)。
  • 将您的新密钥添加到 ssh-agent: ssh-add ~/.ssh/id_rsa
  • 通过登录 GitHub,访问 帐户设定并单击 SSH 密钥,将 SSH 密钥添加到 GitHub。单击 添加 SSH 密钥

您也可以找到它通过点击您的配置文件图像和编辑键在它的左侧导航。

  • 用终端命令将密钥复制到剪贴板: pbcopy < ~/.ssh/id_rsa.pub

  • 书名字段中放置一些可以识别您的机器的东西,比如 < em > YOUR _ NAME 的 MacBook Air

  • 钥匙字段中,单击 cmd + V粘贴前面创建的键-< em > 不要添加或删除该键,并将字符或空格粘贴到该键

  • 单击 加钥匙,输入以下命令检查终端中的所有工作: ssh -T git@github.com < br >

    您应该会看到以下信息:

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

现在您的本地机器已经连接到云,您可以在线或在您的本地机器上创建回购。Git 已经为分支主机更改了名称 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.

按照您现在在 repo 上获得的步骤进行操作—— GitHub 添加了一个额外的步骤来创建一个分支(在编写 Oct 2020的时候)。

  • 在命令行上创建一个新的存储库 “ # test-with-jest”> > README.md 走吧 Git 添加 README.md Git commit-m“ first commit” Git Branch-M 总机 Git 远程加法起源ー (使用 HTTPS URL 而不是 SSH) Git 推进 u 原点总线

  • 从命令行推送现有存储库 Git 远程添加原点 (使用 HTTPS URL 而不是 SSH) Git Branch-M 总机 Git 推进 u 原点总线

如果你做错了,你可以从本地机器 $rm -rf .git的 git 文件夹中删除初始化,然后重新开始——但是首先检查一下是否没有错过上面的步骤是很有用的,最好的真相来源总是文档——即使阅读和理解需要更长的时间!

导航到源项目,打开 .git文件夹,用 记事本 + + (或任何其他文本编辑器)打开 config文件,并将该文件上的两个 .git URL 与源 .git上的 .git URL 进行比较。

这解决了我的问题。