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

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

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

Теоретический курс по основам сетевых технологий. Позволит системным администраторам упорядочить и восполнить пробелы в знаниях. Цена очень доступная, есть бесплатный доступ. Все подробности по . Можно пройти тест на знание сетей, бесплатно и без регистрации.

Задача очень простая. Более того, у меня в своих шпаргалках даже были готовые варианты скриптов для загрузки файлов на удаленный 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 :)

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

Онлайн-курс по Kubernetes – для разработчиков, администраторов и технических лидеров, которые хотят изучить платформу Kubernetes. Очень востребованный навык, который хорошо оплачивается. Курс не для новичков – нужно пройти вступительный тест. Для кого этот курс: Разработчиков, администраторов, СТО и техлидов:
  • Которые устали тратить время на автоматизацию;
  • Которые хотят единообразные окружения;
  • Которые хотят развиваться и использовать современные инструменты;
  • Которым небезразлична надежность инфраструктуры;
  • Которым приходится масштабировать инфраструктуру под растущие потребности бизнеса;
  • Которые хотят освободить продуктовые команды от части задач администрирования и автоматизации и сфокусировать их на развитии продукта.
Проверьте себя на вступительном тесте и смотрите программу детальнее по .
Не понравилась статья и хочешь научить меня администрировать? Пожалуйста, я люблю учиться. Комментарии в твоем распоряжении. Расскажи, как сделать правильно!

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

Автор Zerox

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

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

  1. Аватар

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

    • Zerox

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

      • Аватар

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

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

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

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