计算RSA密钥指纹


903

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

查找当前RSA密钥指纹需要输入什么命令?


21
FWIW,我继续回到这篇文章,因为 github是我在钥匙上看到指纹的地方,并且我想确保我使用的是对应的私钥。也许它确实需要一个github标签,因为这篇文章可以帮助解决与github相关的问题?
hamx0r

4
@ hamx0r我回到这篇文章是因为Gitlab也使用了这些指纹……
Ray Foss

1
我之所以加入它,是因为Travis也使用它。:D
Per Lundberg '18年

4
对于所有使用Linux并“继续回到此页面”的用户,请将其复制到您的bashrc:function fingerprint() { ssh-keygen -lf $1 -E md5 }然后(在您获得bashrc的源之后),您可以使用fingerprint ~/.ssh/key_file
Jeff Diederiks

1
对于那些尝试@JeffDiederiks函数并想知道为什么它不起作用的人,Bash函数需要;在主体中添加尾随,因此请function fingerprint() { ssh-keygen -lf $1 -E md5; }改用。
tjjfvi

Answers:


1259

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

(如果要查看其他用户的homedir内部,则必须是root或sudo。)

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


5
我如何找到道路?
pal4life 2012年

4
由于您的示例十六进制指纹是32位数字,我相信它将是MD5指纹,对吗?与40位数指纹相反,后者将指示SHA1
culix

8
在非Ubuntu系统上,相关文件可能位于/ etc / ssh中,例如/etc/ssh/ssh_host_rsa_key.pub
Zorawar

12
值得注意的是,公用/专用密钥对中两个密钥的指纹都应该相同;因此的指纹.ssh/id_rsa应与的指纹相同.ssh/id_rsa.pub。因此,您可以选择使用其中之一(并且,如果您像我一样并且喜欢制表符补全功能,则可以减少两次按键操作。效率!)。
Parthian Shot

25
使用ssh-keygen -E md5 -lf ~/.ssh/id_rsa.pub,如果你不想要的标准SHA256输出
user8162

675

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

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


6
值得一提的是,您可以告诉ssh您该服务器使用的旧MD5指纹ssh -o FingerprintHash=md5 example.org,如本答案所述。(我只是在寻找答案,这个答案使我想到了那个答案,所以我认为其他人可能也有类似的经历。)
Jonathan Y.

25
对于希望将其密钥与github.com显示的密钥(即以十六进制格式表示的MD5)进行比较的人来说,此答案最有帮助
hamx0r 16-10-24

2
与将要报告的腻子进行比较也非常有帮助。
pjcard

27

要在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(感谢注释中的@Richard),然后重新运行ssh-add -l


5
如果您不在Ubuntu上,则可能会收到“无法打开与身份验证代理的连接”的信息。
rogerdpack 2013年

1
仅当您运行身份验证代理时,此方法才有效。
Rufflewind 2014年

要使身份验证代理运行,您可以ssh-agent bash继续使用。生活中一如既往 ssh-agent不能保证在所有系统上都实现一致。
理查德·肯尼思·尼西奥尔

Linux的另一个技巧;选项-F SSH-凯基-G3的(转储指纹)将显示密钥的指纹:$ SSH-凯基-G3 -F /path/to/keyfile.pub answers.ssh.com/questions/494/...
AnneTheAgile

18

密钥对(私钥和公钥)将具有相同的指纹;因此,在您忘记了哪个私钥属于哪个公钥的情况下,可以通过比较其指纹来找到匹配项。

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:...是您要使用的指纹。如果有多个密钥,将打印多行,最后一行包含最后加载的密钥的指纹。

  4. 如果要停止该代理(即,如果您调用了上面的步骤1),则只需在shell上键入`exit',然后您将在加载ssh代理之前回到shell上。

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


第一段是不正确的,ssh-add -l并且ssh-keygen -l对于给定的密钥对返回相同的指纹。另外,它应该是小写字母-l,而不是大写字母。
艾伯塔斯·阿杰耶瓦斯

我不反对,ssh-add -lssh-keygen -l为给定的密钥对返回相同的指纹。但是我不明白我在第一段中的原始陈述出了什么问题。我加了一句话来澄清。
Wirawan Purwanto 2015年

1
将ssh-keygen指向密钥,而不是启动代理,然后加载密钥,然后获取指纹,这只是简单的做法。
艾伯塔斯·阿杰耶瓦斯

1
如果只有私钥,则不必运行ssh-agent。假设PRIVKEY已将其设置为私有密钥文件,并且PUBKEY已将其设置为(最初不存在)公共密钥文件,请执行以下操作:ssh-keygen -y -f "${PRIVKEY}" > "${PUBKEY}"重新生成SSH公共密钥,然后ssh-keygen -E md5 -l -v -f "${PUBKEY}"如果您想要MD5哈希值,或者只是ssh-keygen -l -v -f "${PUBKEY}"想要SHA-256哈希值(SHA-256现在是默认值)。
David Tonhofer

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)

3
需要一种更快的方式来将我的密钥与我的GitHub帐户上的密钥进行匹配,而这个答案帮助我做到了这一点。
evanjs

11

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

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

其中:- primary.pem是要检查的私钥


9
$ ssh-add -l 

Mac OS X v10.8(Mountain Lion)-v10.10(Yosemite)上也可以使用。

它还支持-E指定指纹格式的选项,以便在需要MD5的情况下(例如GitHub经常使用它),只需将其添加-E md5到命令中即可。


+1是最简单的答案。从man ssh-add选项中-l是“列出当前由代理代表的所有身份的指纹”
XavierStuvw

8

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

在此处输入图片说明


3
谢谢,有时候我们Linux人忘记了Windows,尤其是OP提到的腻子。
乔蒙斯(Jmons)'17

@ DmitriR117为什么您绘制黑色公钥,因为它可以为全世界所熟知?
Michu93

8

这是我用来获取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

2

如果您的SSH代理正在运行,则为

ssh-add -l

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

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

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

对于您的公共密钥:

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

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


我安装了openssh,然后尝试使用腻子连接到服务器。它显示的是ssh-ed25519 256键指纹,但我收到“无身份”消息。您知道在哪里可以找到并列出此密钥吗?与生成新的RSA密钥相比,使用此密钥有不利之处吗?
lordcheeto

在下找到它/etc/ssh/ssh_host_ed25519_key.pub。问题的第二部分仍然存在:使用此自动生成的密钥有何缺点?
lordcheeto

1

有时您的目录中可以有一堆密钥,~/.ssh却不知道哪个与GitHub / Gitlab / etc所示的指纹匹配。

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

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

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

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


0

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

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

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


-1

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

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


4
用户不是在寻找第三方网站,而是从操作系统本身寻找命令行。
Andrew Barber 2012年

因此,它基本上是收敛插件,除了SSH而不是SSL之外,并且只有一个(有点iff昧)公证人。听起来不错吗?
Parthian Shot 2015年

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.