FTP – отправляем

Итак, вдруг возникла задача отправить какую-нибудь информацию на FTP сервер.

Для этого в RouterOS с версии 5 в команде

/tool fetch

добавили возможность не только получения файлов по Интернет, но и их отправки.

Для этого теперь обязательно нужно указывать параметр upload и его значение – yes (отправка файла) или no (получение файла).

Таким образом, если нужно backup-файл с локального хранилища отправить на ftp сервер, то команда в минимальном виде будет выглядеть так:

/tool fetch mode=ftp upload=yes user="логин" password="пароль" src-path="test.backup" address=x.x.x.x dst-path="backups/test.backup"

где

mode=ftp – указывает протокол отправки фала. В нашем случае – ftp.

upload=yes – мы отправляем файл с роутера на ftp сервер

user, password – логин и пароль на ftp сервере. О них чуть позже.

src-path – что отправляем. Если указываем только имя файла, то предполагается, что он находится в корневой папке хранилища. Если файл там не находится – команда завершится с ошибкой. В нашем примере отсылается файл “test.backup”, который находится в корневой папке локального хранилища.

dst-path – куда и под каким именем отправляем. Имя файла указывать обязательно. Даже если мы просто копируем файл не меняя имени. К сожалению, на данный момент (6.36.4) команда fetch не позволяет в dst-path ни использовать wildcards, ни упускать имя файла. В нашем примере мы указываем, что файл отправляем в папку “backups” и оставляем ему то же имя – “test.backup”.

address – адрес фтп сервера (без указания протокола “ftp://”, просто ip). Можно использовать и доменное имя, но тогда убедитесь, что на роутере правильно настроен DNS клиент и он сможет разрешить имя в ip.

Есть еще возможность задавать параметр host. Он нужен для случая, когда под одним ip скрывается множество сайтов. Тогда указываем точно, какой именно сайт (host) нас интересует.

Дополнительно о параметрах можно прочитать тут – Manual:Tools/Fetch

Теперь о логинах, паролях

Протокол FTP позволяет использовать всякие специальные символы в пароле.

Но в языке скриптов RouterOS некоторые из этих символов имеют специальное значение. И если, например, наш пароль выглядит так – 5$p4<\)H$ebSA37{ , то даже взяв его в кавычки, мы получим ошибку при выполеннии команды:

/tool fetch mode=ftp upload=yes user="логин" password="5$p4<\)H$ebSA37{" src-path="test.backup" address=x.x.x.x dst-path="backups/test.backup"

Почему так – внимательно читаем Manual:Scripting и в особенности табличку Constant Escape Sequences. Учитывая, что пароль мы все равно берем в кавычки, то “запретными” для паролей символами будут

$ \ ” ?

Видим, что в нашем пароле содержится целых три “запретных” символа – $ \ $

Можно, конечно, поменять пароль на более простой. А можно просто перед “запретными” символами поставить \.

Тогда наш пароль примет вид “5\$p4<\\)H\$ebSA37{” (зеленым слэш – это тот, который мы добавили) и команда

/tool fetch mode=ftp upload=yes user="логин" password="5\$p4<\\)H\$ebSA37{" src-path="test.backup" address=x.x.x.x dst-path="backups/test.backup"

выполнится без ошибок:

 status: finished
 downloaded: 379KiBz pause]
 total: 379KiB
 duration: 1s

В принципе, это всё…