首页 > 解决方案 > ssh-keygen 忽略 -t 参数

问题描述

我正在尝试使用以下命令生成一个新的密钥对

ssh-keygen -t rsa -f id_rsa

根据手册页,-t参数应指示密钥的格式:

ssh-keygen [-q] [-b bits] [-t dsa | ecdsa | ed25519 | rsa] [-N new_passphrase] [-C comment] [-f output_keyfile]
[...]
The type of key to be generated is specified with the -t option.  If invoked without any arguments, ssh-keygen will generate
     an RSA key.
[...]
-t dsa | ecdsa | ed25519 | rsa
     Specifies the type of key to create.  The possible values are “dsa”, “ecdsa”, “ed25519”, or “rsa”

但是,该命令仍会输出具有较新ed25519格式的密钥:

$ head id_rsa
-----BEGIN OPENSSH PRIVATE KEY-----
[...]

如何生成正确的 RSA 类型密钥?

标签: ssh-keygen

解决方案


Meta:这不是一个编程问题或问题,可能属于不同的堆栈,但我不确定是哪个,所以我会把它留给任何想要建议移动的人。

-t选择key的类型(又名算法),不一定是存储它的文件的格式(除了与 SSH1 格式相关的长期过时和现已删除的类型rsa1)。您可能有 7.8,默认情况下所有类型都使用“新”文件格式,而在此之前,它仅适用于 ed25519。新文件格式确实(并且已经)支持所有类型,但在旧版本中,仅当您指定-o. 请参阅描述如何返回“旧版”格式的发行说明ssh-keygen,或-m.

注意 OpenSSH 新格式使用比 OpenSSL 的旧 PEM 格式(以前的默认格式)更好的 PBE(基于密码的加密)方案。OpenSSH 还能够读取(虽然不能创建)PKCS8 加密的 PEM 格式,您可以使用 OpenSSL(ed25519 除外)创建或转换该格式,并且比 OpenSSH 新格式更好,但仍然不如 OpenSSH 新格式。(警告:ssh-keygen -m PKCS8用词不当,实际上使用 X.509/PKIX SPKI 格式而不是 PKCS8,这可能会造成混淆。)如果您对这些密钥文件的安全性感兴趣,我将挖掘一些现有的 Q话题; 我敢肯定我至少见过十几个。


推荐阅读