Сборка WinSCP .NET, отказывающаяся от отпечатка ключа RSA/DSA

Я пытаюсь подключиться к серверу WinSCP с помощью сборки WinSCP .NET. Проблема, которую я имею, состоит в том, что это бомбы, проверяющие отпечаток ключа хоста. Я создал ключ 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" не соответствует шаблону /(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-е]{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";

Если я правильно читаю регулярное выражение, это не дает вам никакого представления о том, что вам нужен размер отпечатка пальца после типа отпечатка пальца.

Я надеюсь, что это помогает кому-то еще. Спасибо всем за понимание и вклад.

2 ответа

Вы скучаете по ssh-rsa префикс (необязательно только на первый взгляд) и размер ключа.

Вы можете получить отпечаток пальца в правильном формате в диалоге информации о сервере и протоколе:

Информация о сервере и протоколе

Хотя самый простой способ - использовать WinSCP GUI для создания шаблона кода с правильным значением.

Подробнее см. Где получить отпечаток ключа хоста SSH для авторизации сервера?

Обратите внимание, что он на самом деле ищет 16 пар (15 пар, за которыми следует двоеточие и одна трейлинг-пара).

/(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. Сначала поставьте его, затем пробел, затем шестнадцатеричный код.

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