Опять про sFTP и вообще

Обмен - Обмен с другими системами

Памятка для разработчика по работе с FTP, FTPs и sFTP.

Нет такого программиста 1С, который бы не сталкивался с необходимостью программно передавать данные посредством FTP.

В 90% случаев это использование протокола FTP, в 9% FTPs и в 1% это sFTP (имхо)

Сразу стоит подчеркнуть, что FTPs и sFTP не одно и тоже и кардинально отливается в реализации.

Для любопытных, но ленивых вот ссылки:

https://ru.wikipedia.org/wiki/FTPS

https://ru.wikipedia.org/wiki/SFTP

Теперь рассмотрим реализацию передачи файлов по каждому варианту.

FTP – Легко

Дано:

Передать файл «C:\My.txt» на FTP «myhost.ru/mydir/»

Сервер - myhost.ru

Порт - 21

Подкаталог  - mydir

Логин – user

Пароль – pass

При этом настройка в FileZilla будет следующая:

Для реализации в 1С будем использовать следующую конструкцию:

СоединениеFTP = Новый FTPСоединение(Сервер, Порт, Логин, Пароль)

При этом для соединения будет использоваться прокси по умолчанию, и если нам нужно пойти в обход прокси или использовать «особый», то будем этот самый прокси переопределять

Прокси = Новый ИнтернетПрокси(Ложь);//Не использовать прокси по умолчанию

СоединениеFTP = Новый FTPСоединение(Сервер, Порт, Логин, Пароль, Прокси);

После создания соединения начинаем передачу

СоединениеFTP.Записать(«C:\My.txt»,  «mydir/My.txt»);

Все, файл там, где нужно

 

FTP – легко и безопасно

Дано:

Передать файл «C:\My.txt» на FTPs «myhost.ru/mydir/»

Сервер - myhost.ru

Порт - 22

Подкаталог  - mydir

Логин – user

Пароль – pass

При этом настройка в FileZilla будет следующая:

В данном случае поступаем по аналогии с https-соединением, а именно добавляем описание защищенного соединения и указываем его в параметрах:

ЗащищенноеСоединение = Новый ЗащищенноеСоединениеOpenSSL();

СоединениеFTP = Новый FTPСоединение(Сервер, Порт, Логин, Пароль,,,, ЗащищенноеСоединение);

FTP – сложно и безопасно

Дано:

Передать файл «C:\My.txt» на sFTP «myhost.ru/mydir/»

Сервер - myhost.ru

Порт - 522

Подкаталог  - mydir

Логин – user

Пароль – pass

При этом настройка в FileZilla будет следующая:

Хочу Вас сразу огорчить – с данным соединением 1С не работает и стандартный класс FTPСоединение не поможет.

Для работы с sFTP нужно будет использовать сторонние продукты. Я использую WinSCP, на основе нее и опишу решение передачи.

Скачать WinSCP можно тут https://winscp.net/eng/download.php

Запускать будем с использованием скрипта, т.е. файла, где описаны действия для WinSCP

https://winscp.net/eng/docs/scripting#using_scripting

https://firstwiki.ru/index.php/WinSCP

ТекстСценария = "option batch abort
                |option confirm on
                |open sftp://" + Логин + ":" + Пароль + "@" + Сервер + ":" + Порт + "
				|put C:\My.txt /mydir/My.txt
				|exit";

ИмяФайлаСценария = ПолучитьИмяВременногоФайла(".txt");
ФайлСценария = Новый ТекстовыйДокумент;
ФайлСценария.УстановитьТекст(ТекстСценария);
ФайлСценария.Записать(ИмяФайлаСценария);

ПутьWinSCP = "C:\WinSCP\WinSCP.exe";
Команда = """" + ПутьWinSCP + """ /console /script=""" + ИмяФайлаСценария + """";
ЗапуститьПриложение(Команда,,Истина);

По результату выполнения команды файл будет отправлен.

Для ленивых приложу обработину, где в МОДУЛЕ ОБЪЕКТА есть готовые процедуры работы с sFTP.

Скачать файлы

Наименование Файл Версия Размер
Опять про sFTP и вообще: Обертка для WinSCP с расширенным логированием
.epf 5,27Kb
23.05.18
3
.epf 5,27Kb 3 Скачать

См. также

Комментарии
1. Иван Никулин (onec.developer) 106 24.05.18 00:51 Сейчас в теме
Кто подскажет, как установить подключение к sFTP из мобильного устройства?
3. Сергей Милорадов (BigClock) 24.05.18 10:51 Сейчас в теме
(1), из известных мне бесплатных приложений под Android это
Ghost Commander: https://play.google.com/store/apps/details?id=com.ghostsq.commander
со специальным плагином для sFTP: https://play.google.com/store/apps/details?id=com.ghostsq.commander.sftp
4. Иван Никулин (onec.developer) 106 24.05.18 14:21 Сейчас в теме
если в мобильное приложение зашить только плагин, подхватит подключение без установки самого приложения? кто то пробовал?
5. Oleg Germanenko (viptextil1) 11 30.05.18 09:04 Сейчас в теме
Из трех вышеуказанных протоколов, на мой взгляд, sftp самый предпочтительный для передачи не очень больших объемов информации (до нескольких Гб), поскольку используется один порт и гораздо проще реализовать проброс порта. И к тому же по сравнению с ftp передаваемые данные (и пароли) шифруются.

Под Linux пользуюсь консольным клиентом lftp.wiki
6. Илья Низамов (Region102) 32 30.05.18 13:00 Сейчас в теме
Вот вам в копилку по той же теме, только не статья а видео https://www.youtube.com/watch?v=UEAMWQles04
Оставьте свое сообщение