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