- установка lftp
- подключение к удалённому серверу
- создание закладок для быстрого подключения
- lftprc авторизация через публичный ключ
- пример копирования директории с локальной на удалённую машину
Зачем?
Бывают случаи когда нужно быстро, отправить или получить пачку файлов на некий удалённый сервер, без доступа к GUI, либо неким образом автоматизировать процесс отправки или получения. И для этих целей вполне могут помочь простые и проверенные временем ftp-клиенты. которые просты и требуют только наличие терминала и ssh-соединения. В этой статье рассказывается о базовых возможностях одного из таких lftp-клиентов. Как им пользоваться в общих чертах и как настроить для удобного и быстрого взаимодействия с ftp-сервером, в том числе для авторизации через публичные ssh-ключи
Установка
sudo apt-get update && sudo apt-get install lftp
Подключение к удалённому серверу
$ lftp ftp://ftp.remotehost.com
Дальше команды идут внутри оболочки lftp
Авторизация
lftp ftp.remotehost.com:~>
lftp ftp.remotehost.com:~> login username password
после успешной авторизации вывод внутри lftp будет примерно такой
lftp username@ftp.remotehost.com:~>
Пример авторизации через shell-команду прямо из консоли
$ lftp ftp://ourusername:ourpassword@ftp.remotehost.com
Как подключиться к нужному удалённому серверу изнутри lftp:
здесь символ $
говорит о том что это команда оболочки ОС. lftp :~>
– это приветствие ввода интерактивного режима внутри lftp-клиента.
$ lftp
lftp :~> open ftp://ftp.remotehost.com
lftp :~> open ftp://ftp.host.com --user name --password secret
Закладки (Bookmarks)
Закладки – это про простой и быстрый доступ к нужной точке назначения, без необходимости каждый раз предоставлять всю необходимую информацию для подключения, авторизации и внутренних переходов.
Пути где lftp хранит файлы c закладками(bookmarks)
~/.local/share/lftp/bookmarks
~/.lftp/bookmarks
конфигурационные файлы
~/.lftprc или \~/.lftp/rc - уровень конкретного пользователя
/etc/lftp.conf - уровень всей системы
Создание закладки (bookmark add)
Чтобы создать новую закладку внутри интерактивного сеанса(внутри lftp):
lftp :~> bookmark add remotehost ftp://ouruser:ourpassword@ftp.remotehost.com
Здесь в качестве части url-а указывается все данные для аутентификации – логин и пароль
Обрати внимание что при таком подходе пароль будет хранится в одном из bookmark-файлов. Причем в открытом виде, т.е. в виде обычного текста. Более безопасно можно настроить подключение по публичному-ключу с парольной фразой.
~/.local/share/lftp/bookmarks
~/.lftp/bookmarks)
Текущее подключение в закладки
Находясь в подключении к удалённому серверу можно сохранить это
подключение в закладки
lftp user@ftp.remotehost.com:~> bookmark add remotehost
lftp user@ftp.remotehost.com:~> exit
здесь первой командой создали новую закладку с именем remotehost
дальше выходим из интерактивного сеанса lftp обратно в оболочку ОС.
Теперь имея новую созданную закладку можно подключится в то же самое место. Причем несколькими способами.
1. Прямо из консоли. Войти в интерактивный режим сразу подключившись к нужному узлу по данным сохранённым в указанной закладке(здесь это имя “remotehost”)
$ lftp remotehost
lftp user@ftp.remotehost.com:~> exit
2. Изнутри интерактивного сеанcа lftp.
$ lftp
lftp:~> open remotehost
Другие команды для работы с закладками (изнутри lftp)
- bookmark edit – редактировать закладки через текстовый редактор
- bookmark del <имя-закладки> – удалить
- bookmark list – показать список всех имеющихся закладок
Авторизация по публичному ключу
Подключаться на удалённый сервер открыто отсылая пароль не лучшее решение. Более надёжный и безопасный способ – это настроить аутентификацию по публичному ключу с passphrase(парольной фразой)
По умолчанию lftp для подключения к серверу использует ssh команду
ssh -a -x
А это значит что можно подкорректировать эту команду указа какой публичный ключ использовать для аутентификации на сервере.
ssh -a -x -i <public-keyfile>
- команда в интерактивном режиме(внутри lftp)
set sftp:connect-program "ssh -a -x -i <keyfile>"
- используя связку команд для команды lftp (из оболочки ОС):
lftp -c 'set sftp:connect-program "ssh -a -x -i <keyfile>"; \
connect sftp://user@example.com; mirror -eR files; ...'
- Через конфиг файл ~/.lftprc
Более надёжный и удобный способ – прописать команду подключения добавив следующую строчку в файл ~/.lftprc
set sftp:connect-program "ssh -a -x -i /full/path/to/yourprivatekeyfile"
Теперь для подключения нужно будет указывать парольную фразу назначенную для ключа (youprivatekeyfile). Вот как это будет выглядеть.
lftp sftp://user@host.com
Password: # type here your passphrase
lftp user@host.com:/>
Здесь идёт подключение от лица пользователя user к хосту host.com при этом для авторизации отсылается публичный ключ указанный в ~/.lftprc
Ускорить и упростить такое подключение можно через закладки.
Создав закладку с коротким именем(если используется часто) и подключаться сразу к нужному серверу в нужном каталоге. Пример
user@debian:~/v$ lftp hs
Password:
cd ok, cwd=/video/study
lftp user@ftp.somenetwork.org:/video/study>
Зеркало (Mirror)
Если нужно быстро скопировать на сервер сразу всё что находится в текущем каталоге можно воспользоваться командой `mirror`
Без параметров эта команда создаёт зеркало с удалённой машины копируя все файлы и поддиректории начиная с текущей, рекурсивно вглубь.
Для того чтобы наоборот закачать на удалённый сервер с локальной машины нужно использовать флаг `mirror -R`. Пример
cd ~/shared/new_videos
$ lftp hs
Password:
cd ok, cwd=/video/study
lftp user@ftp.somenetwork.org:/video/study> !pwd
/home/user/shared/new_video
lftp user@ftp.somenetwork.org:/video/study> pwd
sftp://user@ftp.somenetwork.org/video/study
lftp user@ftp.somenetwork.org:/video/study> ls
sftp://user@ftp.somenetwork.org/video/study
drwxrwxrwx 1 root root 754 Jun 10 16:16 .
drwxrwxrwx 1 root root 66 Jun 19 16:16 ..
drwxrwxrwx 1 user users 1356 Jun 22 2023 cicd
drwxrwxrwx 1 user users 20 Apr 10 14:33 databases
drwxrwxrwx 1 user users 150 Apr 10 14:45 devops
...
lftp user@ftp.somenetwork.org:/video/study> mkdir new_videos
lftp user@ftp.somenetwork.org:/video/study> cd new_videos
lftp user@ftp.somenetwork.org:/video/study/new_videos> mirror -R
- сначала переходим в нужный каталог который хотим отправить на сервер
- затем подключаемся к серверу по закалдке через ключ указывая парольную фразу
- внутри интерактивного сеанса lftp можно выполнять команды для локальной ОС здесь проверяем текущий каталог через !pwd
- смотрим какие файлы есть на удалённом сервер через ls
- создаём на удалённом сервере новый каталог переходим в него
- и через
mirror -R
копируем всё из текущего локального каталога в текущий удалённый