1

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

我似乎缺少的一个“关键”事情是,除非用户能够提供,否则应用程序似乎无法使用 SSH 密钥验证它连接到的主机。

我们知道这通常不是这种情况,我想仍然使用 SSH 密钥,而不需要用户使用 3rd 方程序来获取它。

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

ConnectionOption.SshHostKeyFingerprint= SSHkeyString

或者

ConnectionOptions.GiveUpSecurityAndAcceptAnySshHostKey = True

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

MessageBox.Show(ConnectionOption.SshHostKeyFingerprint)

但这会返回一个空结果。

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

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

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

4

1 回答 1

2

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

有用于实现 SSH 主机密钥缓存(已知主机)的 C# 和 PowerShell 示例。
使用 VB.NET 重新实现它应该不难。

于 2015-01-20T08:13:30.947 回答