// Engineering Log

Протоколы передачи файлов: Часть 3 — TFTP и SCP

Опубликовано 22.09.2026

TFTP и SCP не конкурируют с FTP и SFTP за роль основного способа обмена файлами. Это узкие инструменты: первый нужен сетевому оборудованию и загрузке по сети, второй — быстрому копированию между серверами по SSH. Но встречаются они постоянно, и у обоих есть особенности, которые стоит знать.

TFTP: минимальный протокол для оборудования

TFTP (Trivial File Transfer Protocol) описан в RFC 1350. Он работает поверх UDP, сервер слушает порт 69. Протокол умеет ровно две вещи — прочитать файл и записать файл — и больше ничего:

  • нет аутентификации: ни логина, ни пароля;
  • нет списка каталогов: имя файла нужно знать заранее;
  • нет шифрования;
  • данные идут блоками по 512 байт, каждый блок подтверждается перед отправкой следующего, поэтому на каналах с задержкой TFTP медленный.

Такая простота — не недостаток, а цель. Клиент TFTP помещается в загрузочное ПЗУ сетевой карты или в загрузчик роутера, где нет места для полноценного стека.

Где используется TFTP

  • Загрузка по сети (PXE). Компьютер без диска получает от DHCP-сервера адрес TFTP-сервера и имя загрузочного файла, скачивает загрузчик по TFTP и продолжает загрузку. Так разворачивают операционные системы на десятки машин и загружают тонкие клиенты.
  • Прошивки и конфигурации сетевого оборудования. Коммутаторы, роутеры и IP-телефоны умеют забирать прошивку или конфигурацию с TFTP-сервера. IP-телефоны при старте часто скачивают свои настройки именно так.
  • Восстановление «окирпиченного» устройства. Многие роутеры в режиме восстановления принимают прошивку только по TFTP.

Как безопасно поднять TFTP-сервер

В Debian и Ubuntu распространён пакет tftpd-hpa. Настройки находятся в /etc/default/tftpd-hpa:

bash
TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/srv/tftp"
TFTP_ADDRESS="192.0.2.5:69"
TFTP_OPTIONS="--secure"
  • --secure ограничивает сервер каталогом /srv/tftp: клиент не сможет запросить файл за его пределами.
  • TFTP_ADDRESS лучше привязать к адресу во внутренней сети, а не ко всем интерфейсам.
  • Запись файлов по умолчанию выключена — включайте её, только если устройство действительно должно выгружать файлы на сервер.

Риски TFTP

Отсутствие аутентификации означает, что любой, кто видит сервер, может скачать любой файл из его каталога, если знает или угадает имя. А в конфигурациях IP-телефонов и роутеров часто лежат пароли SIP-учёток и ключи. Поэтому:

  • TFTP-сервер никогда не открывают в интернет — только во внутренней сети или отдельном VLAN для оборудования;
  • в каталоге держат только то, что нужно устройствам сейчас;
  • после прошивки оборудования сервер останавливают, если он больше не нужен.

SCP: копирование по SSH

SCP (secure copy) — команда для копирования файлов между компьютерами по SSH. Синтаксис повторяет обычный cp:

bash
# скопировать файл на сервер
scp backup.tar.gz admin@192.0.2.10:/srv/backup/

# скопировать каталог с сервера, сохранив даты и права
scp -rp admin@192.0.2.10:/var/www/site ./site-copy

Аутентификация, шифрование и ключи — те же, что у SSH, поэтому отдельный сервер не нужен: если к машине можно подключиться по SSH, можно и копировать файлы.

Что изменилось в OpenSSH 9.0

Исторически scp использовал собственный протокол scp/rcp. У него были конструктивные проблемы: имена файлов обрабатывались удалённой оболочкой, из-за чего пробелы и спецсимволы приходилось экранировать дважды, а в самом протоколе находили уязвимости.

Начиная с OpenSSH 9.0 (2022 год) команда scp по умолчанию работает по протоколу SFTP. Для пользователя синтаксис не изменился, но под капотом теперь тот же протокол, что и у sftp. Если удалённая сторона не поддерживает SFTP — например, старое устройство или урезанный SSH-сервер, — можно вернуть старый протокол ключом -O:

bash
scp -O firmware.bin admin@192.0.2.20:/tmp/

Отсюда следует, что противопоставление «SCP — неинтерактивный, SFTP — интерактивный» теперь описывает разные интерфейсы, а не разные протоколы. scp удобен для разовой команды, sftp — для работы в интерактивной сессии или пакетного сценария.

Чем заменить SCP для регулярных задач

  • rsync по SSH — передаёт только изменившиеся части файлов, умеет продолжать прерванную передачу и синхронизировать каталоги. Для резервных копий и регулярного копирования он лучше scp.
  • sftp в пакетном режиме — sftp -b commands.txt user@host выполняет заранее подготовленный список команд, удобно для выгрузок по расписанию.

Типичные ошибки

  • TFTP-сервер, открытый в интернет. Любой может скачать конфигурации с паролями.
  • Межсетевой экран пропускает порт 69, но TFTP всё равно не работает. Данные идут с другого, случайного порта сервера, поэтому нужен модуль отслеживания соединений для TFTP (conntrack helper) или разрешение для ответного трафика.
  • Старые скрипты с scp падают на новом сервере. Причина обычно в SFTP по умолчанию: удалённая сторона не поддерживает SFTP — поможет -O, но лучше обновить удалённую сторону.
  • Копирование больших каталогов через scp -r каждый раз целиком. Для повторяющихся задач берите rsync.

// Contact

Нужна помощь?

Свяжись со мной и я помогу решить проблему

Написать в Telegram

Отвечаю в течение рабочего дня (03:00–13:00 GMT)

Или оставьте заявку здесь:

Подтвердите, что вы не бот.

Написать и получить быстрый ответ