我有两个文件, id_rsa
和id_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
键将其ssh
到localhost
。 如果有效,那么他们匹配。
cat $HOME/.ssh/id_rsa.pub >> $HOME/.ssh/authorized_keys ssh -i $HOME/.ssh/id_rsa localhost