如何转换 SSH 主机密钥以进行验证?

问题描述 投票:0回答:0

使用

SSH.NET
,我正在尝试从我的 SSH 主机(在本例中为 Raspberry Pi)获取
ed25519
rsa
主机密钥。

文档演示了这种技术,但是

e.FingerPrint
包含一个 16 元素的字节数组(不清楚该数组到底代表什么)。但是,我希望复制内置 Win11 SSH 客户端的功能,该客户端以这种格式检索主机密钥并将其存储在文件
%USERPROFILE%\.ssh\known_hosts
中:

offsite ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAICuy9wsbY7fBFFoB6K0RU/BsISB3mL4PQ3311ta0S/cW
offsite ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDAEmXakR9rh5Sokj/PvmyiL/tZtQp7OPbQYb9PdlQjPXELJpBZkFs5gnoqxFj5ysqKnBREY/GpOKkXxdh5dMGGzoir93ypicI7A1VQTd3d8WQdtV1tnP7u9hbAfSqtj+7OGCsi0eMUBYx1fS3XbSC1jKr2MG2ovMCp3kdHtDoGrysP5ai0EXY07ZMmTpxTJbZFtZ8IX3U+ON71KIfZSC6UqlptFyFh1SUmpZXbnsbSr4BDoI8fG0A9Km9BTohWK9ioPSLL530KXz72S4EaBgx0Za1c+TGPqnjAu+s9kc0DeBrwLTEZzfS40xj+sdM4IvPERMBZAPH6cmMutHNWVtIdPyiTi93gCn8oz3D0UX8QT3Yc9Qhx0KLw7AzLajAXSc7zdOebtovZmOejyl4YrYO4Q2rZ3ODTqotFgXGJWNFkg/PoV+Yzy4tILOujDlTHUv3/BkFaj4TSnzgl7NzstdZpNM1R0KBkHlDuM10K9yyLEmNlHSvx8zTZWBTEkzb1FoU=

我试过遍历 SSH.NET 的

Client.ConnectionInfo.HostKeyAlgorithms
字典,但我不确定从哪里获取条目值调用所需的字节数组:

Dim aData As Byte() = Nothing

For Each oAlgorithm In oClient.ConnectionInfo.HostKeyAlgorithms
  Dim oInstance = oAlgorithm.Value(aData)
End For

该代码失败,因为

Func(Of Byte(), KeyHostAlgorithm)
调用需要一个包含元素的实际数组。它还拒绝空数组(以及任何其他数组)。例如:

oAlgorithm.Value({})

请求的长度(4)大于实际读取的字节数(0)。参数名称:length

oAlgorithm.Value({0, 1, 2})

请求的长度(4)大于实际读取的字节数(3)。参数名称:length

oAlgorithm.Value({0, 1, 2, 3})

不支持超过 2147483647 的数据。

这里有什么?那个字节数组参数应该是什么,从哪里得到它?

我也在

Client.HostKeyReceived
事件处理程序中尝试过这个:

Dim sFingerprint = Convert.ToBase64String(New SHA256Managed().ComputeHash(e.HostKey))

但是计算出的 Base64 字符串与我的

known_hosts
文件中当前针对该主机的条目不同。

如何从 SSH 主机检索各种密钥,以匹配

known_hosts
(特别是
ed25519
rsa
)中的内容的方式?

--编辑--

我已经成功地发现了要在函数调用中使用的字节数组:

oHandler = Sub(Sender As SshClient, e As HostKeyEventArgs)
             Dim aData As Byte()

             For Each oAlgorithm In Sender.ConnectionInfo.HostKeyAlgorithms
               Dim oInstance = oAlgorithm.Value(e.HostKey)

               If TypeOf oInstance.Key Is Ed25519Key Then
                 aData = DirectCast(oInstance.Key, Ed25519Key).PublicKey
                 Exit For
               End If
             Next
           End Sub

但是,

aData
计算出的Base64 仍然与Win11 SSH 客户端的输出不匹配。有谁知道这些值是如何得出的?

c# vb.net rsa ssh.net ed25519
© www.soinside.com 2019 - 2024. All rights reserved.