Home » Передача файлов с scp и rsync: настройка и примеры
Передача файлов с scp и rsync: настройка и примеры

Передача файлов с scp и rsync: настройка и примеры

Передача файлов между серверами — задача настолько банальная, что о ней обычно не задумываешься… пока не столкнёшься с реальным проектом. Вот есть у тебя VPS, выделенный сервер или даже целый облачный кластер — и внезапно нужно быстро и надёжно перекинуть гигов десять логов, дампов или каких-нибудь картинок. FTP? Не смеши мои скрипты. Почта? Ну-ну. Вот тут и приходят на помощь старые добрые scp и rsync — инструменты, без которых не обходится ни один уважающий себя админ, DevOps или просто человек, который не любит таскать флешки.

О чём статья и зачем всё это нужно

Этот пост — не из серии «вот вам команды, копируйте и радуйтесь». Я расскажу, как работают scp и rsync, чем они реально отличаются, как быстро их настроить, какие грабли встречаются на пути и как их обойти. Будет много практики, примеры для реальных сценариев, советы по автоматизации и даже немного про нестандартные способы применения. Всё — чтобы вы могли не просто копировать файлы, а сделать это максимально быстро, безопасно и удобно, даже если у вас 20 серверов в разных дата-центрах.

Почему это важно: боль и значимость темы

  • Вам надо мигрировать сайт или сервис — и нужно перекинуть всё, что не лежит в git.
  • Вы делаете бэкапы и хотите, чтобы они точно доехали до удалённого хранилища, а не потерялись по пути.
  • Нужно автоматизировать деплой, чтобы скрипт сам раскидывал файлы по разным серверам без лишних движений.
  • Вы хотите быть уверены, что никто не перехватит ваши данные в пути.

Всё это — про scp и rsync. Но если не знать нюансов, можно нарваться на кучу проблем: от медленной передачи до случайной потери данных или дыр в безопасности.

Как это работает: алгоритмы, структура, суть

scp — Secure Copy Protocol

scp — это такой «копипаст» по SSH. По сути, это обёртка над ssh, которая просто берёт файл (или папку), соединяется с удалённой машиной и копирует туда (или обратно) через зашифрованный канал. Всё просто: никаких сложных протоколов, только SSH-ключи или пароли.

  • Работает практически на всех UNIX-подобных системах.
  • Передача идёт по одному потоку, без сжатия (по умолчанию).
  • Нет синхронизации — только «взял и скопировал».
  • Достаточно быстрый, но не оптимальный для больших объёмов или тысячи мелких файлов.

rsync — Remote Sync

rsync — это уже не просто копирование, а умная синхронизация. Он сравнивает файлы на исходной и целевой машине, копирует только изменённые части (или новые файлы), может сжимать данные на лету и даже работать по SSH (или по своему протоколу через rsyncd).

  • Очень экономит трафик — особенно если файлы почти не меняются.
  • Может работать как копия, так и синхронизация (двусторонняя или односторонняя).
  • Поддерживает инкрементальные копии, исключения, фильтры, сжатие, удаление лишнего на целевой стороне.
  • Идеально для бэкапов, деплоя, миграций.

Как быстро и просто всё настроить: практика и примеры

Базовая настройка scp

Всё, что вам нужно — это рабочий SSH-доступ к серверу (по ключу или паролю). Если вы ещё не настроили VPS или выделенный сервер, рекомендую VPS или выделенный сервер — там обычно SSH уже работает из коробки.

Копировать файл на удалённый сервер:


scp /home/user/file.txt user@remote_host:/home/user/

Копировать папку (рекурсивно):


scp -r /home/user/folder user@remote_host:/home/user/

Скачать файл с удалённого сервера:


scp user@remote_host:/home/user/file.txt /home/user/

Копировать между двумя удалёнными серверами (через вашу машину):


scp user1@host1:/path/file.txt user2@host2:/path/

Всё просто: указываете источник, цель и — если надо — порт (-P), если SSH не на стандартном 22-м.

Базовая настройка rsync

rsync обычно уже стоит в большинстве Linux-дистрибутивов. Если нет — ставим через apt install rsync или yum install rsync.

Синхронизировать локальную папку с удалённой по SSH:


rsync -avz /home/user/folder/ user@remote_host:/home/user/folder/

  • -a — архивный режим (сохраняет права, симлинки, рекурсивно)
  • -v — подробный вывод
  • -z — сжатие данных на лету

Скачать с удалённого сервера:


rsync -avz user@remote_host:/home/user/folder/ /home/user/folder/

Удалять файлы на целевой стороне, которых нет в источнике (полная синхронизация):


rsync -avz --delete /home/user/folder/ user@remote_host:/home/user/folder/

Синхронизировать только новые или изменённые файлы:


rsync -avzu /home/user/folder/ user@remote_host:/home/user/folder/

  • -u — не перезаписывать более новые файлы на целевой стороне

SSH-ключи для автоматизации

Чтобы не вводить пароль каждый раз (особенно в скриптах), используйте SSH-ключи:


ssh-keygen -t ed25519
ssh-copy-id user@remote_host

Теперь scp и rsync будут работать без пароля.

Примеры и кейсы: что работает, а что нет

Сценарий scp rsync Рекомендация
Быстро перекинуть пару файлов 👍 👍 scp проще, rsync — если надо сжать
Скопировать большую папку (10+ ГБ) 😬 👍👍 rsync быстрее и надёжнее
Миграция сайта с сохранением прав 👍 👍👍 rsync с -a
Регулярные бэкапы 😬 👍👍👍 rsync (инкрементально)
Автоматизация деплоя 👍 👍👍 rsync с фильтрами
Передача по нестандартному порту scp -P 2222 rsync -e ‘ssh -p 2222’ Оба умеют
Прервалась передача — надо докачать 😬 (с нуля) 👍 (докачает) rsync рулит

Положительный кейс: бэкап сайта


rsync -avz --delete /var/www/ user@backup_host:/backup/www/

— только новые и изменённые файлы, права, симлинки, всё как надо. Можно запускать по cron — и забыть о проблеме.

Отрицательный кейс: «scp -r» на 100 000 мелких файлов

Передаёт долго, нет докачки, если что-то упало — начинаем с нуля. Да и нагрузка на CPU не радует.

Кейс: автоматизация деплоя


rsync -avz --exclude='.git' --exclude='node_modules' ./ user@prod:/var/www/

— быстро, только нужные файлы, ничего лишнего не попадёт.

Ошибки новичков, мифы и похожие решения

  • Миф: scp быстрее. Факт: На больших объёмах и множестве файлов rsync быстрее за счёт сжатия и дельты.
  • Ошибка: Копировать папки без -r в scp — не сработает.
  • Ошибка: Забыли про пробелы в путях — экранируйте '/path with spaces/'.
  • Миф: rsync сложный. Факт: Базовые команды просты, а дальше — только если нужно.
  • Похожее решение: sftp — удобно для ручной работы, но не для автоматизации/скриптов.
  • Похожее решение: mc (Midnight Commander) — если любите TUI, но для скриптов не подходит.
  • Похожее решение: lftp — умеет mirror, но требует отдельной настройки, не так прозрачен по SSH.

Статистика и сравнение: что и когда использовать

scp — просто, быстро, но не оптимально для больших данных. rsync — экономит трафик, ускоряет повторные передачи, надёжнее при обрывах. По тестам в сети (например, ArchWiki), rsync на больших объёмах быстрее scp в 2-5 раз, особенно при повторных синхронизациях.

rsync умеет докачивать файлы, если соединение оборвалось — scp всё начнёт с нуля.

scp не умеет фильтровать файлы, а rsync — да (--exclude, --include).

Интересные факты и нестандартные применения

  • rsync как сетевой бенчмарк: rsync --progress /dev/zero user@remote:/dev/null — показывает реальную скорость канала.
  • rsync по локалке: Можно синхронизировать папки на одном сервере — быстрее, чем cp, если много файлов.
  • Передача через jump host (bastion): scp -o ProxyJump=user@jump_host file.txt user@target:/path/
  • rsyncd: Можно поднять отдельный rsync-сервер для массовых бэкапов (см. официальную документацию).

Автоматизация и скрипты: новые возможности

  • Скрипты бэкапа по cron — rsync с ключами, логированием и уведомлениями.
  • Деплой без downtime — rsync сначала, потом atomic swap симлинка.
  • Миграция между облаками — rsync с фильтрами, чтобы не тянуть мусор.
  • Мониторинг скорости и ошибок передачи — парсить вывод rsync для алертов.
  • Интеграция с Ansible, Salt, Chef — rsync под капотом для копирования файлов на кластеры.

Выводы и рекомендации: что выбрать и где использовать

  • scp — если нужно быстро закинуть или скачать пару файлов, без заморочек, вручную или в простом скрипте.
  • rsync — если нужно синхронизировать большие объёмы, делать бэкапы, деплой, миграции, автоматизацию. Экономит время, трафик и нервы.
  • Для автоматизации — только SSH-ключи, никаких паролей в скриптах!
  • Используйте rsync с опциями -avz и --delete для полной синхронизации.
  • Для передачи по нестандартному порту: scp -P порт или rsync -e 'ssh -p порт'.
  • Не забывайте про --exclude и --include в rsync — фильтруйте лишнее.
  • Если часто копируете между разными серверами — настройте alias-ы и используйте ssh-config для удобства.

Итого: scp и rsync — старые, надёжные, проверенные временем инструменты, которые отлично подходят для передачи файлов между серверами на Linux и не только. Освойте их — и ваши задачи по миграции, бэкапам и деплою станут проще и надёжнее. А если нужен сервер для экспериментов — рекомендую VPS или выделенный сервер — SSH там всегда под рукой!

Официальные ресурсы:


В этой статье собрана информация и материалы из различных интернет-источников. Мы признаем и ценим работу всех оригинальных авторов, издателей и веб-сайтов. Несмотря на то, что были приложены все усилия для надлежащего указания исходного материала, любая непреднамеренная оплошность или упущение не являются нарушением авторских прав. Все упомянутые товарные знаки, логотипы и изображения являются собственностью соответствующих владельцев. Если вы считаете, что какой-либо контент, использованный в этой статье, нарушает ваши авторские права, немедленно свяжитесь с нами для рассмотрения и принятия оперативных мер.

Данная статья предназначена исключительно для ознакомительных и образовательных целей и не ущемляет права правообладателей. Если какой-либо материал, защищенный авторским правом, был использован без должного упоминания или с нарушением законов об авторском праве, это непреднамеренно, и мы исправим это незамедлительно после уведомления. Обратите внимание, что переиздание, распространение или воспроизведение части или всего содержимого в любой форме запрещено без письменного разрешения автора и владельца веб-сайта. Для получения разрешений или дополнительных запросов, пожалуйста, свяжитесь с нами.

Leave a reply

Your email address will not be published. Required fields are marked