乌龟Git使用了错误的SSH密钥。

25
我目前在使用Tortoise Git时遇到了一个奇怪的问题,我无法解决。当试图提交我的存储库到 Github 时,我会收到以下错误:

ERROR: Permission to martindevans/Hermes.git denied to key2

Key2 是我用来访问另一个 Github 存储库的密钥,但是远程 URL 并没有设置为使用 Key2,正如您在此处看到的,它被设置为使用 private.ppk。

输入图片说明

我是否做错了什么,或者 Tortoise Git 出现了问题?

Nb. 回答评论时,使用普通的 git 结果为:

C:\Users\Martin\Documents\Visual Studio 2010\Projects\Hermes>git push
Permission denied (publickey).
fatal: The remote end hung up unexpectedly

如果您使用普通的Git而不是Tortoise,它是否能正常工作? - Greg Hewgill
1
非常好的问题!既然你有了很多票数的答案,你会考虑将其标记为正确答案吗? - Ian R. O'Brien
5个回答

39
有不同的私钥格式。我的密钥对是由puttygen生成的,但我的Tortoise被配置为使用ssh.exe(来自msysgit)作为ssh客户端。所以我把它改成了Tortoise中的plink,然后它就正常工作了。
  • ssh-key.exe => ssh.exe(C:\ msysgit \ msysgit \ bin)
  • puttygen.exe => TortoisePlink.exe(C:\ Program Files \ TortoiseGit \ bin)

附加说明:使用正确的URL!Github提供了三个URL https、git和ssh。


编辑:

我在这里调整了设置

Settings - TortoiseGit >> Network >> SSH-Client
C:\Program Files\TortoiseGit\bin\TortoisePLink.exe

我已经用以下方式生成了密钥对

 C:\Program Files\TortoiseGit\bin\puttygen.exe

如果您想使用OpenSSH密钥,那么需要做哪些更改?您使用msysgit ssh,将ssh密钥放在哪里?在“设置->远程”中只提到了putty密钥! - Dheeraj Bhaskar
“附注:使用正确的URL!”对我很有帮助。非常感谢! - Olaf
非常好的答案 - 解决了我4个小时一直在尝试的问题。 - Farhan
请注意,在 Windows 上使用 Git 的正常路径为 C:\ Program Files(x86)\ Git \ bin,而不是 C:\ msysgit \ msysgit \ bin。 Git for Windows 取代了 msysgit。 - crimbo
2
附加说明:请使用正确的URL!Github为您提供了三个URL选项,分别是https、git和ssh。 已切换至HTTPS。 - Nathan Zaetta
显示剩余2条评论

14

Hah! ProcMon 来拯救了。这是 tortoisegit / tortoiseplink 的一个错误。它应该优先使用通过 pageant 为远程主机设置的密钥集,但它实际上优先使用 putty 存储在注册表中的密钥。有两种修复方法。

这里有两个解决方案:

1. 你的 tortoiseplink 集成了 putty,并且它会读取你在与那个服务器关联的 putty "会话" 中保存的私钥。至少在我的情况下是这样的。我不在 github 上,所以我不知道这个解决方案对于每个人来说是否可行。

我建议手动删除 putty 会话配置中的密钥集,并在 putty 会话中使用 pagaent,因为这就是 tortoise git 所做的。这也使 tortoisegit 使用远程的密钥集。

  1. 因此,你可以打开 putty,加载与服务器关联的任何会话,进入 Connection/SSH/Auth 并修改 / 删除 "Private key file for authentication" 值。修改可能会修复这个 repo,但如果你对同一服务器使用不同的密钥,则可能会破坏另一个 repo。

  2. 你也可以自己修改 / 删除注册表项。它是 HKEY_CURRENT_USER\Software\SimonTatham\PuTTY\Sessions\$SERVERNAME$\PublicKeyFile


1
TortoiseGit的错误报告:http://code.google.com/p/tortoisegit/issues/detail?id=1347 - scaryman
1
我错过了一个 $SERVERNAME 会话密钥,名为 Default%20Settings,其中还包含一个 PublicKeyFile。 - icc97
谢谢!在我的情况下,这是因为我在Putty的“默认设置”中的“数据”部分更改了“私钥文件”和“自动登录用户名”。当我恢复这些更改后,TortoiseGit又可以正常工作了。 - endo64
我在PuTTY的默认设置下的Connection -> SSH -> Auth中设置了私钥,结果导致命令行git和TortoiseGit都无法正常工作。但是奇怪的是,当我手动使用-i选项指定密钥时,PLink可以正常工作。 - Adam Haun

2

我在设置TortoiseGit访问Bitbucket(Win10)时遇到了同样的问题。 要解决此问题,我必须删除注册表中 HKEY_CURRENT_USER\Software\SimonTatham\PuTTY\SshHostKeys 中旧的主机密钥(不是(默认)键,但要保留HTML标签)。


1
在 Git Bash 中创建密钥:
ssh-keygen -t rsa

将所有内容留空,不设置密码。将~/.ssh/id_rsa.pub的内容粘贴到github提供的公钥空间中。

现在通过ssh连接到github进行测试。如果成功,您将能够使用git。

希望这对您有所帮助。


创建一个新的密钥可能会暂时解决问题,但我怀疑它不能长期解决问题。一直到今天为止,我的电脑都能正常连接到Github,但现在似乎选择了错误的密钥。 - Martin
我的Git版本甚至无法加载以这种方式生成的密钥。我使用putty生成的密钥可以加载,但使用gitbash创建的密钥在尝试推送到存储库时会出现错误:“无法加载密钥文件”。 - atripes

0

我在将代码推送到GitHub时,遇到了这个随机出现的错误。我尝试了这里列出的所有方法,但都没有成功解决。我的密钥仍然正常 - 我仍然可以通过ssh -vT git@github.com连接,并且可以通过Git Bash进行推送/拉取。

我甚至复现了TortoiseGit与新密钥配合工作,然后切换回旧密钥并失败,然后再切换回新密钥并失败。所以这似乎是TortoiseGit与PuTTY集成的一个bug,尽管不是@scaryman在上面评论中提到的那个bug。

最后,以下方法起作用:

  1. 升级到最新版本的PuTTY和TortoiseGit
  2. 使用Puttygen创建一个新的PPK,并将公钥添加到GitHub
  3. 使用新的PPK从TortoiseGit进行拉取
  4. 打开Pageant并删除旧的SSH密钥,使新密钥成为唯一列出的密钥。
  5. 删除旧的PPK并从Github中删除其公钥。这将导致使用旧PPK的所有存储库在第一次连接到GitHub时出错,然后它们会自动切换到您的新PPK。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接