PDA

Просмотр полной версии : Автообмен распределенных баз 1С через FTP


MacLEOD
12-04-2006, 15:07
Начнем с того что существует такая компонента для 1С-7.7 - УРИБ или УРБД. ;) Как она работает - дело второе, но иногда ее таки приходится использовать. При выгрузке создается файл который необходимо перекинуть на другой компьютер. Все вроде просто - берешь флешку и пешедралишь. А если не хочется пешедралить?
Была неплохая конфигурация URBD4Mail, написаная на 1С-7.7. Но.... не пошла она у одного моего клиента. Принимать файлы принимает, а отправлять по почте... То ли виновата DLL которая отвечала за почтовый обмен, то ли модем подглюкивал, в общем разбираться было долго и неблагодарно. Посмотрел (а точнее - поДсмотрел) я как люди работают с командой Винды FTP.exe - и состряпал свой обменник. Спасибо Рамодину Алексею (Леш, привет! ;) ) за идею.

Суть такова.
Команда ftp.exe имеет интересный ключик -s, который заставляет проглатывать переданный этим ключом файл построчно и выполнять команды в нем прописаные. Т.е. можно указать набор команд и наслаждаться их выполнением.
Попутно пришлось полностью отказаться от конфигурации управления обменом URBD4Mail, функция которой свелась уже только к созданию файла параметров и запуска конфигуратора с параметрами.

Итак, имеем:
1. Центральная URBD-база 1С с названием Ц1 в которой прописана URBD-периферийная база П1. Расположена Ц1 в каталоге D:\Bases\URBD
2. Папочку со скриптами - d:\exchange

По первому вопросов нет, надеюсь, а вот содержимое папочки скриптов надо расписать подробнее.

Файл exch.cmd:
ftp -s:d:\exchange\exch_in.txt
del D:\Bases\URBD\PC\p19.zip
copy p19.zip D:\Bases\URBD\PC\
"C:\Program Files\1Cv77\BIN\1cv7.exe" CONFIG /D"D:\Bases\URBD" /NАвтообмен /P123456 /@D:\exchange\AUTOEXCH
copy D:\Bases\URBD\CP\P18.zip" d:\exchange\
ftp -s:d:\exchange\exch_out.txt

Файл exch_in.txt:
o ftp.ftp.ru
user_login
user_password
get P19.zip
disconnect
bye

Файл exch_out.txt:
o ftp.ftp.ru
user_login
user_password
put D:\exchange\P18.zip
disconnect
bye

И последнее:
Файл AUTOEXCH.PRM:
[General]
AutoExchange=1
Quit=1
Output=D:\exchange\Автообмен.log
[AutoExchange]
SharedMode=1
ReadFrom=*
WriteTo=*

Для автообмена необходимо установить соединение с инетом и запустить файл exch.cmd

GuitariLLaz
12-04-2006, 15:22
ай-яй-яй раскрыл все пароли и явки... и ваще ftp не секъюрный протокол чтобы данные бухгалтерии по нему передавать :)

ps смысл данной темы?

Neyron
12-04-2006, 15:39
отлично.

boco
12-04-2006, 18:31
реальные пацаны (tm) делают все по ssh. в частности, для копирования реальные пацаны (tm) придумали scp.

MacLEOD
13-04-2006, 10:35
Дележ опытом.
Завести все по ftp проще гораздо. Далеко не все хостинги поддерживают SSH.
Второе - передача нешифрованых пакетов имеет свои недостатки, но в рамках моих проектов не ставится задача 100%-ного шифрования данных. И так мало кто чего поймет при перехвате. Гораздо проще для получения данных использовать человеческий фактор. А в данном случае принимается полная надежность линии передачи.
И третье - проще использовать для шифрации пакеты типа PGP. Ничего менять не нужно при этом, надо только скрипты слегка видоизменить.

boco
13-04-2006, 10:52
гораздо? это во сколько раз? и в чем сложность scp?
то есть, проще шифровать, чем не шифровать? ты это хотел сказать? =)

ты забыл одну мааааахонькую деталь - передача логина и пароля в ftp идет plain text'ом. это значит, что "человек в середине" легко перехватит твои логины и пароли. кстати, "человек в середине" так же легко подставит тебе свой ftp-сервер вместо твоего, т.к. в протоколе ftp не предусмотрена проверка аутентичности хоста. и лить ты свои данные будешь на его ftp, а уж он потом, слегка модифицировав (или не слегка) - на твой. =)

MacLEOD
13-04-2006, 12:30
Зануда ты ;)
Хорошо, где можно завести такое хранилище? Чтобы бесплатное было. Полностью бесплатное.
Да, я все понимаю. Но до этого обмен был настроен по POP3/SMTP, что, согласись, тоже не сахар. Но заказчика устраивало.

И ваще - вовремя сделаный бэкап спас не одну задницу ;)

boco
13-04-2006, 12:57
у себя на сервере.
да хоть на голубях почтовых. я говорю, как делают реальные пацаны (tm). =)
не понял связи.

MacLEOD
14-04-2006, 15:59
Это означает необходимость заведения СВОЕГО сервера, выделения статического АйПи и прочей радости... Влом. Если хочешь - попробуй найди и взломай мой обменник. Ведь это так просто ;)

GuitariLLaz
14-04-2006, 16:04
а ftp-сервак у тебя на чем крутится?

MacLEOD
15-04-2006, 17:09
Сервак не мой, использую бесплатный хостинг. Просто и эффективно.

GuitariLLaz
15-04-2006, 18:09
если уж так любишь фтп, то есть sftp - суть secure ftp
думаю реальные пацаны (tm) его бы юзали в данном случае :D

Рыжий Псих
15-04-2006, 18:10
он видимо не знает что базы 1с можно спереть(хакать,ломать,...) через инет,не говоря уже о ФТП-протоколе...

boco
16-04-2006, 17:43
ты зря радуешься. это действительно просто, т.к. твой ip находится в адресном пространстве уфанет. а я (сюрприз) - администратор в уфанет. и поэтому могу быть тем "человеком в середине"

MacLEOD
19-04-2006, 12:45
Я в курсе. Так что если что - приду к тебе. И отнюдь не с пивом ;) Щютка.
Короче, переводим щас обмен на рельсы шифрации с помощью пакета GnuPG, как заработает - расскажу что именно получилось. И "реальные пацаны" после этого могут пойти лесом ;)

boco
19-04-2006, 12:58
можно, конечно, гланды и через задницу удалять...

переход на gpg никак не спасает от того, что credentials в протоколе ftp передаются открытым текстом. и от mitm тоже не спасает.

удачи.

MacLEOD
20-04-2006, 10:29
Дамир, а не пофигу ли это? FTP можно и другой завести при желании, разве нет? При том что в моем случае мы платим только за траффик, но никак не за владение узлом с поддержкой SSH. Что весьма актуально для конторы торгующей например крепежом с двумя небольшими точками.
А пароль можно узнать и через человеческий фактор. Забашляли слегонца сисадмину - он пароль и выдал.
Не бывает идеальных решений. Но мое решение дешевле и проще. Настраивать надо только 1 раз ;)

MacLEOD
21-04-2006, 11:44
Основные нужные нам команды:

--gen-key

Генерирует новую пару ключей. Данная команда, как правило, используется только интерактивно.

-e, --encrypt

Зашифровать данные. Может использоваться совместно с --sign.

--decrypt [file]

Расшифровывает file (или стандартный ввод, если файл не задан) и выводит его на стандартный вывод (или в файл определённый параметром --output). Если расшифрованный файл подписан, то также проверяется подпись. Эта команда отличается от операции по умолчанию тем, что никогда не сохраняет результат в файле с именем указанным в зашифрованном файле и не обрабатывает файлы не начинающиеся с зашифрованного сообщения.


Примеры.

Лезем в реест и добавляем строковый параметр HKEY_CURRENT_USER\Software\GNU\GnuPG\HomeDir и указываем в нем путь к папке где будут созданы ключи.

Создаем пару ключей для ЦЕНТРа:
gpg.exe --gen-key
Указываем USER-ID Centre

Лезем в папку HKEY_CURRENT_USER\Software\GNU\GnuPG\HomeDir и создаем там папку Centre куда кидаем созданую пару ключей secring.gpg и pubring.gpg

Создаем пару ключей для ПЕРИФЕРИИ:
gpg.exe --gen-key
Указываем USER-ID Perif

Лезем в папку HKEY_CURRENT_USER\Software\GNU\GnuPG\HomeDir и создаем там папку Perif куда кидаем созданую пару ключей secring.gpg и pubring.gpg

Папки Centre и Perif копируем на оба рабочих места в папку Exchange. На рабочем месте "Центр" убиваем файл secring.pgp в папке Perif, на месте "Периферия" убиваем secring.pgp в папке Centre. Для секретности типа ;)

Теперь для шифрации файла P18.zip надо вставить в пакетный файл команду:
gpg.exe -e -o P18.zip.asc -r Perif --keyring Perif\pubring.gpg --yes P18.zip

В итоге получим файл P18.zip.asc который и надо отправить на ФТП.

Для расшифрации на стороне ПЕРИФЕРИИ:
gpg.exe --decrypt -o P18.zip --keyring Perif\pubring.gpg --secret-keyring Perif\secring.gpg --yes --passphrase 123456789 P18.zip.asc

"123456789" - пароль ПЕРИФЕРИИ.

В ЦЕНТРЕ делается все аналогично.

MacLEOD
06-05-2006, 11:49
Короче, все делается еще проще - ставится программуля WebDrive, в ней есть настройки подключения к SFTP и т.д. Прога создает виртуальный диск из поключения к FTP-серверу, на него настраивается выгрузка/загрузка 1С - и все.