【问题标题】:What command do I use to see what the ECDSA key fingerprint of my server is?我使用什么命令来查看我的服务器的 ECDSA 密钥指纹是什么?
【发布时间】:2012-04-21 01:51:51
【问题描述】:

我在 Google 上看到有关如何查看 RSA 密钥指纹而不是 ECDSA 指纹的资料。

【问题讨论】:

    标签: linux security ssh rsa openssh


    【解决方案1】:

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

    ssh-keygen -l -f /etc/ssh/ssh_host_ecdsa_key.pub
    

    【讨论】:

    • 请注意,这将以您的服务器操作系统的首选格式计算指纹的哈希值。根据您的本地操作系统,您可能需要使用旧的哈希格式: ssh-keygen -l -E md5 -f /etc/ssh/ssh_host_ecdsa_key.pub 例如,从 ubuntu 12.04 连接到 ubuntu 16.04 时需要此格式
    • 这也适用于 Mac OS(用于验证远程登录的真实性)。
    • 添加 -v 以同时显示 ASCII 艺术表示。
    • @user1104372 除了简洁的视觉效果之外,ascii 艺术是否有用?
    • @trusktr 它可以帮助您作为人类在从新系统登录时进行快速的健全性检查superuser.com/a/374790/1200989
    【解决方案2】:

    使用最近的 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'(可能因您的 shell 而异)

    这是我添加到我的~/.ssh/known_hosts 文件中的行,以便授权来自本地主机的 ssh 请求以进行我的测试(主要用于gitolite, which uses ssh)。


    Daniel Böhmer 确认in the comments

    • 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
    

    【讨论】:

    • 问题是关于钥匙的指纹。 ssh-keyscan 只提供(公共)密钥。
    • 确实,ssh-keyscan 提供了 SSH 服务器的完整公钥。我有它的输出转储,现在想将其与ssh 在首次连接期间显示的指纹进行比较。该怎么做?
    • 我刚刚发现:ssh-keygen 的输出与公钥文件的格式几乎相同。只需删除第一列(IP 地址或主机名)并将其保存或通过管道传送到提供指纹的ssh-keygen -l。我仍然想知道如何让ssh 在要求确认时显示服务器的完整公钥。
    • @DanielBöhmer 感谢您的反馈。我已将其包含在答案中以提高知名度。
    • 显示存储在~/.ssh/know_hosts:cut -d' ' -f2- ~/.ssh/known_hosts | while read line; do echo "$line" | ssh-keygen -lf-; done中的所有服务器公钥的指纹
    【解决方案3】:

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

    ssh-keygen -l -E md5 -f /etc/ssh/ssh_host_ecdsa_key.pub
    

    这会以与我在客户端看到的错误相匹配的格式输出一个字符串。

    【讨论】:

    • -E 标志是在 OpenSSH >6.6 中引入的,大约在默认情况下切换到 SHA256 指纹识别的时候。因此,在客户端显示 SHA256 指纹的情况下,它不能用于在服务器上输出该格式。解决方法:superuser.com/a/1030779
    【解决方案4】:

    使用的命令

    • 显示存储在服务器上的公共主机密钥的 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))回答 yes

    示例

    • 服务器端
    $ 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。您作为输入提供的文件是服务器的公共 host 密钥。当客户端连接时(不仅是第一次),服务器将发送其公共主机密钥。将在 ~/.ssh/known_hosts 中搜索此公共主机密钥。如果公钥在文件中,那么没关系:主机(服务器)是已知的,所以我们继续下一步对用户进行身份验证(本文没有描述用户身份验证)。如果公钥不在文件中,则客户端将使用散列算法计算此公钥的指纹(不同的散列算法将给出不同的指纹)。显示之前计算的这个指纹(如果提供了相应的选项,连同 ascii-art),您必须根据您识别此指纹或否来回答是或否(此指纹是公共主机密钥的图像/散列)服务器)。如果你说是,那么服务器的公钥(不是它的指纹)将被添加到文件~/.ssh/known_hosts

    我们可以注意到~/.ssh/known_hosts 位于您的主 (~) 目录下,因为信任此主机(服务器),但其他用户可能不信任您。另外,服务器的主机公钥不依赖于用户,所以存储在/etc/ssh/中。

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

    【讨论】:

      猜你喜欢
      • 2019-02-11
      • 2017-01-24
      • 1970-01-01
      • 2023-03-14
      • 2013-07-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多