Работа с ftp из командной строки FreeBSD
Недавно у меня возникла необходимость передачи по ftp файлов с одного сервера, на другой. На принимающей стороне работает zFTPserver на сервере под управлением операционной системы MS Windows 2003 Server Standard Edition SP2. На передающей стороне работает сервер под управлением FreeBSD 8.2-RELEASE. Передачу файлов пытаюсь осуществить с помощью встроенной команды ftp – Internet file transfer program. |
Как оказалось, передать одновременно в командной строке имя и пароль на удаленный ftp при автоматическом коннекте и выполнении команд невозможно. Стал глубже разбираться в тонкостях работы команды ftp на FreeBSD.
Как показывает man ftp
, существует возможность указать имя пользователя и его пароль, и даже выполнить некоторые команды ftp на удаленном сервере, при авто-логине. Нас интересует секция THE .netrc FILE помощи.
Для включения такой возможности, в каталоге пользователя, от имени которого будет выполняться команда ftp, необходимо создать файл .netrc. В моем случае команда выполняется от имени root.
#cd /root #touch .netrc #chmod 600 /root/.netrc
Примечание: если вы не сделаете этот файл доступным только для root (в данном случае) – chmod 600 /root/.netrc
, при выполнении команды ftp
вы получите следующее сообщение об ошибке:
ftp: Error: .netrc file is readable by others. ftp: Remove password or make file unreadable by others.
С помощью вашего любимого текстового редактора занесите в этот файл следующие строки:
# nano -w /root/.netrc machine 192.168.10.1 login user password sword
Где 192.168.10.1 – ip адрес удаленной машины с работающим ftp, user – имя пользователя на этом ftp, sword – пароль пользователя user на этом ftp.
Полный набор переменных, которые можно указать в этом файле, вы обнаружите в man ftp
.
Для решения поставленной задачи, мне осталось только написать небольшой скриптик и заставить выполняться его по расписанию в cron
.
#cd /var/backups #ftp -u user@192.168.10.1:/ etc_*
Данный скриптик передаст по ftp все файлы по маске etc_** из каталога */var/backups в корневой каталог пользователя user на удаленном ftp-сервере 192.168.10.1
Connected to 192.168.10.1. 220 zFTPServer v5.3, build 2009-09-18 09:48 ready. 331 User name received, need password. 230 User logged in, proceed. Remote system type is UNIX. Using binary mode to transfer files. 200 Type set to I. 250 CWD Command successful. local: etc_2011-09-03.tar.bz2 remote: etc_2011-09-03.tar.bz2 229 Entering Extended Passive Mode (|||2145|) 200 EPRT Command successful. 150 File status okay; about to open data connection. 100% |****************************************************************| 245 KB 2.08 MB/s 00:00 ETA 226 Closing data connection. 251139 bytes sent in 00:00 (1.63 MB/s) local: etc_2011-09-04.tar.bz2 remote: etc_2011-09-04.tar.bz2 200 EPRT Command successful. 150 File status okay; about to open data connection. 100% |****************************************************************| 245 KB 2.99 MB/s 00:00 ETA 226 Closing data connection. 251139 bytes sent in 00:00 (2.49 MB/s) local: etc_2011-09-05.tar.bz2 remote: etc_2011-09-05.tar.bz2 200 EPRT Command successful. 150 File status okay; about to open data connection. 100% |****************************************************************| 245 KB 1.99 MB/s 00:00 ETA 226 Closing data connection. 251139 bytes sent in 00:00 (1.75 MB/s)
Если вы разместили файл .netrc в ином месте (не в каталоге пользователя, от имени которого будет выполняться команда ftp), существует возможность указать его расположения с помощью флага -N. Команда будет выглядеть так:
#ftp -N /some_place/.netrc -u user@192.168.10.1:/ etc_*
Где /some_place – иное расположение файла .netrc