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

Posted

技术标签:

【中文标题】Bitbucket 上的 Git:即使在上传了我的公共 SSH 密钥之后,也总是要求输入密码【英文标题】:Git on Bitbucket: Always asked for password, even after uploading my public SSH key 【发布时间】: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--

【问题讨论】:

【参考方案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 ***.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】:

第 1 步:安装 git-credential-winstorehttps://confluence.atlassian.com/bitbucketserver/permanently-authenticating-with-git-repositories-776639846.html

第 2 步:git config --global credential.helper 'cache --timeout 3600' 这会将您的密码存储 1 小时

第 3 步:运行 git 命令 这将提示您输入密码并且凭据将提示 并存储您的密码

【讨论】:

我认为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

你必须:

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

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

git config --list --show-origin
    执行
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】:

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

【讨论】:

以上是关于Bitbucket 上的 Git:即使在上传了我的公共 SSH 密钥之后,也总是要求输入密码的主要内容,如果未能解决你的问题,请参考以下文章

无法推送到 Bitbucket 上的 Git 存储库

无法推送到 Bitbucket 上的 Git 存储库

为啥 git 会将分支合并到自身中?

git上传 bitbucket

如何在 TFS 上移植 git 更改?

是否可以使用Git扩展或Git GUI来管理远程linux ftp服务器上的文件,如本地存储库