客户端提供的 SHA256 ssh 指纹,但只有服务器已知的 md5 指纹

Jon*_*yJD 133 ssh openssh

当连接到一个新的/未知的服务器(使用最近的 OpenSSH)时,例如:

ssh example.com
Run Code Online (Sandbox Code Playgroud)

您将获得如下指纹:

The authenticity of host 'example.org (192.0.2.42)' can't be established.
RSA key fingerprint is SHA256:7KMZvJiITZ+HbOyqjNPV5AeC5As2GSZES5baxy1NIe4.
Are you sure you want to continue connecting (yes/no)?
Run Code Online (Sandbox Code Playgroud)

但是,通常以这种形式为服务器提供指纹:

f6:fc:1c:03:17:5f:67:4f:1f:0b:50:5a:9f:f9:30:e5
Run Code Online (Sandbox Code Playgroud)

如何检查真实性(不打扰服务器管理员提供 SHA256 指纹)?

Jon*_*yJD 168

以前,指纹是作为十六进制 md5 哈希值给出的。从OpenSSH 6.8开始,指纹现在显示为 base64 SHA256(默认情况下)。你不能直接比较这些。

他们还添加了一个新的配置选项FingerprintHash。你可以放

FingerprintHash md5
Run Code Online (Sandbox Code Playgroud)

在您~/.ssh/config恢复到旧的(安全性较低)默认值或仅将此选项用于一次性使用:

ssh -o FingerprintHash=md5 example.org
Run Code Online (Sandbox Code Playgroud)

这将使指纹为

MD5:f6:fc:1c:03:17:5f:67:4f:1f:0b:50:5a:9f:f9:30:e5
Run Code Online (Sandbox Code Playgroud)

希望服务器管理员在不久的将来提供这两种类型的指纹。

编辑:

正如Arch Linux 论坛中给出的,还有第三种选择:

Host example.org
    FingerprintHash md5
Run Code Online (Sandbox Code Playgroud)

编辑:

您可以生成OpenSSH Cookbook上给出的任意密钥的哈希值:

找回钥匙:

  • 下载密钥 ssh-keyscan example.org > key.pub
  • 或:在服务器上找到密钥 /etc/ssh

生成哈希:

  • 确保您只有一行/类型,因此要么删除所有其他行/类型,要么key.pub运行ssh-keyscan -t rsa example.org > key.pub
  • ssh-keygen -l -f key.pub (默认哈希,取决于 OpenSSH 版本)
  • ssh-keygen -l -f key.pub -E md5 (当前 OpenSSH 上的 md5)
  • awk '{print $2}' ssh_host_rsa_key.pub | base64 -d | sha256sum -b | awk '{print $1}' | xxd -r -p | base64 (旧 OpenSSH 上的 sha256)
  • awk '{print $3}'对于较新版本的 ssh-keyscan,您可能需要以 开头,因为格式已更改)

  • 我使用 sha256sum 从 OpenSSH Cookbook 中添加了一个片段到答案中。 (6认同)
  • 你知道如何在服务器上获取 sha256 指纹,以防我可以访问吗?服务器上的`ssh-keygen -lf ` 只给我 md5 打印,而且我一生都找不到如何在手册页或 www 中获取 sha256 的... (4认同)
  • `sha256sum -b | awk '{print $1}' | xxd -r -p` 可以替换为不需要安装 vim 的 `openssl sha256 -binary`。结果命令行将是:`awk '{print $2}' ~/.ssh/id_rsa.pub | base64 -d | openssl sha256 -binary | base64` (4认同)
  • 谢谢您,您是唯一给出具有实际价值的答案的人。 (2认同)
  • @JonathanCross 请注意,base64 实用程序会产生填充的输出(即可能以一两个等号结尾),而 openssh 客户端不会在其日志中填充 base64。 (2认同)

Kep*_*epi 29

刚刚创建了一个小的 bash 脚本,它将打印带有指纹的表,用于服务器上允许的所有密钥密码(根据/etc/ssh/sshd_configSSH-256MD5算法。这是一个示例输出:

 +---------+---------+-----------------------------------------------------+
 | Cipher  | Algo    | Fingerprint                                         |
 +---------+---------+-----------------------------------------------------+
 | RSA     | MD5     | MD5:15:66:80:fd:79:d8:c0:92:e8:39:4a:bc:4e:c4:00:15 |
 | RSA     | SHA-256 | SHA256:G+rKuLGk+8Z1oxUV3cox0baNsH0qGQWm/saWPr4qZMM  |
 +---------+---------+-----------------------------------------------------+
 | ECDSA   | MD5     | MD5:f5:90:5c:03:2e:38:1b:c9:86:bd:86:47:5d:22:79:17 |
 | ECDSA   | SHA-256 | SHA256:GGmuOzsG4EGeRV9KD1WK7tRf3nIc40k/5jRgbTZDpTo  |
 +---------+---------+-----------------------------------------------------+
 | ED25519 | MD5     | MD5:d1:5a:04:56:37:f4:75:19:22:e6:e5:d7:41:fd:79:fa |
 | ED25519 | SHA-256 | SHA256:QVdqYeVzvsP4n5yjuN3D2fu8hDhskOxQCQAV5f9QK7w  |
 +---------+---------+-----------------------------------------------------+

 +---[RSA 2048]----+ +---[RSA 2048]----+ +---[ECDSA 256]---+ +---[ECDSA 256]---+ +--[ED25519 256]--+ +--[ED25519 256]--+
 |.oE.   +.++      | |        .o+=     | |      ... Eoo    | |  .. o.o..      .| |        ooo++o.+*| |   .o++o. +oo    |
 |  .   o +oo.     | |        .o= =    | |     +.=.=.o .   | | . .o *..      ..| |       . oo.+o.o=| |      ...o.+     |
 |   + . . o.=     | |       ... X +   | |    . X.o.*      | |o o  ++o      .. | |        . o. ...+| |       ..oo.o .  |
 |    = +  .+ o    | |      ..  = + o  | |     + = o o     | |.+  .o.o     .o  | |         +    ..o| |        =oo .+   |
 |   o o .S  .     | |     . .S  o o   | |    . = S   .    | |...  oo.S  .E* * | |        S      ..| |       .SO .  .  |
 |    +            | |    . E. =o..    | |     o           | | .. o.  . o *.O o| |              .  | |        o B .o.. |
 |   o             | | .o. *.o. *.     | |                 | |   ...   . o * * | |               . | |         E *..=.o|
 |    .            | | oo=...  +.      | |                 | |    +.      o + o| |                E| |          . +.+B+|
 |                 | |o+=.o....o+o     | |                 | |   .o+         . | |                 | |           o.ooOX|
 +------[MD5]------+ +----[SHA256]-----+ +------[MD5]------+ +----[SHA256]-----+ +------[MD5]------+ +----[SHA256]-----+
Run Code Online (Sandbox Code Playgroud)

脚本也将在SSH版本低于6.8-E md5添加选项之前)的服务器上运行。

编辑:更新版本的 SSH 更新版本,现在使用 ASCII 图像支持切换默认密码。

 +---------+---------+-----------------------------------------------------+
 | Cipher  | Algo    | Fingerprint                                         |
 +---------+---------+-----------------------------------------------------+
 | RSA     | MD5     | MD5:15:66:80:fd:79:d8:c0:92:e8:39:4a:bc:4e:c4:00:15 |
 | RSA     | SHA-256 | SHA256:G+rKuLGk+8Z1oxUV3cox0baNsH0qGQWm/saWPr4qZMM  |
 +---------+---------+-----------------------------------------------------+
 | ECDSA   | MD5     | MD5:f5:90:5c:03:2e:38:1b:c9:86:bd:86:47:5d:22:79:17 |
 | ECDSA   | SHA-256 | SHA256:GGmuOzsG4EGeRV9KD1WK7tRf3nIc40k/5jRgbTZDpTo  |
 +---------+---------+-----------------------------------------------------+
 | ED25519 | MD5     | MD5:d1:5a:04:56:37:f4:75:19:22:e6:e5:d7:41:fd:79:fa |
 | ED25519 | SHA-256 | SHA256:QVdqYeVzvsP4n5yjuN3D2fu8hDhskOxQCQAV5f9QK7w  |
 +---------+---------+-----------------------------------------------------+

 +---[RSA 2048]----+ +---[RSA 2048]----+ +---[ECDSA 256]---+ +---[ECDSA 256]---+ +--[ED25519 256]--+ +--[ED25519 256]--+
 |.oE.   +.++      | |        .o+=     | |      ... Eoo    | |  .. o.o..      .| |        ooo++o.+*| |   .o++o. +oo    |
 |  .   o +oo.     | |        .o= =    | |     +.=.=.o .   | | . .o *..      ..| |       . oo.+o.o=| |      ...o.+     |
 |   + . . o.=     | |       ... X +   | |    . X.o.*      | |o o  ++o      .. | |        . o. ...+| |       ..oo.o .  |
 |    = +  .+ o    | |      ..  = + o  | |     + = o o     | |.+  .o.o     .o  | |         +    ..o| |        =oo .+   |
 |   o o .S  .     | |     . .S  o o   | |    . = S   .    | |...  oo.S  .E* * | |        S      ..| |       .SO .  .  |
 |    +            | |    . E. =o..    | |     o           | | .. o.  . o *.O o| |              .  | |        o B .o.. |
 |   o             | | .o. *.o. *.     | |                 | |   ...   . o * * | |               . | |         E *..=.o|
 |    .            | | oo=...  +.      | |                 | |    +.      o + o| |                E| |          . +.+B+|
 |                 | |o+=.o....o+o     | |                 | |   .o+         . | |                 | |           o.ooOX|
 +------[MD5]------+ +----[SHA256]-----+ +------[MD5]------+ +----[SHA256]-----+ +------[MD5]------+ +----[SHA256]-----+
Run Code Online (Sandbox Code Playgroud)

这只是使用来自JonnyJD's answer 的信息的漂亮打印。谢谢。

  • 我使它更健壮并稍微改进了功能;0.3 版(带更新日志)在这里:https://github.com/unixnut/scripts/blob/master/ssh_fprint 感谢您写这篇文章,太棒了! (2认同)

小智 8

事实证明 ssh-keygen(在 6.6 版之后的某个时间;大概是 6.8 版)有一个-E md5选项,可以将指纹打印为 md5 指纹。因此,如果您可以独立抓取服务器的公钥文件,您就可以将其输入ssh-keygen -E md5 -l -f ssh_host_rsa_key.pub并获取您熟悉的指纹。

  • 所有这些都已经在上一个格式良好的答案中了。 (2认同)