Каков правильный синтаксис для WinSCP Session.ScanFingerprint()?

Мне нужно использовать WinSCP API для программного получения отпечатков пальцев с удаленных протокольных устройств в нашей сети. Прямо сейчас это делается утомительно, открывая сеанс WinSCP с пользовательским интерфейсом Windows и транскрибируя отпечатки пальцев из всплывающего окна, отображаемого, когда он собирается кэшироваться.

Я вижу в документации, где я могу использовать Session.ScanFingerprinт для этого, но, похоже, возвращает строку 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;
    }
}

Я предоставляю неверный параметр алгоритма, или мне нужно заново интерпретировать полученную строку?

1 ответ

Решение

Это отпечаток SHA-256 в кодировке Base64, возвращенный для algorithm = "SHA-256":

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

Это шестнадцатеричный отпечаток MD5, возвращенный для algorithm = "MD5":

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

Смотрите документацию для algorithm аргумент Session.ScanFingerprint,

Вы должны использовать SHA-256, если это возможно, так как MD5 больше не считается безопасным.

WinSCP понимает оба (оба могут быть использованы для SessionOptions.SshHostKeyFingerprint, за -hostkey переключиться в сценарии WinSCP или в любом другом месте).


Также обратите внимание, что нет необходимости устанавливать UserName, Password, GiveUpSecurityAndAcceptAnySshHostKey, AuthGSSAPI или же Cipher за Session.ScanFingerprint вызов.

Другие вопросы по тегам