Сборка 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-f] {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";

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

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


person Jim    schedule 26.12.2013    source источник


Ответы (2)


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

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

Диалог информации о сервере и протоколе

Хотя самый простой способ - использовать функцию графического интерфейса WinSCP, чтобы сгенерировать шаблон кода с правильным значением .

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


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


Предстоящая версия WinSCP 5.16 позволит использовать только контрольную сумму, как вы. Хотя в любом случае не рекомендуется опускать префикс типа ключа. Без префикса WinSCP может согласовать с сервером другой (лучший) тип ключа хоста, чем тот, для которого у вас есть контрольная сумма. И тогда проверка, очевидно, не удастся.

person Martin Prikryl    schedule 26.12.2013

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

person Community    schedule 26.12.2013