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 可以正常工作。.ssh
是 rwx------
,.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
是为Windows
而Step 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 中,cache
、winstore
、wincred
已弃用。
如果您想通过 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 密钥之后,也总是要求输入密码的主要内容,如果未能解决你的问题,请参考以下文章