Bitbucket上的Git:即使上传了我的公共SSH密钥,也总是要求输入密码


179

我已按照说明~/.ssh/id_rsa.pub将我上传到Bitbucket的SSH密钥,但是Git在每次操作(例如)时仍要求我提供密码。我错过了什么?git pull

它是一个私有存储库(另一个人的私有存储库的叉子),我这样克隆它:

git clone git@bitbucket.org:Nicolas_Raoul/therepo.git

这是我的本地人.git/config

[core]
        repositoryformatversion = 0
        filemode = true
        bare = false
        logallrefupdates = true
[remote "origin"]
        fetch = +refs/heads/*:refs/remotes/origin/*
        url = https://Nicolas_Raoul@bitbucket.org/Nicolas_Raoul/therepo.git
[branch "master"]
        remote = origin
        merge = refs/heads/master

在具有相同公钥的相同环境中,Github上的Git可以正常工作。
.sshrwx------.ssh/id_rsa-rw-------.ssh/id_rsa.pub-rw-r--r--

Answers:


265

您确定使用ssh url克隆了它吗?

原始网址说,url = https://Nicolas_Raoul@bitbucket.org/Nicolas_Raoul/therepo.git因此,如果使用的是https,则无论输入的ssh密钥如何,都会要求输入密码。

因此,您需要执行以下操作:

在您当前的仓库中打开您的配置文件。

vim .git/config

并更改网址为

[remote "origin"]
        fetch = +refs/heads/*:refs/remotes/origin/*
        url = https://Nicolas_Raoul@bitbucket.org/Nicolas_Raoul/therepo.git

[remote "origin"]
        fetch = +refs/heads/*:refs/remotes/origin/*
        url = git@bitbucket.org:Nicolas_Raoul/therepo.git

62
您说得对,谢谢!我很可能使用错误的URL进行了克隆。我更换了网址中.git/configgit@bitbucket.org:Nicolas_Raoul/therepo.git和现在的作品!
Nicolas Raoul


3
创建存储库时,由bitbucket推荐给我https url!怎么会!
Denis Kniazhev 2013年

4
请记住,如果您的位桶是私有的,并且要使用git协议,则需要在设置中将ssh密钥添加到BitBuket的网站。
cevaris 2014年

7
不得不将URL更改为ssh://git@bitbucket.org/userName/repoName.git-没有ssh://前缀就没有用。
trygub

33

正如解释在这里,如果你用克隆SSH网址,你需要输入用户名/密码,每次推/拉时间。通过@manojlds 检查上面的答案

但是,如果要使用HTTPS进行克隆,并且希望避免每次都输入用户名/密码,则可以使用以下命令将凭据存储到缓存中:

git config --global credential.helper 'cache --timeout 3600'

3600(秒)表示1小时,您可以根据需要进行更改。


@atilkan在这种情况下,您可以提供您的机器/操作系统和git版本信息吗?当您尝试设置缓存设置时,将显示错误消息(如果有)。
Ajeet Shah

我从bitbucket克隆了某人的存储库,这是我的遥控器。manecs-MBP:LocationTracker manec$ git remote -v origin https://Vysh1@bitbucket.org/Vysh1/locationtracker.git (fetch) origin https://Vysh1@bitbucket.org/Vysh1/locationtracker.git (push)
Banee Ishaque K

@AjeetShah如果我输入了错误的密码怎么办?还会缓存错误的密码吗?
anaval

@anaval为什么不尝试这样做,然后在清除或禁用缓存后尝试输入正确的密码?编辑答案,让我们知道您的做法:)
Ajeet Shah

19

上面已经回答了。我将总结以上检查步骤。

git remote -v在项目目录中运行。如果输出显示以开头的远程URL,https://abc则您每次都可能需要用户名密码。

因此要更改远程url运行git remote set-url origin {ssh remote url address starts with mostly git@bitbucket.org:}

现在运行git remote -v 以验证更改后的远程URL。

请参考:https : //help.github.com/articles/changing-a-remote-s-url/


16

您好,未来的Google员工。

在MacOS> = High Sierra上,由于原因 SSH密钥不再保存到KeyChain

使用ssh-add -K不再有效还会重新启动。

这是3种可能的解决方案

我已经成功使用了第一种方法。我创建了一个名为文件config~/.ssh

Host *
  AddKeysToAgent yes
  UseKeychain yes
  IdentityFile ~/.ssh/id_rsa

2
这需要更多的注意!我花了很长时间寻找解决方案,第一个包含config文件的解决方案/.ssh非常完美!
杰森

1
这个答案解决了我在MacOs上的问题:cd ~/.ssh+ ls+ nano config(文件已创建)+在Vaiden的答案中添加代码。然后控制X + Y保存文件。
塞巴斯蒂安·吉凯尔

9

在HTTP请求的情况下,也可以选择将凭据(带有密码)直接粘贴到url中:

http://username:password@bitbucket.org/...

这样可以省去再次提供您的凭据的麻烦。简单地修改您的.git / config(URL)。


10
但是不安全。而无法正常工作,如果密码有像一些字母$%
Gank的

3
阅读此评论的任何人,请记住:仅仅因为它起作用,并不意味着它是对的。如果您将密码永久性地复制到任何地方,那么您做错了。与始终将文件夹权限设置为777:停止,思考,研究,理解然后正确执行的权限相同。
dKen

9

这些答案均无济于事,事实证明我的问题略有不同。每次发送密码之前,都是ssh要求我输入密码。因此,我要做的就是将密码与此命令关联:

ssh-add -K ~/.ssh/id_rsa

然后,它将提示您输入密码并进行存储。如果每次提示您输入密码时,这可能是您正在寻找的解决方案

输入密钥'/Users//.ssh/id_rsa'的密码:

更多信息在这里

注意:我在Mac机器上成功使用了此功能,但是正如下面的@Rob Kwasowski指出的那样,大写K选项对于mac是唯一的。如果不在Mac上,则需要使用小写字母k(这可能也适用于mac,但我尚未测试)。


1
很好,但是应该小写kssh-add -k ~/.ssh/id_rsa
Rob Kwasowski

你能详细说明一下吗?
stackPusher

如下所述:ssh.com/ssh/add,命令行选项是小写的k,而不是大写的,因为这些选项区分大小写。
罗伯·夸索夫斯基

正确,但大写K选项也会将密钥添加到钥匙串中,而小写k仅将密钥添加到代理上。所以我要问的是“为什么不要将钥匙也添加到钥匙串中?”
stackPusher

1
请注意-K特定于Mac 的平台差异:help.github.com/en/articles/error-ssh-add-illegal-option
Rob Kwasowski

5

我认为这Step 1是对的Windows,但Step 2对的,Linux但是您忘了适当地提及它。
Ajeet Shah'8

我在Windows框上运行了这3个步骤,它正常工作。
webdev5

2
在这种情况下,我想补充一点,在Linux OS上,我们只需要step2和step3即可达到相同的效果:)
Ajeet Shah 2016年

4

以下假设通过iTerm /终端通过命令行访问bitbucket。

对于MacOS Sierra 10.12.5,我的系统表现出一个等效的问题-在与bitbucket的每个连接上要求我提供SSH密码。

该问题与macOS 10.12.2中的OpenSSH更新有关,在技术说明TN2449中对此进行了描述。

您可能很想定制您的解决方案,但是将以下内容添加到您的〜/ .ssh / config文件中后,它们将起作用:

Host *
    UseKeychain yes

有关ssh config的更多信息,请查看ssh_config的手册页:

% man ssh_config

还有一两件事:有一个很好的写了关于超级用户 在这里,讨论这个问题,并根据您的需要和设置的各种解决方案。


2

我使用HTTPS URL而不是SSH URL克隆了存储库,因此即使添加了SSH密钥,它也在Bash Shell上要求我输入密码。

我只是编辑./.git/config文件并url通过简单地将替换为https://来更改变量的值ssh://

例如

[core]
        ...
        ...
        ...
[remote "origin"]
        url = https://<username>@bitbucket.org/<username>/<repository_name>.git
        fetch = +refs/heads/*:refs/remotes/origin/*
        ...
        ...
        ...

变成:

[core]
        ...
        ...
        ...
[remote "origin"]
        url = ssh://<username>@bitbucket.org/<username>/<repository_name>.git
        fetch = +refs/heads/*:refs/remotes/origin/*
        ...
        ...
        ...

1

您可能需要仔细检查SSH身份文件。您可能会引导BitBucket查看与保存在BitBucket上的等效公钥不同/不正确的私钥。

进行检查tail ~/.ssh/config-您将看到类似以下内容的内容:

Host bitbucket.org
 HostName bitbucket.org
 IdentityFile ~/.ssh/personal-bitbucket-ssh-key

请记住,可以使用以下ssh-add命令添加其他身份(例如工作和家庭),例如:

ssh-keygen -t rsa -C "companyName" -f "companyName"
ssh-add ~/.ssh/companyName

一旦确认在本地查看了哪个私钥,就可以使用您的公共等效物,在这种情况下:

cat ~/.ssh/personal-bitbucket-ssh-key.pub | pbcopy

并将该密码粘贴到BitBucket上。现在,您的git push(如果您使用的是上述答案指出的SSH克隆),则无需输入密码,因为您的设备是公认的友好设备。

希望这有助于为某人清除它。


0

和我一起,尽管我运行了'git clone ssh://git@stash.xxx.com:7999 / projName / projA.git',但仍会提示我输入我克隆的这个新存储库的密码,因此通过比较其.git / config文件到其他可以正常工作的仓库,原来是[remote“ origin”]部分下的url,它被设置为新仓库的ssh路径,但是被设置为https:xxx 。


0

我在登录时还有其他怪异之处。我遇到了似乎完全愚蠢但在我的情况下有效的东西。只需转到MacOS的钥匙串。在边栏中找到登录锁定图标。单击它注销,然后单击登录。听起来很蠢,但它解决了我的问题。值得一试。

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.