我有两个文件,id_rsa
和id_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:是的,请更改已接受的答案。误报可能会有问题。