【问题标题】:WinSCP .NET assembly refusing RSA/DSA key fingerprintWinSCP .NET 程序集拒绝 RSA/DSA 密钥指纹
【发布时间】:2014-01-14 08:22:37
【问题描述】:

我正在尝试使用 WinSCP .NET 程序集连接到 WinSCP 服务器。我遇到的问题是它会检查主机密钥指纹。我创建了一个 RSA 密钥。我的代码如下:

var server = new WinSCP.SessionOptions();
server.UserName = "ftp_user";
server.Password = "******";
server.HostName = "192.x.x.x";
server.Protocol = WinSCP.Protocol.Sftp;
server.SshHostKeyFingerprint =
    "9f:39:52:d5:08:0c:1d:a8:02:c9:7e:44:49:7f:44:fb";

var session = new WinSCP.Session();            
session.Open(server);

SshHostKeyFingerprint 属性分配中,我收到以下错误:

SSH 主机密钥指纹 “9f:39:52:d5:08:0c:1d:a8:02:c9:7e:44:49:7f:44:fb”不匹配 模式 /(ssh-rsa |ssh-dss )?\d+ ([0-9a-f]{2}:){15}[0-9a-f]{2}(;(ssh-rsa |ssh-dss )?\d+ ([0-9a-f]{2}:){15}[0-9a-f]{2})*/

如果我没看错,它正在检查 15 2 个字符集,我正在分配一个 16 个字符集。我从服务器获得了这个值。

更新: 我缺少的是指纹类型(ssh-dssssh-rsa)及其大小(10242048 等)。因此,答案如下:

server.SshHostKeyFingerprint =
    "ssh-rsa 1024 9f:39:52:d5:08:0c:1d:a8:02:c9:7e:44:49:7f:44:fb";

如果我正确读取正则表达式,它不会让您知道在指纹类型之后需要指纹大小。

我希望这对其他人有所帮助。感谢大家的见解和意见。

【问题讨论】:

    标签: c# .net winscp winscp-net rsa-key-fingerprint


    【解决方案1】:

    您缺少ssh-rsa 前缀(只是表面上是可选的)和密钥大小。

    您可以在Server and Protocol Information Dialog获取正确格式的指纹:

    虽然最简单的方法是使用正确的值将 WinSCP GUI 函数设置为 generate a code template

    详情见Where do I get SSH host key fingerprint to authorize the server?


    请注意,它实际上是在寻找 16 对(15 对后跟一个冒号和一个尾随对)。


    即将推出的 WinSCP 5.16 将允许像您一样只使用校验和。尽管无论如何都不建议省略键类型前缀。如果没有前缀,WinSCP 可能会同意服务器在另一种(更好的)主机密钥类型上,而不是您拥有校验和的主机密钥类型。那么验证显然会失败。

    【讨论】:

      【解决方案2】:
      /(ssh-rsa |ssh-dss )?\d+ ([0-9a-f]{2}:){15}[0-9a-f]{2}(;(ssh-rsa |ssh-dss )?\d+ ([0-9a-f]{2}:){15}[0-9a-f]{2})*/
      

      这会查找 15 对十六进制数字,每对后有一个冒号,然后再查找一对没有冒号的。所以不是 15/16 是你的问题。剩下的就这些了。

      有一堆可选组件,但您缺少的强制性组件是十六进制之前的\d+。这是一个十进制数,显然表示密钥大小,可能类似于 1024 或 2048 或 4096。先放它,然后是空格,然后是十六进制的东西。

      【讨论】:

        猜你喜欢
        • 2013-10-30
        • 2012-03-25
        • 1970-01-01
        • 2013-05-07
        • 2020-03-08
        • 2016-11-08
        • 1970-01-01
        • 2013-01-12
        相关资源
        最近更新 更多