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

时间:2015-01-19 20:28:52

标签: vb.net winscp winscp-net

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

我似乎缺少的一个“关键”事情是,除非用户能够提供,否则应用程序似乎没有办法验证使用SSH-Key连接的主机。 / p>

我们知道通常情况并非如此,我仍然希望在没有用户使用第三方程序的情况下使用SSH密钥来获取它。

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

ConnectionOption.SshHostKeyFingerprint= SSHkeyString

OR

ConnectionOptions.GiveUpSecurityAndAcceptAnySshHostKey = True

如果您还不知道密钥是什么,则您无权选择后者,我假设您可以通过在建立连接后调用此密钥来获取SSH主机密钥的属性:< / p>

MessageBox.Show(ConnectionOption.SshHostKeyFingerprint)

但返回空结果。

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

似乎有一些其他库似乎具有此功能,但我找到的是商业许可。我想即使是具有该功能的常规SSH连接器(没有ftp)也可以工作 - 只需要获取SSH密钥 - 如果我能找到它。

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

1 个答案:

答案 0 :(得分:2)

从WinSCP 5.8.x开始,您可以使用Session.ScanFingerprint method来实现交互式主机密钥验证。

Implementing SSH host key cache (known hosts)有C#和PowerShell示例 使用VB.NET重新实现它应该不难。