.net WinSCP Session.ScanFingerprint()的正确语法是什么?

8xiog9wr  于 2023-01-06  发布在  .NET
关注(0)|答案(1)|浏览(168)

我需要使用WinSCP API以编程方式从网络上的远程协议设备检索指纹。目前,这是通过打开Windows UI WinSCP会话并从即将缓存指纹时显示的弹出窗口转录指纹来完成的,这很繁琐。
我在文档中看到可以使用Session.ScanFingerprin t执行此操作,但它似乎返回了一个ASCII字符串:

ssh-rsa 1040 Rrt2/hXxs+i3Ugz1YeZUXIk/gjliFNyyA9WHBYCu0m8=

而不是我期待的十六进制编码值

ssh-rsa 1040 ef:aa:a1:30:79:12:c7:f8:02:36:d0:ac:71:6b:5b:24

ScanFingerprint需要一个algorithm参数,我将其作为字符串"SHA-256"提供;我还没有找到任何例子来说明这是否正确。
下面是我使用的代码:

SessionOptions sessionOptions = new SessionOptions
{
    Protocol = Protocol.Scp,
    HostName = "xxx.xxx.xxx.xxx", // IP address
    UserName = "root",
    Password = "root",

    //SshHostKeyFingerprint = fingerprint
    GiveUpSecurityAndAcceptAnySshHostKey=true
};
sessionOptions.AddRawSettings("AuthGSSAPI", "1");
sessionOptions.AddRawSettings("Cipher", "aes,blowfish,3des,chacha20,WARN,arcfour,des");
sessionOptions.AddRawSettings("KEX", "ecdh,dh-gex-sha1,dh-group14-sha1,dh-group1-sha1,rsa,WARN");
Session session;
using (session = new Session())
{
    //session.DisableVersionCheck = true;
    try
    {
        Log("Opening session");
        string fingerprint = null;
        fingerprint = session.ScanFingerprint(sessionOptions,"SHA-256");
        string t = fingerprint;
    }
    catch (Exception ex)
    {
        Log("WinSCP: " + ex.Message);
        return;
    }
}

我是否提供了错误的算法参数,或者我是否需要重新解释正在检索的指纹字符串?

vawmfj5a

vawmfj5a1#

这是针对algorithm = "SHA-256"返回的Base64编码SHA-256指纹:

ssh-rsa 1040 Rrt2/hXxs+i3Ugz1YeZUXIk/gjliFNyyA9WHBYCu0m8=

这是algorithm = "MD5"返回的十六进制编码MD5指纹:

ssh-rsa 1040 ef:aa:a1:30:79:12:c7:f8:02:36:d0:ac:71:6b:5b:24

有关Session.ScanFingerprintalgorithm参数,请参见文档。
如果可能,您应该使用SHA-256,因为MD5不再被认为是安全的。
WinSCP理解这两者(两者都可以用于SessionOptions.SshHostKeyFingerprint、WinSCP脚本中的-hostkey开关或其他任何地方)。

  • 另请注意,对于Session.ScanFingerprint调用,无需设置UserNamePasswordGiveUpSecurityAndAcceptAnySshHostKey(已被SshHostKeyPolicy取代)、AuthGSSAPICipher。*

相关问题