我正在尝试使用 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);
At the 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 个字符集。我从服务器获取了这个值。
UPDATE:我缺少的是指纹类型(ssh-dss
or ssh-rsa
)及其大小(1024
, 2048
ETC。)。因此,答案如下:
server.SshHostKeyFingerprint =
"ssh-rsa 1024 9f:39:52:d5:08:0c:1d:a8:02:c9:7e:44:49:7f:44:fb";
如果我正确地读取正则表达式,它不会让您知道在指纹类型之后需要指纹大小。
我希望这对其他人有帮助。感谢大家的见解和意见。
你错过了ssh-rsa
前缀(看起来只是可选的)和密钥大小。
您可以在以下位置获取正确格式的指纹服务器和协议信息对话框 https://winscp.net/eng/docs/ui_fsinfo:
虽然最简单的方法是使用 WinSCP GUI 功能生成代码模板 https://winscp.net/eng/docs/ui_generateurl#code具有正确的值。
详情请参阅从哪里获取 SSH 主机密钥指纹来授权服务器? https://winscp.net/eng/docs/faq_hostkey
请注意,它实际上正在查找 16 对(其中 15 对后跟一个冒号和一个尾随对)。
由于 WinSCP 5.16 实际上允许像您一样仅使用校验和。但无论如何都不建议省略键类型前缀。如果没有前缀,WinSCP 可能会与服务器就另一种(更好的)主机密钥类型达成一致,而不是您拥有校验和的主机密钥类型。那么验证显然会失败。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)