WinSCP .NET程序集拒绝RSA / DSA密钥指纹

时间:2013-12-26 17:44:03

标签: winscp rsa-key-fingerprint winscp-net

我正在尝试使用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”不匹配   pattern /(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";

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

我希望这有助于其他人。感谢大家的见解和投入。

2 个答案:

答案 0 :(得分:4)

您缺少ssh-rsa前缀(只是看似可选)和密钥大小。

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

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对后跟冒号和一对尾随)。

答案 1 :(得分: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.首先放置一个空格,然后放入十六进制数。