- Home »
Передача файлов между серверами — задача настолько банальная, что о ней обычно не задумываешься… пока не столкнёшься с реальным проектом. Вот есть у тебя 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 там всегда под рукой!
Официальные ресурсы:
В этой статье собрана информация и материалы из различных интернет-источников. Мы признаем и ценим работу всех оригинальных авторов, издателей и веб-сайтов. Несмотря на то, что были приложены все усилия для надлежащего указания исходного материала, любая непреднамеренная оплошность или упущение не являются нарушением авторских прав. Все упомянутые товарные знаки, логотипы и изображения являются собственностью соответствующих владельцев. Если вы считаете, что какой-либо контент, использованный в этой статье, нарушает ваши авторские права, немедленно свяжитесь с нами для рассмотрения и принятия оперативных мер.
Данная статья предназначена исключительно для ознакомительных и образовательных целей и не ущемляет права правообладателей. Если какой-либо материал, защищенный авторским правом, был использован без должного упоминания или с нарушением законов об авторском праве, это непреднамеренно, и мы исправим это незамедлительно после уведомления. Обратите внимание, что переиздание, распространение или воспроизведение части или всего содержимого в любой форме запрещено без письменного разрешения автора и владельца веб-сайта. Для получения разрешений или дополнительных запросов, пожалуйста, свяжитесь с нами.