Pageant 不加载使用 GitBash 生成的 SSH-2 密钥

问题描述 投票:0回答:5

使用 (Tortoise)Git for Windows 进行密钥处理的实现让我感到困惑。据我所知,您可以使用

ssh.exe
(gits 自己的 ssh 程序)来实现,然后您可以在“伪造”主目录中的
ssh_config
中为每个主机选择一个 ssh 密钥。对我来说,这并不适用,因为我有多个使用不同密钥但主机相同的 Bitbucket 帐户。

然后就有了使用方法

TortoiseGitPlink
。您基本上使用腻子生成的密钥设置选美并让 TortoiseGit 使用该密钥 - 环境变量
SSH_GIT
设置为您的 TortoiseGitPlink.exe)。

现在我的问题如下:我刚刚在 GitBash 中使用

ssh-keygen -t rsa -f ~/.ssh/rsa_key
命令创建了一个带有默认选项的 ssh2 rsa 密钥。我尝试使用其 GUI 将此文件加载到
pageant.exe
中。我得到了错误:
Couldn't load this key (OpenSSH-SSH-2 private key)

这把钥匙有什么问题?在 GitBash 中制作,它应该遵守所有标准的 openSSH 准则。 PuTTY 密钥和 openSSH 密钥存在差异是否正确?

git-bash private-key openssh plink pageant
5个回答
124
投票

Pageant 只能加载 PuTTY 格式的密钥 (

.ppk
)。

如果您尝试加载不同格式的密钥,PuTTY 工具仍可识别,您会收到上述错误消息:

无法加载此密钥(OpenSSH-SSH-2 私钥)

您需要使用PuTTYgen 将密钥 从OpenSSH 格式转换为PuTTY 格式。如果 Pageant 识别文件格式,PuTTYgen 可以转换它。

  • 运行 PuTTYgen;
  • Load加载OpenSSH格式的私钥;
  • 保存私钥
    .ppk
    格式保存私钥;
  • 现在您可以将
    .ppk
    格式的私钥加载到Pageant。

或者更简单,使用 PuTTYgen 直接以 PuTTY 格式创建密钥,而不是使用

ssh-keygen
.


查看 PuTTY 愿望清单,因为它有自己的密钥格式:
https://www.chiark.greenend.org.uk/~sgtatham/putty/wishlist/key-formats.html

请注意,我相信 SSH-2 私钥文件格式没有标准。


44
投票

PuTTY 不理解 id_rsa 私钥,如果显示此错误:

您需要将私钥转换为.ppk(私钥格式)。

  1. 打开 PuTTY 密钥生成器(开始-> 搜索“puttygen”)
  2. 您需要导入 RSA 私钥。为此,请打开“转换”菜单 >“导入密钥”。
  3. 选择要转换的RSA私钥。
  4. 点击“保存私钥”。请注意,您还可以将其保存为其他格式。
  5. 然后另存为'id_rsa.ppk'
  6. Open Pageant - PuTTY 身份验证代理(如果尚未打开)
  7. 点击“添加密钥”
  8. 选择您转换后的私钥。
  9. 如您所见,PuTTY 现在可以在“Pageant Key List”中识别它。

1
投票

我现在还有问题。 变量 SSH_GIT 被设置为 TortoiseGitPlink.exe。 我用 git bash 做了一个密钥对

ssh-keygen -o

我用 PUTTYGen 加载了密钥并将其转换为 *ppk 版本。将密钥保存在 tortioseGit 设置中并将公钥保存到我的 github 帐户,但我仍然收到输入我的凭据的请求,之后我的推送被拒绝。 有趣的是,在我的笔记本电脑上它可以工作。我很确定我在笔记本电脑上做了所有事情。


0
投票

这是因为 AutoLoad Putty Key 复选框在 TortoiseGit->Pull... 弹出窗口中被选中(应该保持选中状态)。但是在对应路径下找不到putty私钥。可能是由于文件以某种方式被删除或移动到其他位置。

解决方案是设置 putty 私钥的正确位置或删除现有的私钥路径。为此,请单击上面的“管理遥控器”链接。这将在弹出窗口后打开。一步一步来。设置新路径或正确路径后,单击“应用”,然后单击“确定”。


-1
投票

如果您收到错误消息,无法加载私钥(无法识别的密码名称),您需要先从私钥中删除密码,然后才能进行转换。

有人写了一篇文章描述如何做到这一点here.

© www.soinside.com 2019 - 2024. All rights reserved.