繁体   English   中英

计算RSA密钥指纹

[英]Calculate RSA key fingerprint

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

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

运行以下命令以检索 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'

(如果你想查看其他用户的 homedirs,你必须是 root 或 sudo。)

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

较新的 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 密钥或较新的黄道密钥。

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

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

ssh-add -l

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

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

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

Marvin Vinto 投票最多的答案提供了公共SSH 密钥文件的指纹。 对应的私人SSH密钥的指纹也可以查询,但它需要较长的一系列步骤的,如下所示。

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

    $ ssh-agent bash

    要么

    $ ssh-agent tcsh

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

  2. 加载要测试的私钥:

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

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

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

    $ 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的指纹。

  4. 如果您想停止代理(即,如果您调用了上面的第 1 步),那么只需在 shell 上键入“exit”,您就会在加载 ssh 代理之前回到 shell。

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

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

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

在哪里:

  • primary.pem是要检查的私钥

请注意,这提供了与ssh-keygen计算的指纹不同的指纹。

如果您的密钥在 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)
$ ssh-add -l 

也适用于Mac OS X v10.8 (Mountain Lion) - v10.10 (Yosemite)。

它还支持选项-E来指定指纹格式,因此如果需要 MD5(它经常使用,例如由 GitHub 使用),只需将-E md5添加到命令中。

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

在此处输入图片说明

这是我用来获取用于创建DigitalOcean液滴的 SSH 密钥指纹的 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

如果您的 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 密钥。

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

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

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

(有关参数的含义,请参阅有关find命令的答案

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

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

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

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

在 Fedora 上,我确实locate ~/.ssh ,它告诉我密钥位于

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM