关于ssh:计算RSA密钥指纹

Calculate RSA key fingerprint

我需要对github进行ssh密钥审计,但我不确定如何找到我的rsa密钥指纹。我最初遵循一个指南在Linux上生成一个ssh密钥。

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


运行以下命令检索ssh密钥的sha256指纹(-l表示"list",而不是创建新密钥,-f表示"filename"):

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

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

1
2
$ 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)指纹格式,请运行:

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

奖金信息:

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

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

1
$ 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代理不同。)


更新的ssh命令将指纹列为sha256键。

例如:

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

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

1
2
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:23Yourname@Ubuntu(RSA)

但是,如果出现错误,比如:Could not open a connection to your authentication agent.。这意味着ssh代理没有运行。您可以使用以下命令启动/运行它:ssh-agent bash(感谢@richard的评论),然后重新运行ssh-add -l


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

MarvinVinto给出的投票最多的答案提供了公共ssh密钥文件的指纹。也可以查询相应的私有ssh密钥的指纹,但它需要较长的一系列步骤,如下所示。

  • 如果还没有加载ssh代理,请加载它。最简单的方法是调用

    1
    $ ssh-agent bash

    1
    $ ssh-agent tcsh

    (或者你用的另一个贝壳)。

  • 加载要测试的私钥:

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

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

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

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

  • 如果要停止代理(即,如果调用了上面的步骤1),只需在shell上键入"exit",然后在加载ssh代理之前返回shell。

  • 我没有添加新的信息,但希望所有级别的用户都能清楚地知道这个答案。


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

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

    代理中的每个密钥将打印为:

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


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

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

    在哪里?-primary.pem是要检查的私钥


    1
    $ ssh-add -l

    也将在Mac OS X V10.8(美洲狮)-V10.10(约塞米蒂)上工作。

    它还支持选项-E来指定指纹格式,因此在需要MD5时(通常由github使用),只需将-E md5添加到命令中即可。


    这是我用来获取创建DigitalOcean水滴的ssh关键指纹的shell函数:

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

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

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

    在Windows上,如果您正在运行Putty/Pageant,则在将Putty(.ppk)键加载到Pageant中时会列出指纹。它非常有用,以防你忘记使用哪一个。

    Enter image description here


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

    1
    ssh-add -l

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

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

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

    对于您的公钥:

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

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


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

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

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

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

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


    google compute engine在Linux实例的串行输出中显示ssh主机密钥指纹。API可以从GCE获取这些数据,并且不需要登录到该实例。

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

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


    在Fedora上,我会[locate~/.ssh]告诉我密钥是@

    1
    2
    /root/.ssh
    /root/.ssh/authorized_keys


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

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