我在 Google 上看到有关如何查看 RSA 密钥指纹而不是 ECDSA 指纹的资料。
4 回答
等等,我找到了。运行命令:
ssh-keygen -l -f /etc/ssh/ssh_host_ecdsa_key.pub
使用最近的 ssh(OpenSSH_6.0p1,OpenSSL 1.0.0j 2012 年 5 月 10 日),我编写了这样的脚本:
ssh-keyscan -t ecdsa localhost 2>&1 | grep ecdsa
localhost ecdsa-sha2-nistp256 AAAAE2VlongKey...=
笔记:
- 如果您的 sshd 在自定义端口上运行,请在命令中添加“
-p portNumber
” )ssh-keyscan
ssh-keyscan
写在 上stderr
,而不是stdout
(!),因此bash
重定向 '2>&1
' (可能因您的外壳而异)
这是我添加到~/.ssh/known_hosts
文件中的行,以便授权来自 localhost 的 ssh 请求以进行我的测试(主要用于使用 ssh 的 gitolite)。
ssh-keyscan
提供 SSH 服务器的完整公钥- 的输出
ssh-keygen
几乎与公钥文件的格式相同。
只需删除第一列(IP 地址或主机名)并将其保存或通过管道将其传输到ssh-keygen -l
显示指纹的位置。
丹尼尔补充道:
显示存储在以下位置的所有服务器公钥的指纹
~/.ssh/know_hosts
:
cut -d' ' -f2- ~/.ssh/known_hosts | while read line; do echo "$line" | ssh-keygen -lf-; done
使用的命令
显示存储在服务器上的公共主机密钥的 ascii-art(在服务器端完成,通过 ssh 连接到的那个):
ssh-keygen -l -v -f /etc/ssh/ssh_host_ecdsa_key.pub
-l:显示指定公钥文件的指纹。
-v:视觉(ascii-art)
-f : 文件
显示远程服务器公共主机密钥的 ascii-art(在客户端完成,您通过 ssh 连接的那个):
ssh -o visualhostkey=yes -o FingerprintHash=md5 <host_server_to_connect>
-o : 选项
visualhostkey : 视觉 (ascii-art)
FingerprintHash:要使用的哈希算法
如何检查主机/服务器的真实性
首先,1. 将在服务器上本地完成(您想通过 ssh 连接到的服务器):它将为您提供第一个 ascii-art。打印或拍照。
其次,2.是在第一次SSH连接时完成的;它将显示第二个 ascii-art。如果 ascii-art 相同,那么您可以对“我信任吗?”回答“是”。问题(即)。Are you sure you want to continue connecting (yes/no)
例子
- 服务器端
$ ssh-keygen -l -v -f /etc/ssh/ssh_host_ecdsa_key.pub
256 2e:a6:b3:27:14:12:0b:79:df:9a:7f:bd:4d:b1:e0:b6 (ECDSA)
+--[ECDSA 256]---+
| . |
|o o |
| o + . |
| o o . |
| . + S . . |
| + . . . o |
| . .o ..o o |
| ooo....+ |
| o= . E.. |
+-----------------+
- 客户端
$ ssh -o visualhostkey=yes -o FingerprintHash=md5 192.168.12.211
The authenticity of host '192.168.12.211 (192.168.12.211)' can't be established.
ECDSA key fingerprint is MD5:2e:a6:b3:27:14:12:0b:79:df:9a:7f:bd:4d:b1:e0:b6.
+---[ECDSA 256]---+
| . |
|o o |
| o + . |
| o o . |
| . + S . . |
| + . . . o |
| . .o ..o o |
| ooo....+ |
| o= . E.. |
+------[MD5]------+
Are you sure you want to continue connecting (yes/no)?
更多解释
第一个命令将显示与您作为输入提供的文件的指纹相对应的 ascii-art。您作为输入提供的文件是服务器的公共主机密钥。当客户端连接时(不仅是第一次),服务器将发送其公共主机密钥。此公共主机密钥将在~/.ssh/known_hosts
. 如果公钥在文件中,那么没关系:主机(服务器)是已知的,所以我们继续下一步对用户进行身份验证(本文没有描述用户身份验证)。如果公钥不在文件中,则客户端将使用散列算法计算此公钥的指纹(不同的散列算法将给出不同的指纹)。显示之前计算的这个指纹(如果提供了相应的选项,连同 ascii-art),您必须根据您识别此指纹或否来回答是或否(此指纹是公共主机密钥的图像/散列)服务器)。如果你说是,那么服务器的公钥(不是它的指纹)将被添加到文件~/.ssh/known_hosts
中。
我们可以注意到它~/.ssh/known_hosts
位于您的主 (~) 目录下,因为您信任此主机(服务器),但不同的用户可能不信任与您相同的用户。此外,服务器的主机公钥不依赖于用户,因此存储在/etc/ssh/
.
第二个命令将显示从host_server_to_connect接收到的公钥的指纹和 ascii-art (根据选项中给出的哈希算法)。它与只使用 ssh 相同,但具有更多视觉选项,因此连接将继续以与正常 ssh 连接相同的方式。
在我的系统上,我需要指定一个 MD5 密钥而不是默认的 SHA256:
ssh-keygen -l -E md5 -f /etc/ssh/ssh_host_ecdsa_key.pub
这会以与我在客户端看到的错误相匹配的格式输出一个字符串。