c# - 使用 WinSCP .NET 程序集连接到 SFTP 服务器时为 "Host key does not match configured key"

标签 c# .net sftp winscp winscp-net

我在尝试通过 C# 实现 SFTP 连接时遇到了一些问题。目前我可以使用 WinSCP 连接我的主机、端口、登录名、密码和 key 文件(ppk 文件)。

我的实现就像这样使用 WinSCP .NET:

SessionOptions sessionOptions = new SessionOptions
{
    Protocol              = Protocol.Sftp,
    HostName              = "",
    UserName              = "",
    SshHostKeyFingerprint = "",
    SshPrivateKeyPath     = "",
    PrivateKeyPassphrase  = ""
};

using (Session session = new Session ())
{
    session.Open (sessionOptions);
}

session.Open 中,我总是收到异常。当我不填写 SshHostKeyFingerprint 参数时,我收到以下异常:

SessionOptions.Protocol is Protocol.Sftp or Protocol.Scp, but SessionOptions.SshHostKeyFingerprint is not set.

然后我用 PuTTYgen 打开了我的 ppk 文件。之后我复制了“ key 指纹”并放入我的代码中。现在我收到以下异常:

Host key does not match configured key

这是否意味着我的服务器中必须有这个 key ?如果是这样,我应该把这个 key 放在哪里?在这种情况下,为什么我可以通过 WinSCP 连接而不通过此指纹?

谢谢!

最佳答案

SshHostKeyFingerprint 必须设置为服务器公钥(也称为主机 key )的指纹,而不是身份验证 key 对(本地 ppk 文件)的公钥。 参见 Understanding SSH key pairs WinSCP 网站上的文章。

WinSCP GUI 可能有效,因为它有一个缓存的 SSH 主机 key 副本,从您第一次在此特定服务器上使用 WinSCP 时起。

WinSCP 站点上似乎有关于 how you might go about getting SshHostKeyFingerprint within .NET 的一些信息.甚至还有一个标志可用于跳过主机 key 验证(不安全:您可能正在连接到不同的服务器,或者有人可能 MITM 连接)。

关于c# - 使用 WinSCP .NET 程序集连接到 SFTP 服务器时为 "Host key does not match configured key",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49014267/

相关文章:

c# - 如何枚举所有可用的无线网络并将它们显示在列表框中?

c# - STM.NET 与 Clojure STM

c# - 访问 SFTP 站点 : The requested name is valid, 时出现异常,但未找到请求类型的数据

javascript - Node.js 如何在没有任何信息的情况下悄无声息地崩溃?

c# - 多次实例化类的性能问题

c# - 我实现 IEnumerator 和 IEnumerable 的类不会转到 foreach 语句

c# - 在 Internet 中断时继续尝试与服务器通信

amazon-ec2 - EC2 上的 Sublime 文本 SFTP

c# - Java套接字服务器,C#套接字客户端,通信问题?

c# - 如何根据单选按钮列表验证文本框条目?