如何将ed25519私钥转换为putty ppk?

时间:2018-03-03 11:37:48

标签: putty openssh ed25519

我想将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容器上)

  • 测试过的putty版本: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。在Windows上运行puttygen.exe并尝试导入ed25519私钥(.ssh/id_ed25519

  

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

8 个答案:

答案 0 :(得分:11)

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

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

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。

答案 1 :(得分:7)

更新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 importing an ed25519 key successfully

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

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

答案 2 :(得分:5)

在将密钥导入puttygen

之前,您需要将密钥导出为RFC4716格式
$ ssh-keygen -e -m RFC4716 -f ~/.ssh/id_ed25519 > ~/.ssh/exported_id_ed25519

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

答案 3 :(得分:4)

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

  

-o使ssh-keygen使用新的OpenSSH格式保存私钥,而不是                比更兼容的PEM格式。新格式增加了抵抗力                暴力破解密码,但OpenSSH版本不支持                6.5之前的版本。 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中没有选择腻子的方法。

经过一番挣扎之后,现在我只使用用腻子制成的钥匙,但我担心我不能从KDF中受益。

答案 4 :(得分:1)

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

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

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

认为这可能对落入我刚才做的相同陷阱的人有用。

答案 5 :(得分:0)

我认为

putkey密钥生成器具有这种能力。

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

那我想你很好走

答案 6 :(得分:0)

尽管有一个可接受的答案,但是可以将已经生成的私钥(id_rsa)转换为腻子格式的方法:

  1. 使用以下命令:ssh-keygen -p -P "<old pass phrase>" -N "<new pass phrase>" -m PEM -f id_rsa将密钥转换为腻子可接受的格式
  2. 打开PuttyGen,然后从顶部菜单中选择“转换”,然后选择“导入密钥”(系统会提示您输入密码,如果您提供了密钥生成密码,请输入密码,然后单击“确定”)。
  3. 最后单击“保存私钥”,一切就好了!

答案 7 :(得分:-1)

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

ssh-keygen -b 4096