我需要对GitHub进行SSH密钥审计,但我不确定如何找到我的RSA密钥指纹。我最初按照指南在Linux上生成SSH密钥。
我需要输入什么命令才能找到我当前的RSA密钥指纹?
运行以下命令检索SSH键的SHA256指纹(-l表示“列表”而不是创建新键,-f表示“文件名”):
-l
-f
$ ssh-keygen -lf /path/to/ssh/key
例如,在我的机器上,我运行的命令是(使用RSA公钥):
$ ssh-keygen -lf ~/.ssh/id_rsa.pub2048 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_hosts和authorized_keys文件。
ssh-keygen -lf
known_hosts
authorized_keys
要查找Linux /Unix/OSX系统上的大多数公钥,请运行
$ 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代理不同。)
ssh-add -l
要在第一次连接之前检查远程SSH服务器,您可以查看www.server-stats.net/ssh/以查看服务器的所有SHH密钥,以及何时知道密钥。
这不像SSL证书,但绝对是第一次连接到任何SSH服务器之前必须做的事情。
要在Ubuntu上查看您的密钥,只需在您的终端上输入以下命令:
你会得到这样的输出:2568 0j:20:4b:88:a7:9t:wd:19:f0:d4:4y:9g:27:cf:97:23yourName@ubuntu(RSA)
2568 0j:20:4b:88:a7:9t:wd:19:f0:d4:4y:9g:27:cf:97:23
如果你遇到这样的错误;Could not open a connection to your authentication agent.然后这意味着ssh代理未运行。你可以使用以下命令启动/运行它:ssh-agent bash(感谢评论中的@Richard),然后重新运行ssh-add -l
Could not open a connection to your authentication agent.
ssh-agent bash
$ ssh-add -l
还将致力于Mac OS X v10.8(山狮)-v10.10(优胜美地)。
它还支持选项-E来指定指纹格式,因此如果需要MD5(它经常使用,例如GitHub),只需将-E md5添加到命令中。
-E
-E md5
密钥对(私钥和公钥)将具有相同的指纹;因此,如果您不记得哪个私钥属于哪个公钥,请通过比较它们的指纹来找到匹配项。
Marvin Vinto投票最多的答案提供了公共SSH密钥文件的指纹。也可以查询相应的私人SSH密钥的指纹,但需要更长的一系列步骤,如下所示。
加载SSH代理,如果您还没有这样做。最简单的方法是调用
$ ssh-agent bash
或
$ ssh-agent tcsh
(或您使用的其他shell)。
加载您要测试的私钥:
$ ssh-add /path/to/your-ssh-private-key
如果密钥有密码保护,您将被要求输入密码。
现在,正如其他人所说,键入
$ ssh-add -l1024 fd:bc:8a:81:58:8f:2c:78:86:a2:cf:02:40:7d:9d:3c you@yourhost (DSA)
fd:bc:...是您要的指纹。如果有多个键,将打印多行,最后一行包含最后加载键的指纹。
fd:bc:...
如果您想停止代理(即,如果您调用了上面的步骤1),那么只需在shell上键入“退出”,您就会在加载ssh代理之前回到shell上。
我不添加新的信息,但希望这个答案对各级用户都很清楚。
如果您的SSH代理正在运行,它是
列出所有身份的RSA指纹,或-L列出公钥。
-L
如果您的代理未运行,请尝试:
ssh-agent sh -c 'ssh-add; ssh-add -l'
对于您的公钥:
ssh-agent sh -c 'ssh-add; ssh-add -L'
如果您收到消息:“代理人没有身份。”,那么您必须首先在ssh-keygen之前生成RSA密钥。
ssh-keygen
较新的SSH命令将指纹列为SHA256键。
例如:
ssh-keygen -lf ~/.ssh/id_dsa.pub1024 SHA256:19n6fkdz0qqmowiBy6XEaA87EuG/jgWUr44ZSBhJl6Y (DSA)
如果您需要将其与旧指纹进行比较,您还需要指定使用MD5指纹散列函数。
ssh-keygen -E md5 -lf ~/.ssh/id_dsa.pub2048 MD5:4d:5b:97:19:8c:fe:06:f0:29:e7:f5:96:77:cb:3c:71 (DSA)
也可用:-E sha1
-E sha1
更新……是的……是的……我知道……SSH的DSA密钥不应该再使用,应该使用旧的RSA密钥或更新的黄道密钥。
对于那些不断编辑我在上面使用的命令的“管理员”。停止更改它!您使命令和结果输出不匹配!
在Windows上,如果您运行的是PuTTY/Pageant,则在将PuTTY(. ppk)密钥加载到Pageant时会列出指纹。如果您忘记正在使用哪个,它非常有用。
在此处复制来自AWS论坛的内容,因为我发现它对我的用例很有用-我想检查哪些密钥与我已导入AWS的密钥匹配
openssl pkey -in ~/.ssh/ec2/primary.pem -pubout -outform DER | openssl md5 -c
在哪里:
primary.pem
请注意,这给出了与ssh-keygen计算的指纹不同的指纹。
Google Compute Engine在Linux实例的串行输出中显示SSH主机密钥指纹。API可以从GCE获取该数据,无需登录实例。
除了串行输出之外,我没有在其他地方找到它。我认为指纹应该在一些对程序员更友好的地方。
但是,它似乎取决于实例的类型。我使用的是Debian 7(Wheezy)f1-micro的实例。
这是我用来获取创建DigitalOcean液滴的SSH关键指纹的shell函数:
fingerprint() {pubkeypath="$1"ssh-keygen -E md5 -lf "$pubkeypath" | awk '{ print $2 }' | cut -c 5-}
把它放在你的~/.bashrc中,获取它的来源,然后你就可以得到这样的指纹:
~/.bashrc
$ fingerprint ~/.ssh/id_rsa.pubd2:47:0a:87:30:a0:c0:df:6b:42:19:55:b4:f3:09:b9
如果您的密钥在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)
在Fedora上,我做了locate ~/.ssh,它告诉我密钥在
locate ~/.ssh
/root/.ssh/root/.ssh/authorized_keys
有时,您可能在~/.ssh目录中有一堆密钥,但不知道哪个与GitHub/Gitlab/etc显示的指纹匹配。
~/.ssh
以下是如何显示~/.ssh目录中所有密钥的密钥文件名和MD5指纹:
cd ~/.sshfind . -type f -exec printf "\n{}\n" \; -exec ssh-keygen -E md5 -lf {} \;
(有关参数的含义,请参阅这个关于#0命令的答案。
请注意,属于一个密钥的私有/公共文件具有相同的指纹,因此您会看到重复项。
如果你需要从私钥中获取它:
ssh-keygen -y -f key > key.pub && ssh-keygen -lf key.pub