无法推送到位桶,权限被拒绝(公钥)


72

我试图将我的项目推到我的位桶中,在无数问题解决/页面/疑难解答/教程中倾注了约4天。我很茫然,非常沮丧。我之前已经做过,但是在不同的计算机上……无论如何,这是我得到的代码/响应

~/dev/sample_app git push -u origin --all
The authenticity of host 'bitbucket.org (131.103.20.168)' can't be established.
RSA key fingerprint is 81:7b:2c:f5:6f:18:2b:7c:4b:ec:aa:46:46:74:7c:40.
Are you sure you want to continue connecting (yes/no)? 
Host key verification failed.
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.
~/dev/sample_app 

我在运行10.8.4的Mac上。

因此已经取得了一些进展,最初没有.ssh文件夹,所以我在一开始就创建了这种方式,没有known_hosts文件,所以我运行了

ssh -T git@bitbucket.org

我选择是,这创建了一个known_hosts文件,当我再次尝试推送时,我得到了:

~/dev/sample_app git push -u origin --all
Permission denied (publickey).
fatal: Could not read from remote repository.

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

我的.ssh文件夹是700,里面的键都是600。


18
实际上,鼓励您回答自己的问题作为正式答案,以便您知道:)
iono

并且与您的私钥相对应的公钥已在您的Bitbucket帐户中注册了吗?
janos 2014年

Answers:


46

您可以在〜/ .ssh / config文件中设置IdentityFile标志文件,如下所示:

Host bitbucket.org
  IdentityFile ~/.ssh/id_rsa

当你跑步

ssh git@bitbucket.org

ssh客户端允许您选择一个文件,从该文件中读取用于RSA或DSA身份验证的身份(私钥)。

SSH客户端使用给定的私钥(身份文件)


在我的Linux机器上,Host bitbucket.org~/.ssh/config文件末尾添加一个节就足够了。但是出于某些原因,在MacOS上,我不得不将该节放在文件的开头,以便强制该IdentityFile指令优先于本Host *节中的默认值。
MarkHu '19

43

您可能使用ssh作为git origin url。尝试像这样删除ssh来源

git remote rm origin

然后使用HTTPS网址添加新的来源,然后尝试再次推送。

git remote add origin https://git@bitbucket.org/SOMETHING/SOMETHING.git
git push -u origin master

确保从bitbucket粘贴URL作为来源。


1
这是自然的解决方案,但我始终忘了
MehranTM

2
它起作用了-允许我使用URL而不是ssh进行访问-这就是为什么起作用的原因。如果您可以通过ssh访问帐户中的其他存储库,则仅使用ssh链接而不使用https链接
Abdeali Chandanwala

21

这可能会使系统管理员感到恐惧,但是在遇到了这个问题(Windows)之后,我放弃了SSH,回到HTTPS。

首次将远程存储库添加到Git时,将SSH参考“ git@bitbucket.org...”替换为HTTPS URL“ https://<username>@bitbucket.org”。

您必须每次都输入密码,但是,特别是在Windows上SSH不如* nix家族那么普遍的情况下,与SSH令人头疼的情况相比,我认为这是一个小麻烦。


1
我已经花了数小时的时间,看来唯一可行的方法就是使用Pageant。我不喜欢在后台不断运行这种软件,特别是如果将其集成到Windows资源管理器中时,但是BitBucket似乎无法像GitHub那样简单直接地工作,在这里我可以简单地使用它ssh-keygen来生成一个公钥并将其添加到我的GitHub帐户中。我已经接受到BitBucket和Windows只是一个糟糕的组合,已经诉诸使用HTTPS。
Paul Lammertsma,2016年

我正在争取胜利10,我不得不改用HTTPS。
阿里·阿夫沙

16

在新的Ubuntu 16机器上,我缺少文件~/.ssh夹中的文件,因此有效:

  1. 转到文件夹 ~/.ssh
  2. 运行ssh-keygen并命名您的文件,即id_rsa
  3. 运行cat ~/.ssh/id_rsa.pub | xclip -sel clip
    如果你错过了xclip刚刚apt-get install xclip:)
  4. 转到(在url中将USERNAME更改为您的bitbucket用户名:))https://bitbucket.org/account/user/USERNAME/ssh-keys/
  5. 单击Add key并从剪贴板中粘贴密钥

魔术-现在可以使用:)


问题是针对Mac OS,apt-get与无关,仅适用于
Coto

Ubuntu上的问题导致我进行此问答(为什么?请参见标签),并且这个问题使Ubuntu用户感动到-因此,我很好地描述了我的经验。 。干杯。
pbaranski

仍然不能为我工作(我正在使用Mac),知道吗?
zukijuki

对于Windows; C:\Users\<userName>\.ssh(将<userName>替换为您的用户名)。下载Git Bash并允许ssh-keygen其他功能,这些功能可以在这里下载>> git-scm.com/download/win
Aakash

10

更具可持续性的解决方案是进行编辑.bashrc(例如vi ~/.bashrc),然后在其中添加以下行(替换键名)

ssh-add ~/.ssh/YOUR_KEY

启动外壳程序时,这将自动加载密钥


8

我在BitBucket中也遇到了类似的问题。就我而言,它只有在我发现我应该从git clone命令中删除sudo后才修复!

根据Attlassian

不应该使用sudo克隆时,推,或拉,因为用户级别的ssh-agent运行,而不是根本的水平。


7

git config --global user.name "My Name"和 设置git后git config --global user.email myemail@x.com,我仍然遇到Permission Denied(publickey)错误。为了解决这个问题,我首先使用生成了一个新的ssh令牌

ssh-keygen

并复制到

pbcopy < ~/.ssh/YOUR_KEY

之后,我去了bitbucket.com,将其添加为设置中的新SSH密钥。然后,我返回到终端以添加新密钥

ssh-add ~/.ssh/YOUR_KEY.

我遇到的最大问题是我错过了关键ssh-add [key]命令。


5

我在Linux(Ubuntu)中也遇到了同样的问题。

我使用安装程序解决了它git

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

使用cat和SSH密钥将公钥打印到bitbucket.org:

$ cat ~/.ssh/id_rsa.pub

添加Bitbucket并增加存储库:

git remote add origin git@bitbucket.org:<username>/your repository name.git
git push -u origin --all

就这样!


1

检查是否存在SSH密钥

ls -al ~/.ssh

复制SSH密钥

cat ~/.ssh/id_rsa.pub | pbcopy

将复制的SSH密钥添加到“ Bitbucket设置”,“安全性”,“ SSH密钥”。


1

这可能很明显,但是我花了很多时间。

运行时检查目的地 git remote -v

就我而言,我已经完美地设置了ssh密钥,但是此命令的输出是:

origin get@github.com:USERNAME/REPOSITORY.git

(注意,获取的不是git

并不是

origin git@github.com:USERNAME/REPOSITORY.git

同样,这是一个非常特殊的情况,但是如果遇到问题,请务必仔细检查该系统的字符串。

您可以使用以下命令解决此问题:

git remote set-url origin git@github.com:USERNAME/REPOSITORY.git


1

如果any.ssh修复不起作用,或者您克隆为https,则可能存在验证问题。就我而言,我通过在克隆存储库时提供用户名和密码来解决此错误。当您在同一台计算机上使用多个帐户时,可能会发生此问题。

将“ git clone https:// username:password@github.com/username/repository.git ”命令与您的用户名和密码以及回购URL一起使用。


1

我喜欢这里的答案,但它们都错过了可能的根本原因。

使用命令:

ssh -T git@bitbucket.org 

更换 bitbucket.org用您自己的bitbucket主机。

如果您得到如下答案:

此部署密钥具有读取权限对以下存储库的:

团队名称/存储库名称

这就是为什么推送到存储库不起作用的原因。

您还可以在Bitbucket Web UI中再次检查,注意read-only access说明中的:

在此处输入图片说明

希望对同一问题能有不同的看法。


所以您需要做什么才能获得写访问权限?
Krishnadas PC

0

就我而言,它解决了从目录添加ssh密钥的问题

~/.ssh/id_rsa.pub

bitbucket.org上。我在网站上也将其命名为id_rsa.pub。

在开始时,我添加了一个仅为bitbucket创建的密钥,并以此命名。最初的远程操作有效,但几天后请求被拒绝。


0

在Windows中,@ efesaid答案用于解决ssh连接测试的问题。顺便说一句,您可以添加-v以查看尝试使用哪些键(按名称)以及连接失败的原因。

但是,当使用git@bitbucket.org:user / repo.git推送到bitbucket时,主机似乎不完全是bitbucket.org,因此我仍然遇到权限被拒绝的问题。我通过将我的密钥重命名为id_rsa(这是ssh测试中尝试使用的密钥名称)来解决了这些问题。

如果您有一个rsa密钥,则此方法有效。对于多个密钥,也许配置文件中的主机必须是

bitbucket.org:username

但我不确定这是不确定的


0

我认为bitbucket指令是最好的。检查是否安装了ssh,如果没有安装,请检查

krasen@krasen-Lenovo-Y50-70:~$ ssh -v
usage: ssh [-1246AaCfgKkMNnqsTtVvXxYy] [-b bind_address] [-c cipher_spec]
           [-D [bind_address:]port] [-E log_file] [-e escape_char]
           [-F configfile] [-I xxxxx] [-i identity_file]
           [-L [bind_address:]port:host:hostport] [-l login_name] [-m mac_spec]
           [-O ctl_cmd] [-o option] [-p port]
           [-Q cipher | cipher-auth | mac | kex | key]
           [-R [bind_address:]port:host:hostport] [-S ctl_path] [-W host:port]
           [-w local_tun[:remote_tun]] [user@]hostname [command]

krasen@krasen-Lenovo-Y50-70:~$ ls -a ~/.ssh 
.  ..  google_compute_engine  google_compute_engine.pub  identity  identity.pub  known_hosts

krasen@krasen-Lenovo-Y50-70:~$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/krasen/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/krasen/.ssh/id_rsa.
Your public key has been saved in /home/krasen/.ssh/id_rsa.pub.
The key fingerprint is:
xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx krasen@krasen-Lenovo-Y50-70
The key's randomart image is:
+--[ RSA 2048]----+
|              .  |
|           xx x  |
|          xxxxx  |
|       xxxxxxxxx |
|      .xxxxxxxx  |
|       xxxxx     |
|     xxxxxxxxxxxx|
|    xxxxxxxxxxxxx|
|     xxxxxxxxxxx |
+-----------------+                                                                                                                                  
krasen@krasen-Lenovo-Y50-70:~$ ls -la ~/.ssh                                                                                                         
total 40
drwx------   2 krasen krasen 4096 Jun 29 14:30 .
drwxr-xr-x 110 krasen krasen 4096 Jun 29 13:00 ..
-rw-------   1 krasen krasen 1675 Mar 18  2015 google_compute_engine
-rw-r--r--   1 krasen krasen  409 Mar 18  2015 google_compute_engine.pub
-rw-------   1 krasen krasen 1679 Jun 29 13:15 identity
-rw-r--r--   1 krasen krasen  409 Jun 29 13:15 identity.pub
-rw-------   1 krasen krasen 1679 Jun 29 14:30 id_rsa
-rw-r--r--   1 krasen krasen  409 Jun 29 14:30 id_rsa.pub
-rw-r--r--   1 krasen krasen 4698 Jun 29 13:16 known_hosts

krasen@krasen-Lenovo-Y50-70:~$ ssh-agent /bin/bash

检查代理是否已启动

krasen@krasen-Lenovo-Y50-70:~$ ps -e | grep [s]sh-agent 
26503 ?        00:00:00 ssh-agent
krasen@krasen-Lenovo-Y50-70:~$ ssh-add ~/.ssh/id_rsa
Identity added: /home/krasen/.ssh/id_rsa (/home/krasen/.ssh/id_rsa)
krasen@krasen-Lenovo-Y50-70:~$ ssh-add -l 
2048 xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx /home/krasen/.ssh/id_rsa (RSA)
krasen@krasen-Lenovo-Y50-70:~$ cat ~/.ssh/id_rsa.pub
ssh-rsa xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

获取此密钥并将其添加为bitbucket设置中的密钥


0

我遇到了一个类似的问题,以前我曾经使用HTTPS访问存储库,并且不得不通过设置url来切换到SSH。

git remote set-url origin ssh://git@bitbucket.org/...

0

确保您已在终端上切换到正确的用户。

在我的情况下,root用户不是在bitbucket设置面板上添加了ssh密钥的用户。使用sudo运行git使其从root用户运行,而我自己的用户就是添加密钥的用户。


0

我的问题是与权限有关。

我的项目目录归所有者所有root,但我以身份登录ubuntuPERMISSION DENIED如果输入git命令,我会得到,例如git pull origin master,所以我使用sudo git pull origin master

我已经通过BitBucket注册了ubuntuSSH密钥/home/ubuntu/.ssh/id_rsa.pub

但是,我正在使用sudo。因此,实际使用的SSH密钥/home/root/.ssh/id_rsa.pub与BitBucket所使用的SSH密钥不同。

我的案子的解决方案

chown -R username_here:username_here project/folder/here

现在,如果您不准备,它应该可以工作 sudo

提供BitBucketroot的密钥


0

就我而言,我的问题是我尝试使用.ppk生成的腻子文件,无论我尝试了什么都没有用。

最后,我发现它是错误的文件,因此我必须将其导出,将其另存为id_rsa文件并加载,然后一切正常。

在此处输入图片说明


0

在源代码树中,选择您的项目,然后单击鼠标右键,然后找到一个选项“转换为SSH”->修复->登录,为我解决 在此处输入图片说明


0

如果您将SourceTree与Bitbucket一起使用,则解决方案是下一个:

转到您的个人Bitbucket设置 转到“应用程序密码”并创建一个应用程序密码为该应用程序密码授予下一个权限:

Repositories (R-W-A-D)
Projects (R-W)
Pull request (R-W)

之后,保持生成的密码 尝试再次克隆您的存储库。将显示一个密码弹出窗口,输入生成的密码。就这样。


0

如果您的计算机中有多个键,请确保将bitbucket添加到列表中,例如下面的

.ssh/config
# Company account
Host company
HostName github.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa_accelya

# Personal account
Host personal
HostName github.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa_personal


# Personal account bitbucket
Host bitbucket
HostName bitbucket.org
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa_personal_bitbucket

0

就我而言,发生此问题是因为〜/ .ssh中有许多ssh键。我必须在〜/ .ssh / config中创建一个bitbucket.org特定条目,如下所示:

Host bitbucket.org
    Hostname bitbucket.org
    IdentityFile <location-of-.ssh-directory>/bb-rsa
    IdentitiesOnly=yes

我的猜测是,由于我们在克隆时未指定密钥,因此ssh会尝试〜/ .ssh中的所有密钥(bitbucket认为这是黑客尝试),并拒绝我们的回购克隆尝试。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.