如何将ppk转换为使用密码加密的openSSH私钥


4

当我在PuttyGen中导出我的私钥时,我认为我设置的密码也用在openSSH版本上。我发现我输入的密码不起作用。使用密码短语以openSSH格式导出私钥的正确方法是什么?

要将导出的ssh密钥传输到linux,我只需将其粘贴到nano中,然后尝试ssh-add。它提示我输入密码,但不接受我给它的密码。 PuttyGen用这个密码来进口它很好..


尝试正确使用术语“密码”和“密码短语”来重新解释您的问题。你似乎错了另一个,让你的问题难以理解。
Martin Prikryl

Answers:


1

Windows PuTTYgen的“导出OpenSSH密钥” 使用3DES-CBC加密密钥。如果密码短语非空,则输出文件如下所示:

-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: DES-EDE3-CBC,157A04D5AE43F45B

NiGUXnTOhATzg4dGvyXs8rzetF7KpplJJIKrZvQunXuVcZhVS+NTpnTgwJb+zOCm
...

在过去的4年中,我已经在各种版本上对此进行了测试。如果密码是空的,我甚至会得到“你确定吗?”提示。

Linux puttygen 转换时也总是使用相同的密码。


对于RSA& DSA密钥,OpenSSH使用与OpenSSL相同的“原始”密钥格式。所以如果3DES-CBC还不够,你可以使用 openssl 命令行工具重新加密它们:

openssl rsa -aes-128-cbc < old.key > new.key

在Unix当然是OpenSSH自己的 ssh-keygen 更好:

ssh-keygen -p -f old.key

所以奇怪的是,如果我导出密钥,将其复制到centos机器,然后执行ssh-add,它会要求输入密码,当我将密码输入时,它会告诉我它不正确。如果我在提示我时按Enter键,它会退出而不发表评论 - 我正在考虑无密码输入。我可以通过ssh-add -l看到没有加载任何键。那么为什么我的密钥密码不起作用?
B T

在“开始/结束RSA私钥”部分之前或之后,空格是否重要?我创建密钥的方式就是将其粘贴到nano中。
B T

@BT:是的;你可以在整个键周围有空行和东西,但不能在键内。
grawity

嗯,这就是我的想法。很奇怪..
B T

@BT特别是dash-BEGIN到dash-END块中的所有换行符必须保持不变,包括DEK-Info和第一个base64之间的一个空行。是否 openssl rsa <key 给出任何不同/更好的错误信息?你的密码是完全ASCII可打印的字符吗? (其他可能会有不同的工作,具体取决于Windows区域设置和Linux区域设置。)
dave_thompson_085
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.