【问题标题】:Retrieve host fingerprint without authenticating?无需身份验证即可检索主机指纹?
【发布时间】:2018-03-30 13:54:29
【问题描述】:

有什么方法可以检索远程主机指纹,而无需传递凭据或以其他方式向设备进行身份验证?

有一个 ssh.net 示例,其中展示了如何验证主机指纹,但它需要凭据。 SshClient 没有不带用户名的构造函数,甚至 ConnectionInfo 类也需要一个,所以我不确定如何最好地继续。

虽然我确实找到了NuDoq 存储库,但文档并不多,但是这个类非常大,示例有限,因此任何正确方向的观点都值得赞赏!

这是他们给出的示例,但需要身份验证:

byte[] expectedFingerPrint = new byte[] {
                                            0x66, 0x31, 0xaf, 0x00, 0x54, 0xb9, 0x87, 0x31,
                                            0xff, 0x58, 0x1c, 0x31, 0xb1, 0xa2, 0x4c, 0x6b
                                        };

using (var client = new SshClient("sftp.foo.com", "guest", "pwd"))
{
    client.HostKeyReceived += (sender, e) =>
        {
            if (expectedFingerPrint.Length == e.FingerPrint.Length)
            {
                for (var i = 0; i < expectedFingerPrint.Length; i++)
                {
                    if (expectedFingerPrint[i] != e.FingerPrint[i])
                    {
                        e.CanTrust = false;
                        break;
                    }
                }
            }
            else
            {
                e.CanTrust = false;
            }
        };
    client.Connect();
}

【问题讨论】:

  • 为什么要找回指纹? + 你指的是什么例子?
  • 我们维护了一个关键指纹数据库,我需要遍历我们所有的设备,枚举当前指纹并将其与存储的指纹进行比较。

标签: c# .net ssh ssh.net


【解决方案1】:

HostKeyReceived 发生在任何身份验证之前。验证前必须验证主机密钥,以免客户端无意中将凭据发送到恶意服务器或 MITM。

所以凭据无关紧要。只需在构造函数中提供虚拟凭据,检查事件处理程序中的指纹,然后中止连接。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-24
    • 2010-12-17
    • 2017-03-04
    • 1970-01-01
    相关资源
    最近更新 更多