使用WinSCP .NET程序集连接SFTP服务器时,出现“主机密钥与配置的密钥不匹配”的错误。

4

在尝试使用C#实现SFTP连接时,我遇到了一些问题。目前,我可以使用WinSCP连接我的主机、端口、登录名、密码和密钥文件(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为Protocol.Sftp或Protocol.Scp,但SessionOptions.SshHostKeyFingerprint未设置。

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

主机密钥与配置的密钥不匹配

这是什么意思?这意味着我必须在服务器上拥有此密钥吗?如果是这样,在哪里应该放置此密钥?在这种情况下,为什么我可以通过WinSCP连接而不传递此指纹?
谢谢!

1个回答

4
SshHostKeyFingerprint必须设置为服务器公钥(也称为主机密钥)的指纹,而不是您的身份验证密钥对(本地ppk文件)的公钥。请参阅WinSCP网站上的了解SSH密钥对文章。
WinSCP GUI 可能会工作,因为它具有特定服务器的SSH主机密钥的缓存副本。
看起来在 WinSCP 网站上有一些关于如何在.NET中获取SshHostKeyFingerprint的信息的相关信息。甚至有一个标志可以用来跳过主机密钥验证(不安全:您可能正在连接到另一台服务器或者可能会发生中间人攻击)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接