Пример загрузки/выгрузки файлов на SFTP сервер из 1С
К сожалению 1С пока не позволяет своими средствами обмениваться файлами с SFTP сервером.
Столкнувшись с этой проблемой, оптимальным для себя выбрал вариант с использованием бесплатного SFTP клиента:WinSCP.
Я не нашел в сети примеров работы 1С с этой утилитой через COM-соединение, поэтому выкладываю свой. Возможно кому-то будет полезен.
Столкнувшись с этой проблемой, оптимальным для себя выбрал вариант с использованием бесплатного SFTP клиента:WinSCP.
Я не нашел в сети примеров работы 1С с этой утилитой через COM-соединение, поэтому выкладываю свой. Возможно кому-то будет полезен.
Комментарии
В избранное
Подписаться на ответы
Сортировка:
Древо развёрнутое
Свернуть все
Добрый день!
Очень благодарен за информацию!
Только у меня не получается подключиться.
Не пойму что нужно указать в поле "SshHostKeyFingerprint"
где взять значение для этого поля?
Через обычного клиента WinSCP подключаюсь нормально. Там просто указываю адрес, юзера и пароль.
Очень благодарен за информацию!
Только у меня не получается подключиться.
Не пойму что нужно указать в поле "SshHostKeyFingerprint"
где взять значение для этого поля?
Через обычного клиента WinSCP подключаюсь нормально. Там просто указываю адрес, юзера и пароль.
Вывод: данная реализация позволяет передавать файлы из 1С: Предприятие 8.2. большого размера по защищенному протоколу SFTP. Плюс появляется возможность переносить часть функционала из 1С во внешнюю компоненту, что защищает написанный код и позволяет реализовывать дополнительный, не доступный 1С функционал.
исходники открыты.
Установил приложение, зарегил библиотеку, но все равно при попытке создать COM-объект в 1С, ругается
{Форма.Форма.Форма(17)}: Ошибка при вызове конструктора (COMОбъект): Класс не зарегистрирован: Класс не зарегистрирован
Кто-нибудь сталкивался?
{Форма.Форма.Форма(17)}: Ошибка при вызове конструктора (COMОбъект): Класс не зарегистрирован: Класс не зарегистрирован
Кто-нибудь сталкивался?
(13) John83, NET Framework какой? Может это поможет: http://winscp.net/eng/docs/library_install#registering
Ребята, а что таки писать в поле sessionOptions.SshHostKeyFingerprint ?
я вот пишу так:
система мне отвечает так:
Соединение неожиданно разорвано. Сервер вернул код завершения команды 0.
вот от куда беру код:
я вот пишу так:
sessionOptions.SshHostKeyFingerprint = "ssh-rsa 2048 67:13:89:75:aa:5f:b4:9b:e2:f2:da:87:41:a1:d2:d1";
система мне отвечает так:
Соединение неожиданно разорвано. Сервер вернул код завершения команды 0.
вот от куда беру код:
Прикрепленные файлы:
(17) ram3, Все, брат. Получилось. В параметр SshHostKeyFingerprint Я передал публичный ключ сгенерированный самим sftp серваком. А ошибка подключения была в изменненом пароле администратора (я об этом узнал потом).
Огромное спасибо вроде все заработало.
ТОлько единственное не пойму зачем ты перемещаешь файл этой командой -
ПереместитьФайл(ВыгруженныйФайл.FileName, ХранилищеВыгруженныхФайлов);
Если на сервер ты уже закидываешь эти файлы командой
session.PutFiles(ПутьВыгрузки, ПутьЗагрузкиНаФТП); ?
Огромное спасибо вроде все заработало.
ТОлько единственное не пойму зачем ты перемещаешь файл этой командой -
ПереместитьФайл(ВыгруженныйФайл.FileName, ХранилищеВыгруженныхФайлов);
Если на сервер ты уже закидываешь эти файлы командой
session.PutFiles(ПутьВыгрузки, ПутьЗагрузкиНаФТП); ?
(18) sandybaev,
.PutFiles это выгрузка на сервер, а мне еще нужно было сохранять локально все успешно выгруженные файлы, поэтому я сначала проверял результат .Check() , а потом в цикле по коллекции результатов выгрузки сохранял эти же файлы локально, для истории
.PutFiles это выгрузка на сервер, а мне еще нужно было сохранять локально все успешно выгруженные файлы, поэтому я сначала проверял результат .Check() , а потом в цикле по коллекции результатов выгрузки сохранял эти же файлы локально, для истории
Помогите
Как подключится без пароля с приват ключем.
sessionOptions = Новый COMОбъект("WinSCP.SessionOptions"); //Создаем объект SessionOptions
sessionOptions.HostName = "1.1.1.1";
sessionOptions.UserName = "log";
//sessionOptions.Password = "mypassword";
sessionOptions.PortNumber = "22";
sessionOptions.SshHostKeyFingerprint = "ssh-rsa 2048 010101010110101001012010";
sessionOptions.SshPrivateKeyPath = "С:\1111.ppk";
session = Новый COMОбъект("WinSCP.Session"); //Создаем объект Session
//параметр необходимо использовать если пути регистрации DLL и исполняемого файла различны
session.ExecutablePath = "C:\Program Files (x86)\WinSCP\winscp.exe";
// Подключаемся
session.Open(sessionOptions);
Ошибка:
{Обработка.Обработка1.Форма.Форма.Форма(20)}: Ошибка при вызове метода контекста (Open): Произошла исключительная ситуация (WinSCPnet): Disconnected: No supported authentication methods available (server sent: publickey)
Как подключится без пароля с приват ключем.
sessionOptions = Новый COMОбъект("WinSCP.SessionOptions"); //Создаем объект SessionOptions
sessionOptions.HostName = "1.1.1.1";
sessionOptions.UserName = "log";
//sessionOptions.Password = "mypassword";
sessionOptions.PortNumber = "22";
sessionOptions.SshHostKeyFingerprint = "ssh-rsa 2048 010101010110101001012010";
sessionOptions.SshPrivateKeyPath = "С:\1111.ppk";
session = Новый COMОбъект("WinSCP.Session"); //Создаем объект Session
//параметр необходимо использовать если пути регистрации DLL и исполняемого файла различны
session.ExecutablePath = "C:\Program Files (x86)\WinSCP\winscp.exe";
// Подключаемся
session.Open(sessionOptions);
Ошибка:
{Обработка.Обработка1.Форма.Форма.Форма(20)}: Ошибка при вызове метода контекста (Open): Произошла исключительная ситуация (WinSCPnet): Disconnected: No supported authentication methods available (server sent: publickey)
(21) sandybaev,
создавать - CreateDirectory, читай мануалыhttp://winscp.net/eng/docs/library_session , думаю там все найдешь.
и плюсани уж за публикацию)
создавать - CreateDirectory, читай мануалы
и плюсани уж за публикацию)
(22) ram3, отличная публикация! Есть вопрос по такой задаче: необходимо синхронизировать файлы командой SynchronizeDirectories. Пишу:
transferResult = session.SynchronizeDirectories(Local, ПутьЗагрузкиЛокальный, ПутьКФайламНаСервере, Ложь, Ложь, , "*.wav");
Но не знаю, что ставить в первый параметр. По-идее, там должен быть класс SynchronizationMode mode (Например: SynchronizationMode.Local, SynchronizationMode.Remote and SynchronizationMode.Both).
Как его объявить в 1С?
transferResult = session.SynchronizeDirectories(Local, ПутьЗагрузкиЛокальный, ПутьКФайламНаСервере, Ложь, Ложь, , "*.wav");
Но не знаю, что ставить в первый параметр. По-идее, там должен быть класс SynchronizationMode mode (Например: SynchronizationMode.Local, SynchronizationMode.Remote and SynchronizationMode.Both).
Как его объявить в 1С?
спасибо за чудесную реализацию!!!
в сети навалом обработок, но все они работают через командную строку, а тут COM-соединение. То что доктор прописал )))) в благодарность скачал, хотя и качать ничего не нужно, все понятно из текста статьи
в сети навалом обработок, но все они работают через командную строку, а тут COM-соединение. То что доктор прописал )))) в благодарность скачал, хотя и качать ничего не нужно, все понятно из текста статьи
ребята помогите
есть коренвая директория сервера /public
в ней я программно создаю поддиректорию командой session.CreateDirectory("/public" + "ОбластьКонтрагента")
все ок, создается теперь надо дальше в директории области контрагента создать еще одну папку (последнюю) под названием "НаименованиеКонтрагента"
как это сделать через функции WinSCPnet.dll?
перерыл из форум и хэлп, ничего нет.
есть коренвая директория сервера /public
в ней я программно создаю поддиректорию командой session.CreateDirectory("/public" + "ОбластьКонтрагента")
все ок, создается теперь надо дальше в директории области контрагента создать еще одну папку (последнюю) под названием "НаименованиеКонтрагента"
как это сделать через функции WinSCPnet.dll?
перерыл из форум и хэлп, ничего нет.
Коллеги, подскажите как зарегистрировать WinSCP.dll, дело в том, что я в принципе такого файла найти не могу, нашел WinSCPnet.dll.
Зарегистрировал библиотеку командой
в ответ получил
Пытаюсь соединиться по sftp, 1 ска выдает ошибку:
Что не так сделано?
Зарегистрировал библиотеку командой
%WINDIR%\Microsoft.NET\Framework64\v4.0.30319\RegAsm.exe WinSCPnet.dll /codebase /tlb
в ответ получил
Типы зарегистрированы успешно
Сборка экспортирована в "C:\Windows\system32\WinSCPnet.tlb"; библиотека типов зарегистрирована успешно
Сборка экспортирована в "C:\Windows\system32\WinSCPnet.tlb"; библиотека типов зарегистрирована успешно
Пытаюсь соединиться по sftp, 1 ска выдает ошибку:
{ОбщийМодуль.МойМодуль.Модуль(296)}: Ошибка при вызове конструктора (COMОбъект): -2147221164(0x80040154): Недопустимая строка с указанием класса
Что не так сделано?
(37) Dimka74,
(37) Dimka74, в статье описание для версии 515, возможно сейчас что-то изменилось. Здесь есть вся информация по установке и регистрацииhttp://winscp.net/eng/docs/library_install#registering
Коллеги, подскажите как зарегистрировать WinSCP.dll, дело в том, что я в принципе такого файла найти не могу, нашел WinSCPnet.dll.
(37) Dimka74, в статье описание для версии 515, возможно сейчас что-то изменилось. Здесь есть вся информация по установке и регистрации
(38) Спасибо за ответ, от туда информацию и черпал.
Может быть теперь ошибка в коде 1с?
Если изменилась библиотека, быть может теперь надо и код 1с править?
Например раньше надо было так:
а сейчас надо так:
Хотя может быть мои знания устарели, и передача файла по SFTP в 1с возможна без лишних плясок - напрямую из платформы?
Может быть теперь ошибка в коде 1с?
Если изменилась библиотека, быть может теперь надо и код 1с править?
Например раньше надо было так:
sessionOptions = Новый COMОбъект("WinSCP.SessionOptions"); //Создаем объект SessionOptions
а сейчас надо так:
sessionOptions = Новый COMОбъект("WinSCPnet.SessionOptions"); //Создаем объект SessionOptions
Хотя может быть мои знания устарели, и передача файла по SFTP в 1с возможна без лишних плясок - напрямую из платформы?
(39) Dimka74,
Я бы не стал называть это ошибкой, с версией 515 все работает. Если хотите использовать свежую версию, возможно придется адаптировать код. В заголовке статьи написано ПРИМЕР, это не готовое решение на все времена, и пожизненную поддержку никто не обещал.
На сколько я знаю, платформа 1С пока не поддерживает sFTP, только FTPS.
Может быть теперь ошибка в коде 1с?
Если изменилась библиотека, быть может теперь надо и код 1с править?
Если изменилась библиотека, быть может теперь надо и код 1с править?
Я бы не стал называть это ошибкой, с версией 515 все работает. Если хотите использовать свежую версию, возможно придется адаптировать код. В заголовке статьи написано ПРИМЕР, это не готовое решение на все времена, и пожизненную поддержку никто не обещал.
Хотя может быть мои знания устарели, и передача файла по SFTP в 1с возможна без лишних плясок - напрямую из платформы?
На сколько я знаю, платформа 1С пока не поддерживает sFTP, только FTPS.
что значит ошибка:
{ВнешняяОбработка.WinSCP.Форма.Форма.Форма(51)}: Ошибка при вызове метода контекста (Open): Произошла исключительная ситуация (WinSCPnet): Алгоритм обмена ключей diffie-hellman-group1-sha1 не был проверен!
как проверить алгоритм?
{ВнешняяОбработка.WinSCP.Форма.Форма.Форма(51)}: Ошибка при вызове метода контекста (Open): Произошла исключительная ситуация (WinSCPnet): Алгоритм обмена ключей diffie-hellman-group1-sha1 не был проверен!
как проверить алгоритм?
в оболочке нашел как сдвинуть свой алгоритм наверх.
но как в ком... пока ищю
добавил в парамтерах сессии
bool GiveUpSecurityAndAcceptAnyTlsHostCertificate Give up security and accept any FTPS/WebDAVS server TLS/SSL certificate. To be used in exceptional situations only, when security is not required. When set, log files will include warning about insecure connection. To maintain security, use TlsHostCertificateFingerprint.
но не помогло
но как в ком... пока ищю
добавил в парамтерах сессии
bool GiveUpSecurityAndAcceptAnyTlsHostCertificate Give up security and accept any FTPS/WebDAVS server TLS/SSL certificate. To be used in exceptional situations only, when security is not required. When set, log files will include warning about insecure connection. To maintain security, use TlsHostCertificateFingerprint.
но не помогло
Прикрепленные файлы:
Коллеги, после установки 1С платформы 8.3.9 и обновления WinSCP на 5.9.2 у меня просто "Неизвестная ошибка"
{ВнешняяОбработка.ЗагрузкаФайлаСFTPСервера.Форма.Форма.Форма(92)}: Ошибка при вызове метода контекста (Open)
session.Open(sessionOptions);
по причине:
Неизвестная ошибка
Даже и не знаю куда копать. Может кто подскажет?
{ВнешняяОбработка.ЗагрузкаФайлаСFTPСервера.Форма.Форма.Форма(92)}: Ошибка при вызове метода контекста (Open)
session.Open(sessionOptions);
по причине:
Неизвестная ошибка
Даже и не знаю куда копать. Может кто подскажет?
(46) KokaDu, два варианта: либо качать старую версию WinSCP, либо смотреть документацию по новой версии и менять вызов метода .Open, видимо здесь "sessionOptions" что-то не соответствует новой версии.
Уже были проблемы с новой версией выше в комментариях. Я с WinSCP уже давно не работаю, проверить к сожалению не могу...
Уже были проблемы с новой версией выше в комментариях. Я с WinSCP уже давно не работаю, проверить к сожалению не могу...
(48)
Проблема ошибки OPEN встала очень остро.
Переход на старую версию не помог. ВЫявил следующую закономерность: при простой регистрации компоненты через командную строку и работе на клиенте все ок.
Как только регистрируем компоненту в службе компонентов чтоб работало на серваке- ловим ошибку OPEN. Может быть кто то победил ее?
(47) ram3, перерыл документацию, ничего нового по "Open" не нашел.
Проблему обошел тем, что создал bat-ник из самого WinSCP , который запускается из 1С.
В любом случае спасибо.
Проблему обошел тем, что создал bat-ник из самого WinSCP , который запускается из 1С.
В любом случае спасибо.
Проблема ошибки OPEN встала очень остро.
Переход на старую версию не помог. ВЫявил следующую закономерность: при простой регистрации компоненты через командную строку и работе на клиенте все ок.
Как только регистрируем компоненту в службе компонентов чтоб работало на серваке- ловим ошибку OPEN. Может быть кто то победил ее?
После регистрация WinSCP как 64 битного приложения проблема с OPEN остаётся.
Предлагаю следующие варианты решения с использованием батника:
Во вложении примеры с получением и отправки файла.
У меня есть еще решение с использованием Putty, если будет интересно, тоже могу поделиться.
Предлагаю следующие варианты решения с использованием батника:
Во вложении примеры с получением и отправки файла.
У меня есть еще решение с использованием Putty, если будет интересно, тоже могу поделиться.
Прикрепленные файлы:
GetSFTP.txt
PutSFTP.txt
коллеги, у меня длл регается как
%WINDIR%\Microsoft.NET\Framework64\v4.0.30319\regasm.exe WinSCPnet.dll /codebase /tlb:WinSCPnet.tlb
сама длл тутhttps://winscp.net/download/WinSCP-5.9.4-Automation.zip
далее
далее послать принять как обычно
ПС вин2008р2 64. 1с8*64
%WINDIR%\Microsoft.NET\Framework64\v4.0.30319\regasm.exe WinSCPnet.dll /codebase /tlb:WinSCPnet.tlb
сама длл тут
далее
sessionOptions = Новый COMОбъект("WinSCP.SessionOptions"); //Создаем объект SessionOptions
sessionOptions.HostName = "192.168.0.1";
sessionOptions.UserName = "порно";
sessionOptions.Password = "секс";
sessionOptions.PortNumber = 22;
sessionOptions.SshHostKeyFingerprint = "ssh-rsa 1024 7d:43:b7:43:05:30:01:3a:9f:e6:75:d8:29:e6:ca:fd";
sessionOptions.AddRawSettings("Cipher", "des,aes,chacha20,blowfish,3des,arcfour,WARN");
sessionOptions.AddRawSettings("KEX", "dh-group1-sha1,ecdh,dh-gex-sha1,dh-group14-sha1,rsa,WARN");
session = Новый COMОбъект("WinSCP.Session"); //Создаем объект Session
// Подключаемся
session.Open(sessionOptions);
Показатьдалее послать принять как обычно
ПС вин2008р2 64. 1с8*64
(54) Спасибо. Заработало. Только я последовательно выполнил
%WINDIR%\Microsoft.NET\Framework\v4.0.30319\RegAsm.exe WinSCPnet.dll /codebase /tlb:WinSCPnet32.tlb
%WINDIR%\Microsoft.NET\Framework64\v4.0.30319\RegAsm.exe WinSCPnet.dll /codebase /tlb:WinSCPnet64.tlb
на всякий случай чтоб в двух вариантах работало.
И всё заработало.
%WINDIR%\Microsoft.NET\Framework\v4.0.30319\RegAsm.exe WinSCPnet.dll /codebase /tlb:WinSCPnet32.tlb
%WINDIR%\Microsoft.NET\Framework64\v4.0.30319\RegAsm.exe WinSCPnet.dll /codebase /tlb:WinSCPnet64.tlb
на всякий случай чтоб в двух вариантах работало.
И всё заработало.
Хотел бы добавить, что лично у меня алгоритм шифрования был иной, тогда нужно применить несколько иной метод соединения.
//Задаем параметры подключения
sessionOptions = Новый COMОбъект("WinSCP.SessionOptions"); //Создаем объект SessionOptions
sessionOptions.ParseUrl("ftpes://User:Pasword@некий.сайт.ru");
sessionOptions.TlsHostCertificateFingerprint = "XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:04:XX:XX:XX:XX:XX:XX:XX";
session = Новый COMОбъект("WinSCP.Session"); //Создаем объект Session
//параметр необходимо использовать если пути регистрации DLL и исполняемого файла различны
session.ExecutablePath = "C:\Program Files\WinSCP\winscp.exe";
// Подключаемся
session.Open(sessionOptions);
ПоказатьПрикрепленные файлы:
Спасибо за статью.
Немного покурив интернеты и мануал, выяснил, что библиотека умеет работать не только с SFTP, но и с FTPS.
Вот рабочий программный код для FTPS, удобно сделать из него функции типа ОтправитьФайлы(), ПолучитьФайлы() и т.д.
Немного покурив интернеты и мануал, выяснил, что библиотека умеет работать не только с SFTP, но и с FTPS.
Вот рабочий программный код для FTPS, удобно сделать из него функции типа ОтправитьФайлы(), ПолучитьФайлы() и т.д.
//пример использования
//http://infostart.ru/public/195851/
//регистрация компоненты в cmd
//c:\Windows\Microsoft.NET\Framework\v4.0.30319\RegAsm.exe "c:\Program Files (x86)\WinSCP\WinSCPnet.dll" /codebase /tlb
//мануал по DotNet
//https://winscp.net/eng/docs/library
Попытка
//Задаем параметры подключения
sessionOptions = Новый COMОбъект("WinSCP.SessionOptions"); //Создаем объект SessionOptions
//параметры сессии для SSH (SFTP)
//sessionOptions.HostName = АдресСервера + ":" + Порт;
//sessionOptions.UserName = Логин;
//sessionOptions.Password = Пароль;
//sessionOptions.SshHostKeyFingerprint = "e0:f9:27:4c:37:28:ba:56:d4:3d:5f:27:e3:32:48:b2:79:f7:03:9c"; //ключ SSH-сертификата сервера
//параметры сессии для SSL (FTPS)
УРЛ = "ftps://" + Логин + ":" + Пароль + "@" + АдресСервера;
sessionOptions.ParseUrl(УРЛ);
//sessionOptions.TlsHostCertificateFingerprint="e0:f9:27:4c:37:28:ba:56:d4:3d:5f:27:e3:32:48:b2:79:f7:03:9c"; //ключ TLS-сертификата (можно посмотреть его, выполнив коннект из самой WinSCP)
//или задать вот это свойство
sessionOptions.GiveUpSecurityAndAcceptAnyTlsHostCertificate = Истина;
session = Новый COMОбъект("WinSCP.Session"); //Создаем объект Session
session.ExecutablePath = "C:\Program Files (x86)\WinSCP\winscp.exe";
// Подключаемся
session.Open(sessionOptions);
Исключение
Сообщить(ОписаниеОшибки());
КонецПопытки;
//ЗАГРУЗКА с FTP
Попытка
ПутьЗагрузки = "c:\Temp\";
ПутьНаФТП = "/Rex_In/otrabot/test.xml";
УдалятьФайлыНаФтпПослеЗагрузки = Ложь;
//Загружаем файлы с удаленного сервера
transferResult = session.GetFiles(ПутьНаФТП, ПутьЗагрузки, УдалятьФайлыНаФтпПослеЗагрузки);
//Проверяем возможные ошибки
ФайлыУспешноЗагружены = transferResult.Check();
//Обрабатываем результат
Для каждого ЗагруженныйФайл Из transferResult.Transfers Цикл
Сообщить("Загружен файл: " + ЗагруженныйФайл.FileName);
//session.RemoveFiles(ЗагруженныйФайл.FileName); //Удаляем уже скаченные файлы
КонецЦикла;
Исключение
Сообщить(ОписаниеОшибки());
КонецПопытки;
//УДАЛЕНИЕ на FTP
Попытка
ПутьНаФТП = "/Rex_In/otrabot/test.xml";
session.RemoveFiles(ПутьНаФТП);
Исключение
Сообщить(ОписаниеОшибки());
КонецПопытки;
//ВЫГРУЗКА на FTP
Попытка
ПутьКФайлам = "c:\Temp";
ПутьНаФТП = "/Rex_In/otrabot";
//Выгружаем файлы
УдалятьФайлыПослеВыгрузкиНаФТП = Ложь;
transferResult = session.PutFiles(ПутьКФайлам, ПутьНаФТП, УдалятьФайлыПослеВыгрузкиНаФТП);
//Проверяем результат на возможные ошибки
transferResult.Check();
//Обрабатываем результат выгрузки
Для каждого ВыгруженныйФайл Из transferResult.Transfers Цикл
Сообщить("Выгружен файл: " + ВыгруженныйФайл.FileName);
//ПереместитьФайл(ВыгруженныйФайл.FileName, ХранилищеВыгруженныхФайлов);
КонецЦикла;
Исключение
Сообщить(ОписаниеОшибки());
КонецПопытки;
//Разрываем соединение
session.Dispose();
Показать
Добавлю к "как выяснилось" к посту выше
скачав с их офф сайта winSCPnet.dll - регистрируете через RegAsm но согласно разрядности вашей ОС.
т.е. для win64 это путь - C:\Windows\Microsoft.NET\Framework64\v4.0.30319
или
для win32 это - C:\Windows\Microsoft.NET\Framework\v4.0.30319
да и если работаете в клиент серверном варианте, то, версия утилиты на сервере должна совпасть с вашей локальной установкой.
скачав с их офф сайта winSCPnet.dll - регистрируете через RegAsm но согласно разрядности вашей ОС.
т.е. для win64 это путь - C:\Windows\Microsoft.NET\Framework64\v4.0.30319
или
для win32 это - C:\Windows\Microsoft.NET\Framework\v4.0.30319
да и если работаете в клиент серверном варианте, то, версия утилиты на сервере должна совпасть с вашей локальной установкой.
Чтобы не париться с SshHostKeyFingerprint
можно так сделать:
fingerprint = session.ScanFingerprint(sessionOptions,"SHA-256");
sessionOptions.SshHostKeyFingerprint = fingerprint;
можно так сделать:
fingerprint = session.ScanFingerprint(sessionOptions,"SHA-256");
sessionOptions.SshHostKeyFingerprint = fingerprint;
Немного не в тему, но с FTPS тоже долго искал инфу, пришлось справку читать :)
Сервер = Новый FTPСоединение(ИПFTP, 21,ЛогинFTP,ПарольFTP,,Истина,300,,УровеньИспользованияЗащищенногоСоединенияFTP.ИспользоватьЕслиВозможно);
на удивление заработало. 8.3.11, в режиме совместимости 8.2.16
Сервер = Новый FTPСоединение(ИПFTP, 21,ЛогинFTP,ПарольFTP,,Истина,300,,УровеньИспользованияЗащищенногоСоединенияFTP.ИспользоватьЕслиВозможно);
на удивление заработало. 8.3.11, в режиме совместимости 8.2.16
Добрый день!
подскажите правильно ли я понимаю, что для получения и работы с полем sessionOptions.SshHostKeyFingerprint нужно сгенерировать открытый ключ и разместить его на сервере SFTP, а приватный ключ зарегистрировать на своем компьютере и только после этого можно обращаться обработкой из 1с на sftp сервер?
подскажите правильно ли я понимаю, что для получения и работы с полем sessionOptions.SshHostKeyFingerprint нужно сгенерировать открытый ключ и разместить его на сервере SFTP, а приватный ключ зарегистрировать на своем компьютере и только после этого можно обращаться обработкой из 1с на sftp сервер?
(75)
добрый день,
в программе WinSCP на нужном соединении открываете Manage - Generate Session URL/Code...
Далее на закладке URL установите опцию SSH host key.
Внизу в окне URL появится строка вида fingerprint=ecdsa-sha2-ххххххххххххххххххххххххххх
строку после fingerprint= присваиваете sessionOptions.SshHostKeyFingerprint. Это и есть ключ.
SshHostKeyFingerprint
добрый день,
в программе WinSCP на нужном соединении открываете Manage - Generate Session URL/Code...
Далее на закладке URL установите опцию SSH host key.
Внизу в окне URL появится строка вида fingerprint=ecdsa-sha2-ххххххххххххххххххххххххххх
строку после fingerprint= присваиваете sessionOptions.SshHostKeyFingerprint. Это и есть ключ.
Добрый день,
для тех у кого прокси :
Вот эту всю историю нужно написать до .Оpen
для тех у кого прокси :
sessionOptions.AddRawSettings("ProxyMethod", "2") ; // SOCKS5
sessionOptions.AddRawSettings("ProxyHost", "Имя вашего прокси сервера") ;
sessionOptions.AddRawSettings("ProxyPort", "ваш прокси порт") ;
sessionOptions.AddRawSettings("ProxyUsername", "Имя пользователя прокси") ;
sessionOptions.AddRawSettings("ProxyPassword", "пароль пользователя прокси") ;
Вот эту всю историю нужно написать до .Оpen
Отмечу с какими сложностями столкнулся при установке библиотеки:
1. Версия библиотеки должна быть равна версии winscp. Для этого смотрим в winscp его версию: Справка -- О программе. И меняем в ссылке для скачивания библиотеки часть пути с версией. Например, если версия winscp равна 5.19.6, то ссылка меняетсяhttps://winscp.net/download/WinSCP-5.17.10-Automation.zip --> https://winscp.net/download/WinSCP-5.19.6-Automation.zip
2. При регистрации библиотеки (Приложение №3) необходимо установить рабочий каталог тот в который вы распаковали библиотеку. т.е. прежде чем в cmd исполнить %WINDIR%\Microsoft.NET\Framework\<version>\RegAsm.exe WinSCPnet.dll /codebase /tlb
необходимо исполнить cd ПутьКкаталогуБиблиотеки
Например cd C:\test
3. SshHostKeyFingerprint можно взять в winscp . Для этого подключаемся к sftp, главное меню -- соединение -- Информация о протоколе сервере. В открывшемся окне копируем значение MD5. При вставке к нему добавится ssh...
1. Версия библиотеки должна быть равна версии winscp. Для этого смотрим в winscp его версию: Справка -- О программе. И меняем в ссылке для скачивания библиотеки часть пути с версией. Например, если версия winscp равна 5.19.6, то ссылка меняется
2. При регистрации библиотеки (Приложение №3) необходимо установить рабочий каталог тот в который вы распаковали библиотеку. т.е. прежде чем в cmd исполнить %WINDIR%\Microsoft.NET\Framework\<version>\RegAsm.exe WinSCPnet.dll /codebase /tlb
необходимо исполнить cd ПутьКкаталогуБиблиотеки
Например cd C:\test
3. SshHostKeyFingerprint можно взять в winscp . Для этого подключаемся к sftp, главное меню -- соединение -- Информация о протоколе сервере. В открывшемся окне копируем значение MD5. При вставке к нему добавится ssh...