Home » Полезные советы » Загрузка файла по ftp через консоль в одну команду

Загрузка файла по ftp через консоль в одну команду

Я почти не работаю с ftp протоколом из-за его ограничений и проблем с безопасностью. Тем не менее иногда приходится иметь с ним дело, потому что предоставляют доступ к каким-то ресурсам по ftp. Мне понадобилось загружать готовые бэкапы на ftp сервер. На удивление, я потратил много времени, пока не нашел простой и подходящий вариант.

Если у вас есть желание научиться строить и поддерживать высокодоступные и надежные системы, рекомендую познакомиться с онлайн-курсом «Администратор Linux» в OTUS. Курс не для новичков, для поступления нужно пройти .

Задача очень простая. Более того, у меня в своих шпаргалках даже были готовые варианты скриптов для загрузки файлов на удаленный ftp сервер. Но почему-то в этот раз они не работали. В общем случае все делается примерно так с помощью скрипта:

#!/bin/sh

USER="backup"
PASSWD="password12345678"
HOST="ftp.server.com"
FILE="/mnt/backup/zabbix_backup.tar.gz"
DIR="/backup/zabbix"

ftp -n -i -p $SERVER << EOF
user $USER $PASSWD
binary
cd $DIR
put $FILE
quit
EOF

В принципе, все просто и раньше у меня нормально загружались файлы на ftp с этим скриптом. В этот раз почему-то нет. Не проходила авторизация, хотя если я делал все руками в консоли, то работало нормально. Я подозреваю, проблема была в лютых спецсимволах в пароле, которые я не смог нормально экранировать.

В итоге пошел другим путем. Оказывается, загружать файлы на ftp с авторизацией можно с помощью curl. Вот рабочий вариант, на котором я остановился:

/usr/bin/curl --upload-file "/mnt/backup/mysql_zabbix.sql.gz" ftp://backup:'password12345678'@ftp.server.com/backup/zabbix/

Тут весь нужный функционал, который на удивление сразу заработал как надо.

backupимя пользователя ftp
password12345678пароль от ftp, который я поместил в одиночные кавычки, чтобы экранировать спецсимволы
/backup/zabbixдиректория на удаленном ftp сервере
ftp.server.comадрес ftp сервера

Если загрузка не работает, можно добавить ключ -v к команде curl, будет подробный лог.

Все это было затеяно для бэкапа сервера мониторинга zabbix. Покажу сразу и сам скрипт бэкапа.

#!/bin/sh

date_time=`date +"%Y-%m-%d_%H-%M"`
bk_dir='/mnt/backup'

db_user='zabbix'
db_password='passwd87654321'
ftp_user='backup'
ftp_password='passwd12345678'
ftp_host='ftp.server.com'
ftp_dir='backup/zabbix/'

/usr/bin/mysqldump --opt -v --databases zabbix -u$db_user -p$db_password | /usr/bin/gzip -c > $bk_dir/mysql_zabbix_$date_time.sql.gz
/usr/bin/tar -czvf $bk_dir/zabbix_etc_$date_time.tar.gz /etc/zabbix /usr/lib/zabbix/alertscripts
/usr/bin/tar -czvf $bk_dir/zabbix_web_$date_time.tar.gz /usr/share/zabbix

/usr/bin/find $bk_dir -type f -mtime +3 -exec rm {} \;

/usr/bin/curl --upload-file "$bk_dir/mysql_zabbix_$date_time.sql.gz" ftp://$ftp_user:$ftp_password@$ftp_host/$ftp_dir
/usr/bin/curl --upload-file "$bk_dir/zabbix_etc_$date_time.tar.gz" ftp://$ftp_user:$ftp_password@$ftp_host/$ftp_dir
/usr/bin/curl --upload-file "$bk_dir/zabbix_web_$date_time.tar.gz" ftp://$ftp_user:$ftp_password@$ftp_host/$ftp_dir

На этом все, надежных вам бэкапов, но не по ftp :)

Онлайн курс по Linux

Если у вас есть желание научиться строить и поддерживать высокодоступные и надежные системы, рекомендую познакомиться с онлайн-курсом «Администратор Linux» в OTUS. Курс не для новичков, для поступления нужны базовые знания по сетям и установке Linux на виртуалку. Обучение длится 5 месяцев, после чего успешные выпускники курса смогут пройти собеседования у партнеров. Что даст вам этот курс:
  • Знание архитектуры Linux.
  • Освоение современных методов и инструментов анализа и обработки данных.
  • Умение подбирать конфигурацию под необходимые задачи, управлять процессами и обеспечивать безопасность системы.
  • Владение основными рабочими инструментами системного администратора.
  • Понимание особенностей развертывания, настройки и обслуживания сетей, построенных на базе Linux.
  • Способность быстро решать возникающие проблемы и обеспечивать стабильную и бесперебойную работу системы.
Проверьте себя на вступительном тесте и смотрите подробнее программу по .
Не понравилась статья и хочешь научить меня администрировать? Пожалуйста, я люблю учиться. Комментарии в твоем распоряжении. Расскажи, как сделать правильно!

Помогла статья? Есть возможность отблагодарить автора

Автор Zerox

Zerox
Владимир, системный администратор, автор сайта. Люблю настраивать сервера, изучать что-то новое, делиться знаниями, писать интересные и полезные статьи. Открыт к диалогу и сотрудничеству.

3 комментария

  1. Аватар

    А не пробовали в скрипте с ftp взять пароль в ординарные кавычки? Вот так PASSWD=’password12345678′
    При двойных кавычках необходимо спецсимволы экранировать обратным слэшем \ , а при ординарных этого не требуется.

    • Zerox

      Я как только не пробовал. С кавычками и без, через переменную и напрямую. Не понял, почему не получилось. Но в итоге через curl все гораздо удобнее, так что даже разбираться больше не хочется. Для одного файла curl оптимальный вариант. Вот если надо не только передавать, но и что-то с ftp брать, например список файлов, то тут уже придется с первым скриптом колхозить.

      • Аватар

        А не может быть причиной, что в скрипте вы задаёте переменную HOST, а потом используете $SERVER?
        Попробовал на центе — скрипт работает.

Добавить комментарий

Ваш e-mail не будет опубликован.

Нажимая кнопку "Отправить комментарий" Я даю согласие на обработку персональных данных.