从 WinSCP .NET 程序集连接获取 SSH 主机密钥

Getting SSH host key from WinSCP .NET assembly connection

我正在使用 WinSCP .NET 程序集构建基于 SFTP 的应用程序。

一个 'key' 我似乎遗漏的事情是,应用程序似乎没有办法使用 SSH 密钥验证它连接到的主机,除非用户能够提供。

据我们所知,通常情况并非如此,我仍希望在用户不使用第 3 方程序获取 SSH 密钥的情况下继续使用它。

在建立连接之前,您需要设置:

ConnectionOption.SshHostKeyFingerprint= SSHkeyString

ConnectionOptions.GiveUpSecurityAndAcceptAnySshHostKey = True

如果您还不知道密钥是什么,您别无选择,我假设您可以通过在之后调用它来获取 SSH 主机密钥的 属性建立连接:

MessageBox.Show(ConnectionOption.SshHostKeyFingerprint)

但是 returns 一个空结果。

我查看了 .NET 连接器的文档,似乎没有办法检索您连接到的服务器的 SSH 密钥。

似乎还有一些其他库似乎具有此功能,但我发现的那些库已获得商业许可。我想即使是具有这种能力的常规 SSH 连接器(没有 ftp)也可以工作 - 只是为了获取 SSH 密钥 - 如果我能找到的话。

所以我的问题是
如何使用 WinSCP .NET 程序集从连接的服务器检索未知的 SSH 密钥?
或者
是否有另一个 - 免费可用的 - 库使我能够检索所述 SSH 密钥?

您可以使用 Session.ScanFingerprint method 实现交互式主机密钥验证。

Implementing SSH host key cache (known hosts) 的 C# 和 PowerShell 示例。
使用VB.NET.

重新实现应该不难