SSH 主机密钥指纹...与模式不匹配...在 C# 中使用 WinSCP .NET 程序集下载文件时

SSH host key fingerprint ... does not match pattern ... when using WinSCP .NET assembly in C# to download files

我正在编写一个 C# 应用程序(如果我能让它正常工作,我想最终创建一个 Windows 服务)以使用 SCP 从服务器下载文件(我仅限于 SCP 作为唯一选项) .我正在使用 WinSCP .NET 程序集(v 5.15.3)。

我的 PC 和服务器之间有一个 SSH 隧道,因此可以从命令行执行以下操作:

ssh user:server

我 运行 在我的代码中设置 SshHostKeyFingerprint 时遇到了问题。

WinSCP.SessionOptions options = new WinSCP.SessionOptions();

options.HostName = "ip address";
options.Password = "password";
options.PortNumber = 22;
options.UserName = "username";
options.Protocol = WinSCP.Protocol.Scp;
options.SshHostKeyFingerprint = "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCkVu2A3SLLdTulOQ1XyGY......"; //full ssh key    

为了便于阅读,我缩短了 SSH 密钥。

分配 SshHostKeyFingerprint 时出现以下错误:

SSH host key fingerprint "ssh-rsa 2048 AAAAB3NzaC1yc2EAA......" does not match pattern /((ssh-rsa|ssh-dss|ssh-ed25519|ecdsa-sha2-nistp(256|384|521))( |-))?(\d+ )?(([0-9a-f]{2}(:|-)){15}[0-9a-f]{2}|[0-9a-zA-Z+/]{43}=)(;((ssh-rsa|ssh-dss|ssh-ed25519|ecdsa-sha2-nistp(256|384|521))( |-))?(\d+ )?(([0-9a-f]{2}(:|-)){15}[0-9a-f]{2}|[0-9a-zA-Z+/]{43}=))*/

我想我分配了一个错误的 SSH 密钥(我已经尝试了客户端和服务器 public 密钥)。谁能指出我正确的方向?谢谢。

注意:我曾尝试使用批处理文件执行此操作,但我无法在没有登录服务器的情况下按计划运行执行此操作。

应该去SessionOptions.SshHostKey**Fingerprint**的是SSH主机密钥的指纹。您正在使用 完整 主机密钥(您甚至在评论中说的)。

另请参阅 WinSCP 常见问题解答 Where do I get SSH host key fingerprint to authorize the server?


WinSCP GUI 可以为您generate a correct code template,包括指纹(假设您至少登录过一次):