- установка 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:~> exit2. Изнутри интерактивного сеан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копируем всё из текущего локального каталога в текущий удалённый
