我正在使用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密钥?
答案 0 :(得分:2)
从WinSCP 5.8.x开始,您可以使用Session.ScanFingerprint
method来实现交互式主机密钥验证。
Implementing SSH host key cache (known hosts)有C#和PowerShell示例 使用VB.NET重新实现它应该不难。