我在尝试通过 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/