Ryan Asked: 2012-09-12 08:24:06 +0800 CST2012-09-12 08:24:06 +0800 CST 2012-09-12 08:24:06 +0800 CST 如何检查 RSA 公钥/私钥对是否匹配 772 我有两个文件,id_rsa和id_rsa.pub. 可以使用什么命令来验证它们是否是有效对? linux 4 个回答 Voted Best Answer Michuelnik 2012-09-12T09:58:04+08:002012-09-12T09:58:04+08:00 我更喜欢这种方式,而不是How do you test a public/private DSA keypair?ssh-keygen -y -e -f <private key>的公认答案?在堆栈溢出上。 ssh-keygen -y -e -f <private key>获取私钥并打印相应的公钥,该公钥可以直接与您可用的公钥进行比较。(提示:注意注释或关键选项。) (这到底是怎么做到的?我只能希望公钥直接或间接编码在私钥中......) 我自己需要这个并使用了以下 Bash 单行代码。如果键属于一起,它应该不输出任何内容。对脚本中的差异应用一点-q,差异只会适当地设置返回码。 PRIVKEY=id_rsa TESTKEY=id_rsa.pub diff <( ssh-keygen -y -e -f "$PRIVKEY" ) <( ssh-keygen -y -e -f "$TESTKEY" ) twildfarmer 2016-04-02T16:04:30+08:002016-04-02T16:04:30+08:00 根据您从哪里获得您正在测试的公钥文件,接受的答案可能会给出误报结果。这是因为@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) 也许这不是那么灵活,但它更适合我的需要。也许它可以帮助别人。 Oliver 2021-05-07T10:00:25+08:002021-05-07T10:00:25+08:00 最简单的方法是比较指纹,因为公钥和私钥相同。通过将两个命令放在同一行,视觉比较非常容易: 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) Michael Hampton 2012-09-12T08:26:56+08:002012-09-12T08:26:56+08:00 如果它们在您的本地系统上,请坚持使用您id_rsa.pub的密钥。如果有效,则它们匹配。$HOME/.ssh/authorized_keyssshlocalhostid_rsa cat $HOME/.ssh/id_rsa.pub >> $HOME/.ssh/authorized_keys ssh -i $HOME/.ssh/id_rsa localhost
我更喜欢这种方式,而不是How do you test a public/private DSA keypair?
ssh-keygen -y -e -f <private key>
的公认答案?在堆栈溢出上。ssh-keygen -y -e -f <private key>
获取私钥并打印相应的公钥,该公钥可以直接与您可用的公钥进行比较。(提示:注意注释或关键选项。)(这到底是怎么做到的?我只能希望公钥直接或间接编码在私钥中......)
我自己需要这个并使用了以下 Bash 单行代码。如果键属于一起,它应该不输出任何内容。对脚本中的差异应用一点
-q
,差异只会适当地设置返回码。根据您从哪里获得您正在测试的公钥文件,接受的答案可能会给出误报结果。这是因为@drewbenn 评论中描述的行为。具体来说,当 -e 选项与私钥文件一起用作 -f 选项参数时,它只是模仿(但重新格式化)关联的公钥文件中的内容。
换句话说,
(显然)生成公钥值,并且
简单地输出(并重新格式化)现有id_rsa.pub中的密钥,无论它是什么。
在我的例子中,我必须验证这对没有被破坏。所以,我决定比较以下内容:
和
所以:
也许这不是那么灵活,但它更适合我的需要。也许它可以帮助别人。
最简单的方法是比较指纹,因为公钥和私钥相同。通过将两个命令放在同一行,视觉比较非常容易:
以编程方式,您将希望忽略评论部分
如果它们在您的本地系统上,请坚持使用您
id_rsa.pub
的密钥。如果有效,则它们匹配。$HOME/.ssh/authorized_keys
ssh
localhost
id_rsa