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

时间:2011-12-22 07:28:48

标签: git ssh bitbucket

我将~/.ssh/id_rsa.pub上传到Bitbucket's SSH keys explained,但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

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

16 个答案:

答案 0 :(得分:228)

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

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

答案 1 :(得分:28)

正如here所述,如果您使用 SSH url进行克隆,则每次推/拉时都需要输入用户名/密码。通过@manojlds

检查answer以上

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

{{1}}

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

答案 2 :(得分:17)

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

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

所以更改远程网址运行git remote set-url origin {ssh remote url address starts with mostly git@bitbucket.org:}

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

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

答案 3 :(得分:9)

在HTTP请求案例中,也可以将凭证(带密码)直接粘贴到网址中:

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

这样可以省去每次再次提供凭据的痛苦。简单修改你的.git / config(网址)。

答案 4 :(得分:8)

未来的Google员工。

在MacOS> = High Sierra上,SSH密钥不再保存到KeyChain because of reasons

使用ssh-add -K也不再能够重启。

以下是3 possible solutions

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

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

答案 5 :(得分:4)

答案 6 :(得分:4)

以下假设通过iTerm / Terminal对bitbucket进行命令行访问。

对于 MacOS Sierra 10.12.5,我的系统出现了一个等效的问题 - 在每个连接到bitbucket时要求我输入SSH密码。

该问题与macOS 10.12.2中的OpenSSH更新有关,这些更新在Technical Note TN2449中进行了描述。

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

Host *
    UseKeychain yes

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

% man ssh_config

另一件事:超级用户 here上有一篇很好的文章,会根据您的需求和设置讨论此问题和各种解决方案。

答案 7 :(得分:4)

这些答案都没有帮助我,事实证明我的问题略有不同。每次发送密码之前,都是ssh要求我输入密码。因此,我要做的就是使用以下命令链接密码:

ssh-add -K ~/.ssh/id_rsa

然后它将提示您输入密码并进行存储。如果每次提示您输入密码时提示

,这可能就是您正在寻找的解决方案
  

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

更多信息here

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

答案 8 :(得分: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/*
        ...
        ...
        ...

答案 9 :(得分: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推送现在(如果你正在使用SSH克隆,前面提到的答案已经指出)可以在没有密码的情况下被允许,因为你的设备是公认的友好。

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

答案 10 :(得分:0)

尽管我运行了'git clone ssh://git@stash.xxx.com:7999 / projName / projA.git' 仍然提示我克隆的这个新仓库的密码,因此通过将其.git / config文件与其他可以正常工作的仓库进行比较,结果发现它是[remote“ origin”]部分下的url,到上面用于新存储库的ssh路径,但已将其设置为https:xxx。

答案 11 :(得分:0)

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

答案 12 :(得分:0)

实际上,这些答案中的没有 使用Git反映了最新技术水平(撰写此答案时为 v2.29 )。在最新版本的Git中,不推荐使用cachewinstorewincred


如果您想通过HTTPS克隆Bitbucket存储库,例如

git clone https://Kutlime@bitbucket.org/SomeOrganization/SomeRepo.git

您必须:

  1. Bitbucket user administration处生成应用密码。
  2. 相应地(全局或本地)在.gitconfig中设置凭据方法
[credential]
    helper = manager

您可以通过执行以下命令找到您的.gitconfig

git config --list --show-origin
  1. 执行
git clone https://Kutlime@bitbucket.org/SomeOrganization/SomeRepo.git

,然后等待直到出现登录窗口。使用网址中的用户名(在我的情况下为 kutlime )和生成的应用程序密码作为密码。

答案 13 :(得分:0)

我使用用户名而不是电子邮件登录,它开始工作。

答案 14 :(得分:0)

如果您使用的是Ubuntu系统,请使用以下命令永久存储密码:

android.permissions.READ_LOGS

答案 15 :(得分:0)

如果您仍然收到 too many authentication failures 错误:

nano ~/.ssh/config

并粘贴:

Host bitbucket_james
    HostName bitbucket.org
    User james
    Port 22
    IdentitiesOnly=yes
    IdentityFile=~/.ssh/id_rsa_bitbucket_james

最重要的是 - 在设置远程 URL 时,您应该使用 bitbucket_james 别名而不是 bitbucket.org

git remote set-url origin git@bitbucket_james:repo_owner_user/repo_name.git