我正在尝试使用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-dss
或ssh-rsa
)及其大小(1024
,2048
等)。因此,答案如下:
server.SshHostKeyFingerprint =
"ssh-rsa 1024 9f:39:52:d5:08:0c:1d:a8:02:c9:7e:44:49:7f:44:fb";
如果我正确阅读正则表达式,它不会让您知道指纹类型后需要指纹大小。
我希望这有助于其他人。感谢大家的见解和投入。
答案 0 :(得分:4)
您缺少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对后跟冒号和一对尾随)。
答案 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.首先放置一个空格,然后放入十六进制数。