【问题标题】:Getting SSH host key from WinSCP .NET assembly connection从 WinSCP .NET 程序集连接获取 SSH 主机密钥
【发布时间】:2015-01-19 20:28:52
【问题描述】:

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

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

我们知道这通常不是这种情况,我希望在用户不使用 3rd 方程序获取它的情况下仍然使用 SSH 密钥。

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

ConnectionOption.SshHostKeyFingerprint= SSHkeyString

ConnectionOptions.GiveUpSecurityAndAcceptAnySshHostKey = True

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

MessageBox.Show(ConnectionOption.SshHostKeyFingerprint)

但这会返回一个空结果。

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

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

所以我的问题是
如何使用 WinSCP .NET 程序集从连接的服务器检索未知的 SSH 密钥?

是否有另一个免费可用的库可以让我检索所述 SSH 密钥?

【问题讨论】:

  • 如果用户不知道密钥,如何验证密钥?
  • winSCP FAQ 中所述,用户在首次连接之前通常无法获取密钥。我知道这不是最安全的,而是因为用户不知道而完全禁用对主机密钥的检查;如果将来的连接发生变化,至少可以通知用户。

标签: vb.net winscp winscp-net


【解决方案1】:

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

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

【讨论】:

  • 好的,既然 WinSCP 缺少我正在寻找的这个功能,是否有不同的库可用于获取 SSH 密钥?我的应用程序不以交互方式使用 sFTP,只是设置传输的内容。另外,感谢您对属性名称的更正,我已经更新了问题。
  • @TheOddPerson WinSCP 现在已经支持这一点。请参阅我的更新答案。
  • 非常感谢。这是最有帮助的。我希望我能在这里再给你一个赞成票:)
猜你喜欢
  • 1970-01-01
  • 2014-04-03
  • 1970-01-01
  • 2020-03-08
  • 1970-01-01
  • 2014-01-14
  • 2019-12-03
  • 2020-07-15
  • 1970-01-01
相关资源
最近更新 更多