FTP - старый протокол передачи файлов, который до сих пор встречается на хостингах, в сетевом оборудовании и обменниках файлов. SFTP - передача файлов поверх SSH, с шифрованием. Команды у их консольных клиентов почти одинаковые, поэтому разберём оба. Главное отличие стоит запомнить сразу: FTP передаёт логин, пароль и файлы открытым текстом. Если сервер поддерживает SFTP или FTPS, используйте их.
Установка клиента
Во многих дистрибутивах консольного клиента FTP по умолчанию нет:
sudo apt install ftp # Debian, Ubuntu (или пакет tnftp)
sudo dnf install ftp # Fedora, RHEL и родственные
sudo apt install lftp # продвинутый клиент с поддержкой FTPS и SFTP
Клиент sftp входит в состав OpenSSH и обычно уже установлен.
Подключение

FTP:
ftp ftp.example.com
Клиент спросит логин и пароль. Для анонимного доступа введите логин anonymous, а в качестве пароля - любой адрес почты.
SFTP:
sftp user@server.example.com
sftp -P 2222 user@server.example.com # нестандартный порт
sftp -i ~/.ssh/id_ed25519 user@server # вход по ключу
Для SFTP работают те же ключи и настройки из ~/.ssh/config, что и для SSH.
Основные команды

Эти команды одинаково работают в ftp и sftp:
| Команда | Что делает |
|---|---|
ls, dir |
список файлов на сервере |
cd папка |
перейти в папку на сервере |
pwd |
текущая папка на сервере |
lcd папка |
перейти в папку на локальном компьютере |
get файл |
скачать файл |
put файл |
загрузить файл на сервер |
mkdir папка |
создать папку на сервере |
rmdir папка |
удалить пустую папку |
delete файл (ftp), rm файл (sftp) |
удалить файл |
rename старое новое |
переименовать |
help |
список команд |
bye, quit, exit |
выйти |
В sftp добавляются локальные команды с буквой l: lls, lpwd, lmkdir - они работают с вашим компьютером.
Скачать файл под другим именем: get remote.txt local.txt.
Несколько файлов и папки
В ftp:
prompt отключить запрос подтверждения для каждого файла
mget *.log скачать все файлы .log
mput *.jpg загрузить все файлы .jpg
Папки целиком клиент ftp передавать не умеет. В sftp это делается ключом -r:
get -r backups
put -r site
Режим передачи
В классическом FTP есть два режима: ascii (текстовый, с преобразованием переводов строк) и binary (файл передаётся байт в байт). Архивы, картинки и программы в режиме ascii портятся. Перед передачей выполните:
binary
Современные клиенты и серверы обычно включают двоичный режим сами, но команда ничего не ломает. В SFTP такого разделения нет.
Активный и пассивный режим
В активном режиме FTP сервер сам открывает соединение для данных к клиенту, и файрвол или NAT на стороне клиента его не пропускают. Симптом - подключение и вход проходят, а команда ls зависает. Решение - пассивный режим, где оба соединения открывает клиент:
passive
Многие клиенты включают его по умолчанию. В ftp можно сразу запустить клиент в пассивном режиме ключом -p.
SFTP в скриптах
Пакетный режим: команды берутся из файла, а вход должен быть по ключу без пароля.
cat > upload.txt <<'END'
cd /var/www/uploads
put report.pdf
bye
END
sftp -b upload.txt user@server.example.com
При ошибке любой команды sftp -b прекращает работу с ненулевым кодом возврата, и скрипт может это проверить.
Для простого копирования без интерактивной сессии удобнее scp или rsync поверх SSH:
scp report.pdf user@server:/var/www/uploads/
rsync -avz site/ user@server:/var/www/site/
FTP в скриптах
Классический ftp можно запустить без автоматического входа (-n) и передать команды через ввод:
ftp -n ftp.example.com <<'END'
user username password
binary
cd upload
put backup.tar.gz
bye
END
Пароль в скрипте виден всем, кто может прочитать файл. Чуть безопаснее хранить данные входа в файле ~/.netrc с правами 600:
machine ftp.example.com
login username
password password
lftp
lftp удобнее для скриптов: умеет FTPS (FTP с шифрованием), SFTP, повтор при обрывах, параллельную загрузку и синхронизацию папок.
lftp -u username ftp.example.com
Синхронизация папки на сервере с локальной (зеркалирование):
lftp -u username,password -e "mirror -R --delete site /public_html; bye" ftp.example.com
Ключ -R означает обратное направление: с компьютера на сервер. Без него mirror скачивает папку с сервера. --delete удаляет на приёмной стороне файлы, которых нет в источнике, - используйте его осторожно.
Подключение по FTPS или SFTP задаётся в адресе: lftp ftps://ftp.example.com или lftp sftp://user@server.example.com.
curl и wget
Для разовой операции не нужен интерактивный клиент:
curl -u username:password -O ftp://ftp.example.com/pub/file.zip # скачать
curl -u username:password -T backup.tar.gz ftp://ftp.example.com/upload/ # загрузить
curl -u username:password ftp://ftp.example.com/pub/ # список файлов
wget ftp://username:password@ftp.example.com/pub/file.zip
curl поддерживает и SFTP: curl -u user: --key ~/.ssh/id_ed25519 sftp://server/path/file -O.
Частые проблемы
- Вход проходит,
lsзависает - включите пассивный режим. - 530 Login incorrect - неверный логин или пароль, либо для пользователя на сервере запрещён FTP-доступ.
- 550 Permission denied или Failed to open file - нет прав на папку или файл на сервере.
- Испорченные архивы после скачивания - файл передан в режиме ascii, повторите после
binary. - Connection refused - на сервере не запущен FTP- или SSH-сервер, неверный порт или подключение блокирует файрвол.
- Host key verification failed в sftp - ключ сервера изменился с прошлого подключения. Если вы знаете, что сервер переустановили, удалите старый ключ командой
ssh-keygen -R server.example.com; если нет - выясните причину, прежде чем подключаться.





Список выручил, спасибо.
Спасибо большое!
Плюсую в карму : )
Спасибо. Очень помогла Ваша информация 🙂
Как папку скопировать елки палки ?
Могу посоветовать попробовать
mget *
Спасибо!
Очень благодарен!
Годнота