计算 RSA 密钥指纹

Posted

技术标签:

【中文标题】计算 RSA 密钥指纹【英文标题】:Calculate RSA key fingerprint 【发布时间】:2012-03-25 07:46:52 【问题描述】:

我需要为 GitHub 进行 SSH 密钥审计,但我不确定如何找到我的 RSA 密钥指纹。我最初按照指南在 Linux 上生成 SSH 密钥。

我需要输入什么命令才能找到我当前的 RSA 密钥指纹?

【问题讨论】:

FWIW,我一直回到这篇文章 因为 github 是我在密钥上看到指纹的地方,我想确保我使用的是相应的私钥。也许它确实需要一个 github 标签,因为这篇文章有助于 github 相关的查询? @hamx0r 我回到这篇文章是因为 Gitlab 也使用了这些指纹...... 我是因为 Travis 而来到它的,它也使用它。 :D 对于所有使用 Linux 的“不断返回此页面”的用户,请将其复制到您的 bashrc:function fingerprint() ssh-keygen -lf $1 -E md5 然后(在您获取 bashrc 之后)您可以使用fingerprint ~/.ssh/key_file获取指纹 对于那些尝试@JeffDiederiks 函数并想知道它为什么不起作用的人,Bash 函数需要在正文中尾随;,所以请改用function fingerprint() ssh-keygen -lf $1 -E md5; 【参考方案1】:

运行以下命令检索 SSH 密钥的 SHA256 指纹(-l 表示“列表”而不是创建新密钥,-f 表示“文件名”):

$ ssh-keygen -lf /path/to/ssh/key

例如,在我的机器上,我运行的命令是(使用 RSA 公钥):

$ ssh-keygen -lf ~/.ssh/id_rsa.pub
2048 00:11:22:33:44:55:66:77:88:99:aa:bb:cc:dd:ee:ff /Users/username/.ssh/id_rsa.pub (RSA)

要使用较新版本的 ssh-keygen 获取 GitHub (MD5) 指纹格式,请运行:

$ ssh-keygen -E md5 -lf <fileName>

奖金信息:

ssh-keygen -lf 也适用于 known_hostsauthorized_keys 文件。

要在 Linux/Unix/OS X 系统上查找大多数公钥,请运行

$ find /etc/ssh /home/*/.ssh /Users/*/.ssh -name '*.pub' -o -name 'authorized_keys' -o -name 'known_hosts'

(如果您想查看其他用户的主目录,您必须是 root 或 sudo。)

ssh-add -l 非常相似,但列出了添加到您的代理的密钥的指纹。 (OS X 用户请注意,通过 Keychain 的魔法无密码 SSH 与使用 ssh-agent 不同。)

【讨论】:

如何找到路径? 由于您的示例十六进制指纹是 32 位数字,我相信这将是一个 MD5 指纹,对吗?与指示 SHA1 的 40 位指纹相反 在非 Ubuntu 系统上,相关文件可能位于 /etc/ssh,例如/etc/ssh/ssh_host_rsa_key.pub 值得注意的是,公钥/私钥对中两个密钥的指纹应该相同;所以.ssh/id_rsa 的指纹应该与.ssh/id_rsa.pub 的指纹相同。因此,您可以使用其中任何一种(如果您像我一样喜欢制表符完成,它可以减少两次击键。效率!)。 如果您要与 AWS 控制台中列出的指纹进行比较,这将节省您的时间...serverfault.com/questions/603982/…【参考方案2】:

要在第一次连接之前检查远程 SSH 服务器,您可以查看 www.server-stats.net/ssh/ 以查看服务器的所有 SHH 密钥,以及密钥何时已知。

这不像 SSL 证书,但绝对是第一次连接到任何 SSH 服务器之前必须做的事情。

【讨论】:

用户寻找的不是第三方网站,而是操作系统本身的命令行。 所以,它基本上是convergence plugin,除了 SSH 而不是 SSL,而且只有一个(有点不确定)公证人。这听起来对吗?【参考方案3】:

要在 Ubuntu 上查看您的密钥,只需在终端上输入以下命令:

ssh-add -l

你会得到这样的输出: 2568 0j:20:4b:88:a7:9t:wd:19:f0:d4:4y:9g:27:cf:97:23yourName@ubuntu (RSA)

但是,如果您收到类似的错误; Could not open a connection to your authentication agent. 那么这意味着 ssh-agent 没有运行。您可以使用以下命令启动/运行它: ssh-agent bash(感谢 cmets 中的@Richard)然后重新运行 ssh-add -l

【讨论】:

如果您不在 Ubuntu 上,很遗憾您可能会收到“无法打开与您的身份验证代理的连接。” 这仅在您运行身份验证代理时才有效。 要运行身份验证代理,您可以使用ssh-agent bash 并继续生活。生活中一如既往; ssh-agent 不能保证在所有系统上都是一致的实现。 Linux 的另一个技巧; ssh-keygen-g3的选项-F(dump指纹)会显示key的指纹: $ ssh-keygen-g3 -F /path/to/keyfile.pub answers.ssh.com/questions/494/…【参考方案4】:
$ ssh-add -l 

还将在Mac OS X v10.8(山狮)-v10.10(优胜美地)上工作。

它还支持-E选项来指定指纹格式,所以如果需要MD5(它经常使用,例如GitHub),只需在命令中添加-E md5

【讨论】:

+1 以获得最简单的答案。从man ssh-add 选项-l 是“列出代理当前代表的所有身份的指纹”【参考方案5】:

密钥对(私钥和公钥)将具有相同的指纹;因此,如果您不记得哪个私钥属于哪个公钥,请通过比较他们的指纹来找到匹配项。

Marvin Vinto 投票最多的答案提供了 公共 SSH 密钥文件的指纹。对应的private SSH key的指纹也可以查询到,但是需要更长的一系列步骤,如下图。

    加载 SSH 代理(如果您还没有这样做的话)。最简单的方法是调用

    $ ssh-agent bash
    

    $ ssh-agent tcsh
    

    (或您使用的其他外壳)。

    加载你要测试的私钥:

    $ ssh-add /path/to/your-ssh-private-key
    

    如果密钥受密码保护,系统会要求您输入密码。

    现在,正如其他人所说,输入

    $ ssh-add -l
    1024 fd:bc:8a:81:58:8f:2c:78:86:a2:cf:02:40:7d:9d:3c you@yourhost (DSA)
    

    fd:bc:... 是您要的指纹。如果有多个key,会打印多行,最后一行包含最后加载的key的指纹。

    1234563 .

我不添加新信息,但希望这个答案对所有级别的用户都清楚。

【讨论】:

第一段不真实,ssh-add -lssh-keygen -l 为给定的密钥对返回相同的指纹。另外,它应该是小写的-l,而不是大写。 我不反对 ssh-add -lssh-keygen -l 为给定的密钥对返回相同的指纹。但我不明白我在第一段的原始陈述有什么问题。我加了一句澄清一下。 将 ssh-keygen 指向一个密钥,而不是启动代理,然后加载密钥,然后获取指纹。 如果你只有私钥,你不一定需要运行ssh-agent。假设 PRIVKEY 已设置为私钥文件,PUBKEY 已设置为(最初不存在的)公钥文件,请执行以下操作:ssh-keygen -y -f "$PRIVKEY" &gt; "$PUBKEY" 重新生成 SSH 公钥,然后 ssh-keygen -E md5 -l -v -f "$PUBKEY" 如果您想要MD5 散列,或者如果您想要 SHA-256 散列(现在默认使用 SHA-256),则只需 ssh-keygen -l -v -f "$PUBKEY"【参考方案6】:

如果你的 SSH 代理正在运行,它是

ssh-add -l

列出所有身份的 RSA 指纹,或-L 列出公钥。

如果您的代理没有运行,请尝试:

ssh-agent sh -c 'ssh-add; ssh-add -l'

对于您的公钥:

ssh-agent sh -c 'ssh-add; ssh-add -L'

如果您收到消息:'代理没有身份。',那么您必须首先通过ssh-keygen 生成您的 RSA 密钥。

【讨论】:

我安装了 openssh,然后尝试使用 putty 连接到服务器。它显示 ssh-ed25519 256 密钥指纹,但我收到“无身份”消息。您知道在哪里可以找到并列出此密钥吗?使用此密钥与生成新的 RSA 密钥相比有什么缺点吗? /etc/ssh/ssh_host_ed25519_key.pub 下找到它。问题的第二部分仍然存在:使用这个自动生成的密钥有什么缺点吗?【参考方案7】:

较新的 SSH 命令会将指纹列为 SHA256 密钥。

例如:

ssh-keygen -lf ~/.ssh/id_dsa.pub 
1024 SHA256:19n6fkdz0qqmowiBy6XEaA87EuG/jgWUr44ZSBhJl6Y (DSA)

如果您需要将其与旧指纹进行比较,您还需要指定使用 MD5 指纹哈希函数。

ssh-keygen -E md5 -lf ~/.ssh/id_dsa.pub
2048 MD5:4d:5b:97:19:8c:fe:06:f0:29:e7:f5:96:77:cb:3c:71 (DSA)

也可用:-E sha1

更新...是的...是的...我知道...不应再使用 SSH 的 DSA 密钥,而应使用较旧的 RSA 密钥或较新的黄道密钥。

致那些不断编辑我在上面使用的命令的“管理员”。停止改变它!您使命令和结果输出不匹配!

【讨论】:

这里值得一提的是,您可以告诉ssh 使用ssh -o FingerprintHash=md5 example.org 向您显示服务器的旧MD5 指纹,如in this answer 所述。 (我只是在寻找那个,这个答案让我找到了那个,所以我想其他人可能有类似的经历。) 这个答案对于那些希望将他们的密钥与 github.com 显示的内容(即十六进制格式的 MD5)进行比较的人最有帮助 对于与腻子将报告的内容进行比较也非常有帮助。 目前 GitHub 显示的是前一种格式。顺便说一句,就我而言,在我的本地密钥上生成的 SHA256 与 GitHub 发送的不匹配!那是中间人吗?即使我知道是这样,我该怎么办?【参考方案8】:

在 Windows 上,如果您正在运行 PuTTY/Pageant,则在您将 PuTTY (.ppk) 密钥加载到 Pageant 时会列出指纹。如果您忘记使用的是哪一个,它非常有用。

【讨论】:

谢谢,有时我们 Linux 人会忘记 windows,尤其是 OP 提到 putty。 @DmitriR117 为什么要把全世界都知道的黑色公钥画出来? 我猜总有一点点......偏执狂:) 如果量化分析师有一天能用它来对付我怎么办?!【参考方案9】:

在此处从 AWS forums 复制内容,因为我发现它对我的用例很有用 - 我想检查我的哪些密钥与我已导入 AWS 的密钥匹配

openssl pkey -in ~/.ssh/ec2/primary.pem -pubout -outform DER | openssl md5 -c

地点:

primary.pem 是要检查的私钥

请注意,这给出的指纹与ssh-keygen 计算的指纹不同。

【讨论】:

我认为重要的是要提到这不会计算与 ssh-keygen 相同的指纹。 谢谢,完成。当然,如果你愿意,可以调整它。我可能会在一段时间后将这些 cmets 标记为删除。【参考方案10】:

Google Compute Engine 在 Linux 实例的串行输出中显示 SSH 主机密钥指纹。 API 可以从 GCE 获取数据,无需登录实例。

除了串行输出之外,我在其他任何地方都没有找到它。我认为指纹应该放在对程序员更友好的地方。

但是,它似乎取决于实例的类型。我正在使用 Debian 7 (Wheezy) f1-micro 的实例。

【讨论】:

【参考方案11】:

这是我用来获取 SSH 密钥指纹以创建 DigitalOcean 液滴的 shell 函数:

fingerprint() 
    pubkeypath="$1"
    ssh-keygen -E md5 -lf "$pubkeypath" | awk ' print $2 ' | cut -c 5-

把它放在你的~/.bashrc中,获取它,然后你就可以得到指纹了:

$ fingerprint ~/.ssh/id_rsa.pub
d2:47:0a:87:30:a0:c0:df:6b:42:19:55:b4:f3:09:b9

【讨论】:

【参考方案12】:

如果您的密钥在 SSH 代理中,最快的方法:

$ ssh-add -L | ssh-keygen -E md5 -lf /dev/stdin

代理中的每个键都将打印为:

4096 MD5:8f:c9:dc:40:ec:9e:dc:65:74:f7:20:c1:29:d1:e8:5a /Users/cmcginty/.ssh/id_rsa (RSA)

【讨论】:

需要一种更快的方法来将我的密钥与我的 GitHub 帐户上的密钥进行匹配,而这个答案帮助我做到了这一点。【参考方案13】:

在 Fedora 上,我使用 locate ~/.ssh,它告诉我密钥在

/root/.ssh
/root/.ssh/authorized_keys

【讨论】:

OP 似乎知道在哪里可以找到他们的密钥(这不是它,~/.ssh/id*.pub 是)并且想要获取他们的指纹。【参考方案14】:

有时你的~/.ssh 目录中可能有一堆键,但不知道哪个与 GitHub/Gitlab/etc 显示的指纹匹配。

下面是如何显示~/.ssh 目录中所有密钥的密钥文件名和 MD5 指纹:

cd ~/.ssh
find . -type f -exec printf "\n\n" \; -exec ssh-keygen -E md5 -lf  \;

(参数含义请参考this answer about the find command。

请注意,属于一个密钥的私有/公共文件具有相同的指纹,因此您会看到重复。

【讨论】:

以上是关于计算 RSA 密钥指纹的主要内容,如果未能解决你的问题,请参考以下文章

如何在每次 vagrant up 命令后保持 RSA 密钥的指纹不发生变化?

响应 y(es) 到 psftp 主机密钥提示

Android 调试不显示“USB调试”RSA密钥指纹 认证窗口 不使用助手软件怎么做

将rsa密钥部署到其他计算机

浅析加密算法七RSA密码

密码学---公钥密码---RSA算法