是否有一种简单的方法可以验证给定的私钥是否与给定的公钥匹配?我有几个* .pub和一些* .key文件,我需要检查哪个去了。

同样,这些是发布/密钥文件,DSA。

我真的更喜欢某种单线......

有帮助吗?

解决方案

我找到了一种似乎对我有用的方法:

ssh-keygen -y -f <private key file>

该命令将输出给定私钥的公钥,因此只需将输出与每个* .pub文件进行比较。

其他提示

我总是使用以下命令比较模数的MD5哈希值:

Certificate: openssl x509 -noout -modulus -in server.crt | openssl md5
Private Key: openssl rsa -noout -modulus -in server.key | openssl md5
CSR: openssl req -noout -modulus -in server.csr | openssl md5

如果哈希匹配,则这两个文件会一起使用。

对于DSA密钥,请使用

 openssl dsa -pubin -in dsa.pub -modulus -noout

打印公钥,然后

 openssl dsa -in dsa.key -modulus -noout

显示与私钥对应的公钥,然后进行比较。

假设您拥有x.509证书中的公钥,并假设它们是RSA密钥,那么对于每个公钥,请执行

    openssl x509 -in certfile -modulus -noout

对于每个私钥,请执行

    openssl rsa -in keyfile -modulus -noout

然后按模数匹配键。

使用diff可以更轻松地进行检查:

diff <(ssh-keygen -y -f <private_key_file>) <public key file>

唯一奇怪的是,如果文件相同,diff就不会说任何内容,因此只会告诉你公共和私人是否匹配。

删除公钥并从私钥生成新公钥。将它们保存在单独的目录中,或使用命名约定来保持它们。

如果您在Windows中并希望使用GUI,请使用 puttygen 您可以将私钥导入其中:

导入后,您可以保存其公钥并将其与您的公钥进行比较。

输入以下命令以检查$ USER / .ssh目录中的私钥和公钥是否匹配集(相同)或不匹配集(不同)。 cut命令可以防止公钥中行末尾的注释被比较,只允许比较密钥。

ssh-keygen -y -f ~/.ssh/id_rsa | diff -s - <(cut -d ' ' -f 1,2 ~/.ssh/id_rsa.pub)

输出看起来像这些行之一。

Files - and /dev/fd/63 are identical

Files - and /dev/fd/63 differ

我写了一个shell脚本,用户用来检查他们的〜/ .ssh /文件和匹配的密钥集的文件权限。它通过设置ssh的用户事件解决了我的挑战。它可能会帮助你。 https://github.com/BradleyA/docker-security-infrastructure/树/主/ SSH

注意:我之前的回答(2018年3月)不再适用于最新版本的openssh。上一个答案:diff -qs <!> lt;(ssh-keygen -yf~ / .ssh / id_rsa)<!> lt;(cut -d'' - f 1,2~ / .ssh / id_rsa.pub)

使用公钥加密某些内容,并查看哪个私钥对其进行解密。

这个代码项目文章由杰夫阿特伍德实现简化围绕.NET加密类的包装器。假设这些密钥是为与RSA一起使用而创建的,请使用带有公钥的非对称类进行加密,并使用私钥进行加密。

如果没有返回任何内容,则匹配:

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

只需使用 puttygen 并将您的私钥加载到它。提供不同的选择,例如导出同名公钥。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top