我用什么命令来查看服务器的ECDSA密钥指纹是什么?

tru*_*ktr 68 linux security ssh openssh rsa

我在Google上看到有关如何查看RSA密钥指纹的内容,而不是ECDSA指纹.

tru*_*ktr 109

等等,我找到了.运行命令:

ssh-keygen -l -f /etc/ssh/ssh_host_ecdsa_key.pub
Run Code Online (Sandbox Code Playgroud)

  • 请注意,这将计算以服务器操作系统的首选格式计算指纹的哈希值.根据您的本地操作系统,您可能需要使用旧的哈希格式:ssh-keygen -l -E md5 -f /etc/ssh/ssh_host_ecdsa_key.pub例如从ubuntu 12.04连接到ubuntu 16.04时需要这样做 (4认同)
  • 添加“-v”也可以显示 ASCII 艺术表示。 (2认同)

Von*_*onC 15

最近的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...=
Run Code Online (Sandbox Code Playgroud)

笔记:

  • 如果您的sshd在自定义端口上运行,请-p portNumberssh-keyscan命令中添加' '
  • ssh-keyscan写入stderr,而不是stdout(!),因此bash重定向' 2>&1'(可能因shell而异)

这是我添加到我的~/.ssh/known_hosts文件中的行,以便从localhost为我的测试授权ssh请求(主要用于使用ssh的gitolite).


DanielBöhmer 在评论中证实:

  • ssh-keyscan 提供SSH服务器的完整公钥
  • 输出ssh-keygen几乎与公钥文件的格式相同.
    只需删除第一列(IP地址或主机名)并将其保存或管道以ssh-keygen -l显示指纹.

Daniel补充道:

显示存储在~/.ssh/know_hosts以下位置的所有服务器公钥的指纹:

cut -d' ' -f2- ~/.ssh/known_hosts | while read line; do echo "$line" | ssh-keygen -lf-; done
Run Code Online (Sandbox Code Playgroud)

  • 问题是关于钥匙的*指纹*。ssh-keyscan 仅提供(公共)密钥。 (3认同)

Nic*_*LST 9

使用的命令

  • 显示存储在服务器上的公共主机密钥的 ascii-art(在服务器端完成,您通过 ssh 连接到的那个):

    ssh-keygen -l -v -f /etc/ssh/ssh_host_ecdsa_key.pub
    
    Run Code Online (Sandbox Code Playgroud)

    -l : 显示指定公钥文件的指纹。

    -v : 视觉 (ascii-art)

    -f : 文件

  • 显示远程服务器公共主机密钥的 ascii-art(在客户端完成,您通过 ssh 连接的那个):

    ssh -o visualhostkey=yes -o FingerprintHash=md5 <host_server_to_connect>
    
    Run Code Online (Sandbox Code Playgroud)

    -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..    |
+-----------------+
Run Code Online (Sandbox Code Playgroud)
  • 客户端
$ 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)? 
Run Code Online (Sandbox Code Playgroud)

更多解释

第一个命令将显示与您作为输入提供的文件指纹相对应的 ascii-art。您作为输入提供的文件是服务器的公共主机密钥。当客户端连接时(不仅是第一次),服务器将发送其公共主机密钥。此公共主机密钥将在~/.ssh/known_hosts. 如果公钥在文件中,那就没问题:主机(服务器)是已知的,所以我们继续下一步对用户进行身份验证(本文未描述用户身份验证)。如果公钥不在文件中,则客户端将使用哈希算法计算此公钥的指纹(不同的哈希算法将给出不同的指纹)。显示先前计算的此指纹(如果提供相应选项,则与 ascii-art 一起显示),您必须根据您识别此指纹或否来回答是或否(此指纹是公共主机密钥的图像/哈希)服务器)。如果你说是,那么服务器的公钥(不是它的指纹)将被添加到文件中~/.ssh/known_hosts

我们可以注意到~/.ssh/known_hosts在你家(~)目录下,因为信任这个主机(服务器),但是不同的用户可能和你不一样信任。此外,服务器的主机公钥不依赖于用户,因此它存储在/etc/ssh/.

第二个命令将显示从host_server_to_connect接收到的公钥的指纹和 ascii-art (根据选项中给出的哈希算法)。它与仅执行 ssh 相同,但具有更多视觉选项,因此连接将以与普通 ssh 连接相同的方式继续。


Dav*_*rod 8

在我的系统上,我需要指定MD5密钥而不是默认的SHA256:

ssh-keygen -l -E md5 -f /etc/ssh/ssh_host_ecdsa_key.pub
Run Code Online (Sandbox Code Playgroud)

这将输出一个字符串,其格式与我在客户端上看到的错误相匹配.

  • OpenSSH &gt;6.6 中默认切换到 SHA256 指纹识别时引入了“-E”标志。因此,在客户端显示 SHA256 指纹的情况下,它不能用于在服务器上输出该格式。解决方法:https://superuser.com/a/1030779 (2认同)