我创建了一个新的存储库,但我遇到了一个奇怪的错误。我之前在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.
我在这里不知所措。我和我分享这个存储库的朋友,访问它很好并推到它就好了,但我似乎无法让它工作。
答案 0 :(得分:219)
为那些刚开始使用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...
看到类似的东西?
看看你是否已经生成了密钥:
$ 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
每次运行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
验证文件是否已成功创建(您的文件只应在"您的用户名"出现的地方不同):
$ 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
.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
这意味着当回显到文件时(即变量被扩展),你忘了用$转义$。重新创建.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
(它应该返回以&#34开头的内容; ssh-rsa ......"
ssh-rsa
位和尾随== youremail@yourdomain.com
位)CTRL+A
,然后按CTRL+C
将公钥再次复制到剪贴板。通过执行以下步骤配置您的私钥与BitBucket:
Global Public Key
作为标签现在,您的密钥列表中应显示Global Public Key
条目。
检查你的遥控器:
$ 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或command line tools等GUI工具。
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
答案 1 :(得分:55)
如果您忘记将私钥添加到ssh-agent
,也会发生此错误。这样做:
ssh-add ~/.ssh/id_rsa
答案 2 :(得分:24)
重新格式化意味着你可能删除了你的公共和私人ssh密钥(在〜/ .ssh中)。
您需要重新生成它们并在BitBucket配置文件上发布公共ssh密钥,如“Use the SSH protocol with Bitbucket”中所述,在“Set up SSH for Git with GitBash”之后。
帐户 - >管理帐户 - > SSH密钥:
然后:
的图片
答案 3 :(得分:17)
我通过删除远程使用命令解决了这个问题:
git remote remove origin
然后尝试使用https url而不是ssh
添加远程git remote add origin httpsUrl
它要求github凭据。输入凭据然后尝试使用:
推送到gitgit push origin master
答案 4 :(得分:4)
只需要〜/ .ssh目录下的配置文件
参考:https://confluence.atlassian.com/bitbucket/set-up-ssh-for-git-728138079.html
在配置文件中添加波纹管配置
Host bitbucket.org
IdentityFile ~/.ssh/<privatekeyfile>
答案 5 :(得分:3)
我遇到了同样的问题。我的SSH密钥设置正确。 我解决了这个问题。
在Bitbucket中创建新项目后,使用clone。在终端中输入克隆命令,它应该将空项目克隆到您的计算机。 之后,您可以将文件复制到此目录并开始提交并推送到bitbucket。
答案 6 :(得分:2)
两个小小的澄清可能会让我感到困惑:
通过https连接时,请使用
https://your_account_name@bitbucket.org/owner-account/repo-name.git
然而,当通过SSH连接时,帐户名称始终&#34; git&#34;
ssh://git@bitbucket.org/owner-account/repo-name.git
尝试使用您的帐户名称连接到SSH将导致原始海报收到错误。这是你如何进行连接到git @的测试,然后错误地尝试使用你的用户名并看到错误。
如果您在团队帐户上设置SSH密钥,他们建议将其切换到个人帐户。一个有用的提示,以避免e
答案 7 :(得分:2)
可能不是每个人都这样,但是如果有人有相同的原因,我仍然在这里回答。基本上我有两个Bitbucket帐户,每个帐户都有两个不同的公钥。通过运行ssh -Tv bitbucket.org
,我设法看到笔记本电脑发送的密钥不正确(但是由于两个公钥都在bitbucket中注册,因此该密钥仍被批准,然后由于该密钥已链接到另一个无法访问的帐户我正在推送的仓库,推送被拒绝)。
所以我遵循了本指南,但问题不再存在:https://blog.developer.atlassian.com/different-ssh-keys-multiple-bitbucket-accounts/
答案 8 :(得分:1)
如果您正在使用SourceTree(我使用2.4.1),我发现了一种更简单的方法来生成SSH密钥并将其添加到我的Bitbucket设置中。这解决了我的问题。
我收到Bitbucket发来的确认电子邮件,说我的帐户已添加了SSH密钥。
作为参考,在macOS上,使用终端,您可以使用以下命令查看为您的设备生成的密钥。这是您生成的密钥存储的位置。
ls -la ~/.ssh
正如其他人所说,这份文件帮助了我:Use the SSH protocol with Bitbucket Cloud
答案 9 :(得分:0)
Git更改了一些回购说明-检查您是否已将本地回购连接到Git云-检查每个步骤以查看是否错过了任何回购。
Git文档[https://docs.github.com/en/free-pro-team@latest/github/authenticating-to-github/connecting-to-github-with-ssh],如果您喜欢以下文档-它要详细得多,值得一读,以了解为什么总结了以下步骤。
我的Git清单:-
$rm -rf .git
取消跟踪git,以递归方式删除git which git
,它应该显示/usr/local/bin/git
-如果要使用Homebrew $brew install git
安装git $git config --global user.name "Your Name"
$git config --global user.email "you@example.com"
$git config --global core.ignorecase false
如果输入有误,可以更新文件$ls -a
来查找文件,然后$open .gitignore
进行编辑,保存并关闭。
ssh-keygen -t rsa -C "your_email@example.com"
保存密钥来生成新的SSH密钥ssh-add ~/.ssh/id_rsa
您也可以通过单击个人资料图片及其左侧导航栏中的编辑键来找到它。
使用终端命令将密钥复制到剪贴板:
pbcopy < ~/.ssh/id_rsa.pub
在标题字段中输入可以识别您的计算机的名称,例如 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.
现在,您的本地计算机已连接到云,您可以在线或在本地计算机上创建存储库。 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.
按照现在在存储库中执行的步骤-GitHub添加了一个额外的步骤来创建分支(撰写本文时为2020年10月)。
在命令行上创建新的存储库 回声“#测试,开玩笑” >> README.md git初始化 git添加README.md git commit -m“第一次提交” git branch -M主 git remote add origin — (使用HTTPS网址而不是SSH) git push -u origin main
从命令行推送现有存储库 git remote add origin (使用HTTPS网址而非SSH) git branch -M主 git push -u origin main
如果弄错了,您总是可以通过从本地计算机$rm -rf .git
的git文件夹中删除初始化来重新开始,然后重新开始-但是首先检查是否没有遗漏上述步骤是很有用的事实的最佳来源始终是文档-即使阅读和理解需要更长的时间!
答案 10 :(得分:0)
我遇到了这个问题,我以为自己疯了。我已经使用SSH 20年了。和git自2012年以来就通过SSH ...但是为什么我不能在家用计算机上获取我的bitbucket存储库?
好吧,我有两个bitbucket帐户,并且在代理中加载了4个SSH密钥。 即使我的.ssh / config配置为使用右键。 当ssh初始化连接时,它将按顺序使用它们以将其加载到代理中。所以我已经登录到我的个人bitbucket帐户。
然后在尝试获取存储库时出现禁止错误。 有道理。
我从代理商处卸下了钥匙
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/
答案 11 :(得分:0)
只需尝试
git remote add origin <HTTP URL>
答案 12 :(得分:0)
这可能是由于SSH代理(和/或BitBucket)中有多个SSH密钥引起的。选中Atlassian documentation for the workaround for this
答案 13 :(得分:0)
按照Atlassian教程中的方法完成ssh,并确保将私钥粘贴在配置文件中,而不是在存储库中:)
答案 14 :(得分:0)
我正在使用macOS,虽然我下次尝试推送时已经在bitbucket中设置了我的公钥
存储库访问被拒绝。
致命:无法从远程存储库中读取。
请确保您拥有正确的访问权限 存储库存在。
我必须做的是步骤2.将密钥添加到ssh-agent ,如Bitbucket SSH keys setup guide中所述,特别是第3步:
(仅限macOS)这样您的计算机每次都会记住您的密码 它重新启动,打开(或创建)〜/ .ssh / config文件并添加它们 到文件的行:
主持人*
UseKeychain yes
希望它可以帮助mac用户解决同样的问题。
答案 15 :(得分:0)
我发现git命令行并不适合我的选美生成键(Windows 10)。
请参阅Serverfault
上的答案答案 16 :(得分:0)
我收到了这个错误
与远程主机关闭的bitbucket.org连接。 致命:无法从远程存储库读取。 请确保您拥有正确的访问权限。
然后我试了
git config --global user.email&#34; you@example.com"
没有引号。
答案 17 :(得分:0)
错误:
[错误] 存储库访问被拒绝。 通过部署密钥进行访问是只读的。 致命:无法从远程存储库读取。 请确保您拥有正确的访问权限 存储库存在。
[错误] 致命:无法从远程存储库读取。
[错误] 致命:无法找到“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密钥,则必须将其删除。
答案 18 :(得分:0)
当存储库不存在时,也会显示此错误。我尝试了所有答案,直到我看到回购品名称缺少破折号
答案 19 :(得分:0)
我发现对我来说效果最好的解决方案就是将其推向更小的块。
并从提交中删除大型屏幕截图图像文件(10mb +)
安全性最终不是关于bin文件限制的问题
答案 20 :(得分:0)
我在一个存储库中遇到了同样的错误 - 突然之间,当我尝试推送提交时,所有其他存储器仍然正常工作。问题似乎与SSH密钥有关(正如您之前的评论中所知) - 在bitbucket上转到View Profile
然后点击Manage Account
。
在左侧单击SSH Keys
,然后在〜/ .ssh /目录下添加系统中的那个。
如果还没有生成一个 - 请使用其中一个帖子中的说明,但请确保使用默认的id_dsa.pub文件或自定义命名的文件,稍后需要-i
选项在连接时使用键的路径即
ssh -i ~/.ssh/customkeyname username@ip_address
在bitbucket上将您的本地密钥添加到您的帐户后,您就可以开始与您的存储库进行交互。