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

我有两个文件, id_rsaid_rsa.pub ,什么命令可以用来validation,如果他们是valid配对。

    问题已经在stackoverflow回答: https : //stackoverflow.com/questions/274560/how-do-you-test-a-public-private-keypair

    (我可以在另一个堆栈交换networking上将问题标记为重复?)

    我宁愿使用ssh-keygen -y -e -f <private key>方式而不是SO上的接受答案。

    ssh-keygen -y -e -f <private key>取一个私钥,打印相应的公钥,可以直接比较公钥。 (提示:小心评论或关键选项)

    (这到底是怎么回事呢?我只能希望公钥是直接或间接编码在私钥中的)

    自己需要这个,并使用下面的bash-oneliner。 如果键属于一起,则不应该输出任何内容。 在脚本中应用一点-q到差异,差异只适当地设置返回代码。

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

    根据您获取所testing的公钥文件的位置,接受的答案可能会给出错误的结果。 这是因为@drewbenn评论中描述的行为。 特别是,当-e选项与私钥文件一起用作-f选项参数时,它只是鹦鹉(但是重新格式化)相关公钥文件中的内容。

    换一种说法,

     ssh-keygen -y -f id_rsa 

    (显然) 生成公钥的值,并且

     ssh-keygen -y -e -f id_rsa 

    只需输出(并重新格式化) 现有的 id_rsa.pub中的密钥, 无论它是什么

    在我的情况下,我必须validation这一对没有被损坏。 所以,我决定比较一下:

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

     cat id_rsa.pub | cut -d' ' -f 2 

    因此:

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

    也许这不是那么灵活,但是对我的需求更好。 也许它可以帮助别人。

    如果它们位于本地系统上,请将id_rsa.pub粘贴到您的$HOME/.ssh/authorized_keys并使用id_rsa键将其sshlocalhost 。 如果有效,那么他们匹配。

     cat $HOME/.ssh/id_rsa.pub >> $HOME/.ssh/authorized_keys ssh -i $HOME/.ssh/id_rsa localhost