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

Posted

技术标签:

【中文标题】SSH 主机密钥指纹...与模式不匹配...在 C# 中使用 WinSCP .NET 程序集下载文件时【英文标题】:SSH host key fingerprint ... does not match pattern ... when using WinSCP .NET assembly in C# to download files 【发布时间】:2019-12-03 21:20:16 【问题描述】:

我正在编写一个 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 主机密钥指纹“ssh-rsa 2048 AAAAB3NzaC1yc2EAA......”不匹配模式 /((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 密钥(我已经尝试过客户端和服务器公钥)。谁能指出我正确的方向?谢谢。

注意:我确实尝试使用批处理文件执行此操作,但如果没有登录服务器,我无法按计划运行。

【问题讨论】:

不设置指纹试试,如果要验证你连接的服务器确实是你要连接的服务器并且没有被欺骗,需要指定指纹。 嗨@Sawrub,这对我不起作用,但 Martin Prikryl 设法给了我答案,谢谢。 【参考方案1】:

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

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


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

【讨论】:

以上是关于SSH 主机密钥指纹...与模式不匹配...在 C# 中使用 WinSCP .NET 程序集下载文件时的主要内容,如果未能解决你的问题,请参考以下文章

调试时生成的证书 SHA1 指纹与我正在使用的密钥库不匹配

Git 错误:无法与 XX.XX.XXX.XXX 协商:找不到匹配的主机密钥类型。他们的提议:ssh-dss [重复]

如何在 open-ssh 和 dropbear 之间匹配 ECDSA 指纹

计算 RSA 密钥指纹

lftp 错误:端口 22:找不到匹配的主机密钥类型。他们的提议:ssh-dss

ssh-keygen 命令