如何检查 RSA 公钥/私钥对是否匹配

如何检查 RSA 公钥/私钥对是否匹配

我有两个文件,id_rsaid_rsa.pub。可以使用什么命令来验证它们是否是有效的一对?

答案1

我更喜欢这种ssh-keygen -y -e -f <private key>方式,而不是接受的答案如何测试公钥/私钥 DSA 密钥对?在 Stack Overflow 上。

ssh-keygen -y -e -f <private key>获取私钥并打印相应的公钥,可将其直接与可用的公钥进行比较。(提示:注意注释或密钥选项。)

(它到底是怎么做到的?我只能希望公钥直接或间接地编码在私钥中......)

我自己也需要这个,并使用了以下 Bash 单行代码。如果键属于一起,它应该不会输出任何内容。-q在脚本中对 diff 稍加应用,diff 只会适当地设置返回代码。

PRIVKEY=id_rsa
TESTKEY=id_rsa.pub
diff <( ssh-keygen -y -e -f "$PRIVKEY" ) <( ssh-keygen -y -e -f "$TESTKEY" )

答案2

根据您获取正在测试的公钥文件的位置,接受的答案可能会产生假阳性结果。这是因为 @drewbenn 的评论中描述了这种行为。具体来说,当 -e 选项与私钥文件一起使用作为 -f 选项参数时,它只是重复(但重新格式化)关联的公钥文件中的内容。

换句话说,

ssh-keygen -y -f id_rsa

(显然)生成公钥值,以及

ssh-keygen -y -e -f id_rsa

简单地输出(并重新格式化)密钥现存的id_rsa.pub不管是什么

就我而言,我必须验证该对是否被损坏。因此,我决定比较以下内容:

ssh-keygen -y -f id_rsa | cut -d' ' -f 2

cut -d' ' -f 2 id_rsa.pub

所以:

diff <(cut -d' ' -f 2 id_rsa.pub) <(ssh-keygen -y -f id_rsa | cut -d' ' -f 2)

这可能不太灵活,但更符合我的需求。也许它能帮助别人。

答案3

最简单的方法是比较指纹,因为公钥和私钥是相同的。通过将两个命令放在同一行,视觉比较非常容易:

ssh-keygen -l -f PRIVATE_KEY; ssh-keygen -l -f PUBLIC_KEY

从编程上来说,你会想要忽略注释部分,因此

diff -s <(ssh-keygen -l -f PRIVATE_KEY | cut -d' ' -f2) <(ssh-keygen -l -f PUBLIC_KEY | cut -d' ' -f2)

答案4

这是一个非常古老的帖子,但我发现答案有点过度设计。所以我又创建了另一个 oneliner :)

[[ `ssh-keygen -yf /path/to/private_key_file` == `cat /path/to/public_key_file` ]] && echo "True" || echo "False"

由于这些评论,可能会出现一些极端情况,但对我来说效果很好,因为我从不弄乱它们。

希望能帮助到你。

PS:是的,请更改已接受的答案。误报可能会有问题。

相关内容