【问题标题】:Git on Bitbucket: Always asked for password, even after uploading my public SSH keyBitbucket 上的 Git:即使在上传了我的公共 SSH 密钥之后,也总是要求输入密码
【发布时间】:2012-01-25 21:42:13
【问题描述】:

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

【问题讨论】:

    标签: git ssh bitbucket


    【解决方案1】:

    你确定是用 ssh url 克隆的吗?

    origin 的 url 是 url = https://Nicolas_Raoul@bitbucket.org/Nicolas_Raoul/therepo.git,所以如果它使用 https,它会要求输入密码,而不管你的 ssh 密钥如何。

    所以你想要做的是:

    在你当前的仓库中打开你的配置文件..

    vim .git/config

    并使用来自

    的url更改行
    [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
    

    【讨论】:

    • 你是对的,谢谢!我很可能使用错误的 URL 进行了克隆。我用git@bitbucket.org:Nicolas_Raoul/therepo.git 替换了.git/config 中的URL,现在它可以工作了!
    • 并使用 git stackoverflow.com/questions/2432764/… 更改遥控器
    • 是bitbucket在创建仓库的时候给我推荐了https url!怎么会!
    • 请记住,如果您的 bitbucket 是私有的,如果您想使用 git 协议,则需要在您的设置中将您的 ssh 密钥添加到 BitBuket 的网站。
    • 不得不将 URL 更改为 ssh://git@bitbucket.org/userName/repoName.git — 没有 ssh:// 前缀它不起作用。
    【解决方案2】:

    正如here 解释的那样,如果您使用SSH url 进行克隆,则不需要 每次推送/拉取时都需要输入用户名/密码。检查以上answer@manojlds

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

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

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

    【讨论】:

    • @atilkan 在那种情况下,你能提供你的机器/操作系统和 git 版本信息吗?以及尝试设置缓存设置时出现的错误消息。
    • 我从 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)
    • @AjeetShah 如果我输入了错误的密码怎么办?它还会缓存错误的密码吗?
    • @anaval 为什么不尝试一下,然后在清除或禁用缓存后尝试输入正确的密码?编辑答案,让我们知道你是怎么做到的:)
    【解决方案3】:

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

    在项目目录中运行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/

    【讨论】:

      【解决方案4】:

      未来的 Google 员工您好。

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

      使用ssh-add -K 也无法在重新启动后继续存在。

      这里是3 possible solutions

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

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

      【讨论】:

      • 这需要多加注意!我花了很长时间寻找解决方案,而第一个使用 /.ssh 中的 config 文件的解决方案非常完美!
      • 这个答案解决了我在 MacOs 上的问题:cd ~/.ssh + ls + nano config(文件已经创建)+ 在 Vaiden 的答案中添加代码。然后控制 X + Y 保存文件。
      【解决方案5】:

      这些答案都没有帮助我,结果我的问题略有不同。在发送密钥之前,每次都是 ssh 询问我的密码。所以我要做的就是用这个命令链接我的密码:

      ssh-add -K ~/.ssh/id_rsa
      

      然后它会提示您输入密码并存储它。如果您每次提示输入密码时都显示

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

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

      更多信息here

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

      【讨论】:

      • 很好,不过应该是小写的k:ssh-add -k ~/.ssh/id_rsa
      • 您能详细说明一下吗?
      • 正如这里解释的:ssh.com/ssh/add,命令行选项是小写的k,而不是大写,因为这些选项区分大小写。
      • 对,但是大写的 K 选项也会将密钥添加到钥匙串中,而小写的 k 只会将密钥添加到代理。所以我要问的是“你为什么不希望将钥匙也添加到你的钥匙串中?”
      • 请注意平台差异,-K 专用于 Mac:help.github.com/en/articles/error-ssh-add-illegal-option----k
      【解决方案6】:

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

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

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

      【讨论】:

      • 但不安全。如果密码中包含$% 之类的字母,则无法使用
      • 任何阅读此评论的人,请记住:仅仅因为它有效,并不意味着它是正确。如果您将密码永久复制到任何地方,那么您做错了。与那些总是将文件夹权限设置为777 的人一样:停下来思考、研究、理解,然后正确地去做。
      【解决方案7】:

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

      git config --global credential.helper store
      

      【讨论】:

      • 谢谢大佬,解决了我的问题。
      【解决方案8】:

      【讨论】:

      • 我认为Step 1 是为WindowsStep 2 是为Linux 但你忘了正确提及它。
      • 我在我的 Windows 机器上运行了这 3 个步骤,并且成功了。
      • 这样的话,我想在Linux操作系统上加上,我们只需要step2和step3就可以达到同样的效果:)
      【解决方案9】:

      以下假设通过 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
      

      另一件事:superuser here 上有一篇很好的文章,讨论了这个问题以及根据您的需要和设置提供的各种解决方案。

      【讨论】:

        【解决方案10】:

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

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

        例如

        [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/*
                ...
                ...
                ...
        

        【讨论】:

          【解决方案11】:

          实际上,这些答案没有一个反映了 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
          

          然后等到登录窗口出现。使用来自 url 的用户名(在我的例子中是 kutlime)和你生成的应用密码作为密码。

          【讨论】:

            【解决方案12】:

            您可能需要仔细检查您的 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 克隆)无需密码,因为您的设备是公认的友好设备。

            希望这有助于为某人解决问题。

            【讨论】:

              【解决方案13】:

              如果您仍然收到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
              

              【讨论】:

                【解决方案14】:

                和我一起,虽然我跑了 'git clone ssh://git@stash.xxx.com:7999/projName/projA.git' 我仍然被提示输入我克隆的这个新存储库的密码,因此通过将其 .git/config 文件与其他有效的存储库进行比较,结果证明它是 [remote "origin"] 部分下的 url,它被设置了到新 repo 的 ssh 路径,但设置为 https:xxx 用于工作。

                【讨论】:

                  【解决方案15】:

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

                  【讨论】:

                    【解决方案16】:

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

                    【讨论】:

                      猜你喜欢
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 2014-12-11
                      • 2021-11-24
                      • 1970-01-01
                      • 1970-01-01
                      • 2019-10-04
                      相关资源
                      最近更新 更多