c# - 无需身份验证即可检索主机指纹?

标签 c# .net ssh ssh.net

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

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

虽然我确实找到了 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();
}

最佳答案

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

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

关于c# - 无需身份验证即可检索主机指纹?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49575781/

相关文章:

c# - 安装必须以管理员身份运行的程序

c# - 如何在 C# 中从 System.Array 转换为 object[]

shell - 如何编写将在通过 ssh 连接的设备上执行的命令?

linux - 查找 Apache2/Ubuntu 中消耗最高资源的进程、脚本或连接

开始使用 token 后,Windows 客户端中的 git pull over ssh 挂起

c# - 需要创建存储过程但有问题

c# - 将服务器端 Blazor 添加到现有 MVC 核心应用

c# - SQL DataReader 在循环中缺少一行

.net - 在导入/导出时具有 Markdown 功能的 GUI 控制

c# - 有没有办法强制使用 dll 版本?