我想将ed25519私钥(由ssh-keygen
命令生成)转换为ppk文件。但我得到了错误。
无法加载私钥(无法识别的密码名称)
有人可以帮助我吗?
测试了openssh版本:OpenSSH_7.6p1, OpenSSL 1.1.0g 2 Nov 2017
和OpenSSH_7.6p1, OpenSSL 1.0.2n 7 Dec 2017
(在CoreOS和ArchLinux docker容器上)
测试过的putty版本:0.70 64bit
,0.70 32bit
和snapshot
(在Windows 10上)
我的程序如下。
# 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
puttygen.exe
并尝试导入ed25519私钥(.ssh/id_ed25519
)无法加载私钥(无法识别的密码名称)
答案 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支持这些键
在撰写本文时,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密钥生成器具有这种能力。
那我想你很好走
答案 6 :(得分:0)
尽管有一个可接受的答案,但是可以将已经生成的私钥(id_rsa)转换为腻子格式的方法:
ssh-keygen -p -P "<old pass phrase>" -N "<new pass phrase>" -m PEM -f id_rsa
将密钥转换为腻子可接受的格式答案 7 :(得分:-1)
最近部署Debian系统并更新0.70至0.72的腻子应用程序时,我遇到了相同的问题,从而解决了该问题。 私钥是在我的Debian系统中使用以下命令生成的,然后转移到Windows PC。
ssh-keygen -b 4096