30

我想将 ed25519 私钥(由ssh-keygen命令生成)转换为 ppk 文件。但我得到了错误。

无法加载私钥(无法识别的密码名称)

有人能帮我吗?

  • 测试 openssh 版本:OpenSSH_7.6p1, OpenSSL 1.1.0g 2 Nov 2017OpenSSH_7.6p1, OpenSSL 1.0.2n 7 Dec 2017(在 CoreOS 和 ArchLinux docker 容器上)

  • 测试腻子版本:0.70 64bit0.70 32bitsnapshot在 Windows 10 上)

我的程序如下。

1.生成ed25519私钥

# ssh-keygen -t ed25519 -a 100
Generating public/private ed25519 key pair.
Enter file in which to save the key (/root/.ssh/id_ed25519):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_ed25519.
Your public key has been saved in /root/.ssh/id_ed25519.pub.
The key fingerprint is:
SHA256:2HfORujStwmC9c91rmDxMbaV9kVMT70gWxnRXAvNrNU root@f46f23bbad55
The key's randomart image is:
+--[ED25519 256]--+
|             +X B|
|           . +.@E|
|            + +.=|
|       o   o . o.|
|      . S o + +oo|
|       o = = +.=o|
|      . o = B + o|
|         o B = o |
|            = ...|
+----[SHA256]-----+

# cat .ssh/id_ed25519
-----BEGIN OPENSSH PRIVATE KEY-----
b3BlbnNzaC1rZXktdjEAAAAACmFlczI1Ni1jdHIAAAAGYmNyeXB0AAAAGAAAABClhk1367
G8CQYpo/0c7UShAAAAZAAAAAEAAAAzAAAAC3NzaC1lZDI1NTE5AAAAIIJiwIymcly4s66p
za/IL3ZNyT5CiMPj0R+/LnMDmABUAAAAoMJIakdbIL7TOAmX8n4xGSrtp8mc/Mr6qimZAZ
zGB7iRhNUXT+isPdf0YuC9mh5NbX43ZYFl+/sWdi2hVmJxbGTwrjaSdNzF3ZnSpi/aVlzF
t3bUCtdwhHLaLqy9unw0zPHlfcQsB700GS/bf4VKRmm1+imj3cAldUm2RF3VdI0U9/04yX
Mj+VBOmevM0i7R/0d6xUFTH3zj99xxeLI2J6A=
-----END OPENSSH PRIVATE KEY-----

# cat .ssh/id_ed25519.pub
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIIJiwIymcly4s66pza/IL3ZNyT5CiMPj0R+/LnMDmABU root@f46f23bbad55

2.puttygen.exe在windows上运行,尝试导入ed25519私钥(.ssh/id_ed25519

无法加载私钥(无法识别的密码名称)

4

8 回答 8

20

2019-03-20 更新: https ://www.chiark.greenend.org.uk/~sgtatham/putty/releases/0.71.html支持这些键

ssh-keygen -t ed25519 -f test-key-for-stackoverflow

puttygen 0.71 成功导入 ed25519 密钥

在撰写本文时,来自https://www.chiark.greenend.org.uk/~sgtatham/putty/snapshot.html的 puttygen 快照似乎支持 0.70 不支持的这些键。更改日志中没有明确提及。

我测试过Development snapshot 2019-01-17.53747ad

于 2019-01-17T06:06:49.843 回答
18

上述答案中的命令只是以 RFC4716 格式打印公钥部分。

在某些时候,ssh-keygen 会生成不使用 puttygen 支持的密码的 openssh 私钥。

ssh-keygen 不提供选项来指定密码名称来加密生成的 openssh 私钥。

有一个解决方法:在导入 puttygen 之前从密钥中删除密码。

$ cp ~/.ssh/id_ed25519 ~/.ssh/id_ed25519-for-putty

$ ssh-keygen -p -f ~/.ssh/id_ed25519-for-putty
Enter old passphrase: <your passphrase>
Enter new passphrase (empty for no passphrase): <press Enter>
Enter same passphrase again: <press Enter>

然后,使用 puttygen 将 ~/.ssh/id_ed25519-for-putty 转换为 .ppk 并从 puttygen 设置密码。

出于明显的原因,不要忘记在之后切碎并删除 ~/.ssh_id_ed25519-for-putty。

于 2018-04-17T02:59:06.697 回答
8

在将密钥导入 puttygen 之前,您需要将密钥导出为 RFC4716 格式

$ ssh-keygen -e -m RFC4716 -f ~/.ssh/id_ed25519 > ~/.ssh/exported_id_ed25519

然后,将生成的exported_id_ed25519 导入puttygen 并将密钥转换为.ppk

于 2018-04-16T02:58:35.893 回答
5

实际上这个问题并不涉及 Ed25519 本身。由于新的 openssh 格式,它确实发生了。以下是man ssh-keygen有关 -o 选项的说明。

-o 使 ssh-keygen 使用新的 OpenSSH 格式而不是更兼容的 PEM 格式保存私钥。新格式增强了对暴力破解密码的抵抗力,但不支持 6.5 之前的 OpenSSH 版本。Ed25519 密钥始终使用新的私钥格式。

新格式使用密钥派生函数(KDF)对私钥文件加密几次(通常约为 100 次),使解密速度变慢。可以在此链接中开始使用 bcrypt KDF 搜索有关新格式的更多详细信息:https ://pthree.org/2014/12/08/super-size-the-strength-of-your-openssh-private-keys/

您可以尝试使用带有 -o 选项的 ssh-keygen 来选择 rsa 或 dsa 类型的私钥,然后看到 puttygen 也无法解析这些。正如您在手册页中看到的那样,在 Ed25519 中您别无选择 puttygen。

经过一番挣扎,现在我只使用用 puttygen 制作的密钥,但恐怕我无法从 KDF 中受益。

于 2018-08-20T14:08:26.540 回答
1

我只是偶然发现了同样的问题。私钥绝对有效,但 PuTTYGen 拒绝接受“无法加载私钥(不是可识别的密钥格式) ”。

一段时间后,我意识到这是因为我将它从 Linux 终端复制粘贴到了 Windows 控制台。生成的私钥看起来完全相同,但长度不同——显然是因为 Linux 和 Windows 中的换行符不同。

当我通过网络将私钥复制为文件时,PuTTYGen 欣然接受。

认为这可能对落入我刚刚做过的同一个陷阱的人有用。

于 2021-01-10T01:22:16.817 回答
0

最近部署 Debian 系统并将我的腻子应用程序从 0.70 更新到 0.72 时,我遇到了同样的问题,解决了这个问题。私钥是在我的 Debian 系统中使用以下命令生成的,然后传输到我的 Windows PC。

ssh-keygen -b 4096

于 2019-07-30T00:56:48.410 回答
0

我认为腻子密钥生成器具有这种能力。

  1. 从菜单栏中选择转换 -> 导入密钥。
  2. 将您的 ed25519 密钥导入其中。
  3. 保存带有 ppk 扩展名的私钥。

那你就可以走了,我想

于 2020-10-15T17:56:09.203 回答
0

虽然有一个公认的答案,但将已生成的私钥(id_rsa)转换为 putty 格式的方法:

  1. 使用此命令:ssh-keygen -p -P "<old pass phrase>" -N "<new pass phrase>" -m PEM -f id_rsa将密钥转换为腻子可接受的格式
  2. 打开 PuttyGen 并从顶部菜单中选择转换,然后选择导入密钥(此处将提示您输入密码,如果您在密钥生成中提供了密码,请输入并单击确定)
  3. 最后点击保存私钥,一切顺利!
于 2020-10-29T12:30:50.357 回答