Автоматическое копирование конфига на FTP

Тема в разделе "Скрипты", создана пользователем Roman Markov, 12 янв 2020.

  1. Roman Markov

    Roman Markov Участник

    Скрипт для копирования конфигов на FTP отрабатывает, но файлы на FTP-сервере оказываются нулевой длины. FTP-сервер сообщает, что ему ноль байт и передавали. При этом на Микротике сохраненный файл нормальный.

    Увеличение Delay до 30 секунд не помогло.

    Пробовал разные FTP-сервера, проблема не в сервере.

    :local myname "RouterName"
    :local fname ($myname.");
    :local bname ($myname".backup");
    :local ename ($myname".rsc");
    :local ftpaddr "10.1.1.1";
    :local ftpuser "Mikrotik";
    :local ftppass "MyPassword@";


    /system backup save name=$myname password=MyPassword@;
    :delay 10;
    /export file=$myname
    :delay 10;

    /tool fetch address=$ftpaddr src-path=$myname user=$ftpuser password=$ftppass port=21 upload=yes mode=ftp dst-path=$bname
    :delay 15;
    /tool fetch address=$ftpaddr src-path=$myname user=$ftpuser password=$ftppass port=21 upload=yes mode=ftp dst-path=$ename
    :delay 15;
     
    Последнее редактирование: 12 янв 2020
  2. Илья Князев

    Илья Князев Администратор Команда форума

    Если все сделать руками - работает?
     
  3. Roman Markov

    Roman Markov Участник

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

    ---------------------

    Лог FTP-сервера при заливке файла нулевой длины из скрипта:

    [5] Mon 10Feb20 19:15:12 - (001507) Connected to *********** (Local address 192.168.0.11)
    [6] Mon 10Feb20 19:15:12 - (001507) 220 FTP Server ready...
    [2] Mon 10Feb20 19:15:12 - (001507) USER Mikrotik
    [6] Mon 10Feb20 19:15:12 - (001507) 331 User name okay, need password.
    [2] Mon 10Feb20 19:15:12 - (001507) PASS xxxxx
    [5] Mon 10Feb20 19:15:12 - (001507) User MIKROTIK logged in
    [6] Mon 10Feb20 19:15:12 - (001507) 230 User logged in, proceed.
    [2] Mon 10Feb20 19:15:12 - (001507) TYPE I
    [6] Mon 10Feb20 19:15:12 - (001507) 200 Type set to I.
    [2] Mon 10Feb20 19:15:12 - (001507) PASV
    [6] Mon 10Feb20 19:15:12 - (001507) 227 Entering Passive Mode (*,*,*,*,160,55)
    [2] Mon 10Feb20 19:15:12 - (001507) STOR Router.rsc
    [4] Mon 10Feb20 19:15:12 - (001507) Receiving file e:\backup\server\clients-internet-backup\mikrotik\Router.rsc
    [6] Mon 10Feb20 19:15:12 - (001507) 150 Opening BINARY mode data connection for Router.rsc.
    [4] Mon 10Feb20 19:15:12 - (001507) Received file e:\backup\server\clients-internet-backup\mikrotik\Router.rsc successfully (0 Bytes/sec - 0 Bytes)
    [6] Mon 10Feb20 19:15:12 - (001507) 226 Transfer complete.
    [5] Mon 10Feb20 19:15:13 - (001507) Closing connection for user MIKROTIK (00:00:01 connected)
     
    Последнее редактирование: 10 фев 2020
  4. Илья Князев

    Илья Князев Администратор Команда форума

    У юзера под которым скрипт обрабатывается какие права?
     
  5. Roman Markov

    Roman Markov Участник

    Права "FULL" юзера, который Owner, а Policy ниже.

    Установка всех галок ситуации не меняет.
    Микротики пробовал разные.




    upload_2020-2-11_11-12-34.png
     
  6. Roman Markov

    Roman Markov Участник

    У меня есть подозрения, что в режиме скриптов как-то криво отрабатывается PassiveMode, но вроде бы нет параметра, заставляющего использовать FTP в ActiveMode...
     
  7. Илья Князев

    Илья Князев Администратор Команда форума

    Попробуйте на глобальный форум обратиться на английском. Там сами разрабы бывают.
     
  8. Roman Markov

    Roman Markov Участник

    Добил я решение проблемы. В Микротике нет проблем, суть была в том, что Микротик не умеет использовать активный режим FTP (только порт 21) и работает всегда в пассивном.


    Оказалось, что второй и третий FTP, которые я использовал в качестве тестовых, не поддерживали Passive-Mode, а на моём был проброшен не весь диапазон портов, которые используются в Passive Mode (я на сервере его увеличил, а на роутере в NAT и Filter не изменил).

    Итак, если кому интересно - вот скрипт для автоматической архивации конфига роутера на FTP.

    Очень полезно для систем, где конфиг меняется постоянно (новые VPN, правила Firewall, NAT и пр.)

    Скрипт формирует два файла, состоящих из имени девайса и текущей даты (один - стандартный backup, второй - текстовый конфиг) и заливает на указанный FTP раз в день (на FTP-сервере написана процедура ротации файлов, удаляющая те, которые старше 30 дней).

    После этого скрипт удаляет из роутера созданные файлы, чтобы не забивать диск (и вот тут хотелось бы добавить в скрипт команды, которые будут делать ротацию, удаляя только файлы, которые старше ** дней. Кто поможет?)


    Код:
    /system scheduler
    add interval=1d start-date=may/03/2020 start-time=06:00:00 name=FTP-Autobackup-Daily on-event="/system script run FTP-Autobackup" policy=ftp,read,write,policy,test,password,sniff,sensitive,romon
    
    /system script
    add dont-require-permissions=no name=FTP-Autobackup owner=admin policy=\
        ftp,read,write,policy,test,password,sniff,sensitive,romon source=":\
        local tmpdate [/system clock get date];\
        \n:local months (\"jan\",\"feb\",\"mar\",\"apr\",\"may\",\"jun\",\"jul\",\
        \"aug\",\"sep\",\"oct\",\"nov\",\"dec\");\
        \n:local month [ :pick \$tmpdate 0 3 ];\
        \n:local mm ([ :find \$months \$month -1 ] + 1);\
        \n:if (\$mm < 10) do={ :set mm (\"0\" . \$mm); }\
        \n:local date ([:pick \$tmpdate 4 6] .\"-\" . \$mm .\"-\" . [:pick \$tmpda\
        te 7 11])\
        \n\
        \n:local myname [/system identity get name];\
        \n:local fname (\$myname.\"_\".\$date);\
        \n:local bname (\$myname.\"_\".\$date.\".backup\");\
        \n:local ename (\$myname.\"_\".\$date.\".rsc\");\
        \n:local ftpaddr \"10.1.1.1\";\
        \n:local ftpuser \"Mikrotik\";\
        \n:local ftppass \"************\";\
        \n\
        \n/system backup save name=\$fname password=********;\
        \n:delay 10;\
        \n/export file=\$ename\
        \n:delay 10;\
        \n\
        \n/tool fetch address=\$ftpaddr src-path=\$name user=\$ftpuser password=\$\
        ftppass port=21 upload=yes mode=ftp dst-path=\$bname\
        \n:delay 15;\
        \n/tool fetch address=\$ftpaddr src-path=\$ename user=\$ftpuser password=\
        \$ftppass port=21 upload=yes mode=ftp dst-path=\$ename\
        \n:delay 15;\
        \n\
        \n/file remove \$bname;\
        \n/file remove \$ename;\
        \n"
    
    
     
    Последнее редактирование: 4 май 2020
    Илья Князев нравится это.