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

Nic*_*oul 171 git ssh bitbucket

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

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

git clone git@bitbucket.org:Nicolas_Raoul/therepo.git
Run Code Online (Sandbox Code Playgroud)

这是我当地的.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
Run Code Online (Sandbox Code Playgroud)

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

man*_*lds 247

你确定你使用ssh url克隆它吗?

原点的网址是url = https://Nicolas_Raoul@bitbucket.org/Nicolas_Raoul/therepo.git这样说的,如果它使用https,它会询问密码而不管你的ssh密钥.

  • 你是对的,谢谢!我最有可能克隆错误的URL.我用`git@bitbucket.org:Nicolas_Raoul/therepo.git`替换了`.git/config`中的URL,现在它可以工作了! (62认同)
  • 并使用git http://stackoverflow.com/questions/2432764/how-to-change-a-remote-repository-uri-using-git更改遥控器 (8认同)
  • 不得不将URL更改为`ssh:// git @bitbucket.org/userName/repoName.git` - 没有`ssh://`前缀它不起作用. (6认同)
  • 请记住,如果你的bitbucket是私有的,如果你想使用git协议,你需要在你的设置中添加ssh密钥到BitBuket的网站. (4认同)
  • 在创建存储库时,bitbucket建议我https url!怎么会! (3认同)

Aje*_*hah 32

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

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

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

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


shi*_*mar 19

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

git remote -v在项目目录中运行.如果输出显示https://abc从那时开始的远程URL,那么每次都可能需要用户名密码.

所以改变远程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/


Vin*_*Ram 18

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

git config --global credential.helper store
Run Code Online (Sandbox Code Playgroud)


Sve*_* W. 10

在HTTP请求的情况下,也可以将凭证(带密码)直接粘贴到URL中:

http://username:password@bitbucket.org/...
Run Code Online (Sandbox Code Playgroud)

这将节省痛苦,每次再次提供您的凭据.简单修改你的.git/config(url).

  • 但不安全.如果密码有一些像'$%`这样的字母,那就不行了 (7认同)
  • 任何阅读此评论的人,请记住:仅仅因为_works_,并不意味着_right_.如果你在任何地方永久地复制你的密码,那么你做错了.与始终将文件夹权限设置为"777"的人相同:停止,思考,研究,理解,然后正确地执行. (2认同)

Vai*_*den 9

你好未来的Google员工.

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

使用ssh-add -K不再存在重启.

这是3种可能的解决方案.

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

Host *
  AddKeysToAgent yes
  UseKeychain yes
  IdentityFile ~/.ssh/id_rsa
Run Code Online (Sandbox Code Playgroud)

  • 这个需要多加注意!我花了很长时间寻找解决方案,第一个在“/.ssh”中使用“config”文件的解决方案非常完美! (2认同)

sta*_*her 6

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

ssh-add -K ~/.ssh/id_rsa
Run Code Online (Sandbox Code Playgroud)

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

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

更多信息在这里

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


web*_*ev5 5

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