В этом руководстве рассматриваются основы и различия между SCP и Rsync, время использования каждого из них, их производительность, соображения безопасности, практические примеры и советы по эффективной передаче файлов, что поможет вам выбрать подходящий инструмент для ваших нужд.
SCP (Secure Copy Protocol) и Rsync – это широко используемые инструменты командной строки для передачи файлов между компьютерами в сети.
Оба инструмента необходимы для системного администрирования и обладают различными преимуществами в зависимости от конкретных требований к задачам передачи файлов, таких как безопасность, скорость и объем передаваемых данных.
Основные различия между SYNC и RSYNC
Определение
SCP – это часть пакета SSH (Secure Shell), обеспечивающая безопасный и аутентифицированный метод копирования файлов между локальным и удаленным хостом или между двумя удаленными хостами.
Он шифрует передаваемые файлы, обеспечивая безопасность данных при их передаче.
🐧 4 способа подключения к SSH и SCP через прокси-сервер (jump) на Linux
Rsync, с другой стороны, – это утилита, которая обеспечивает быструю инкрементную передачу файлов, передавая только различия между источником и местом назначения.
Она может работать по SSH для защиты передаваемых данных и часто используется для резервного копирования и синхронизации файлов между системами благодаря своей эффективности и гибкости.
Синтаксис
Основной синтаксис команд SCP выглядит следующим образом:
- OPTIONS: Для изменения поведения SCP можно применять различные опции, например -P (указать ssh-порт удаленного хоста), -p (сохранить время модификации файлов и доступа к ним) и -r (рекурсивно копировать целые каталоги).
- user@: Необязательно. Указывает имя пользователя на удаленном хосте. Если не указано, SCP принимает то же имя пользователя, что и в локальной системе.
- source_host: Имя хоста или IP-адрес системы-источника. Если не указано, SCP предполагает, что файл находится в локальной системе.
- destination_host: Имя хоста или IP-адрес системы назначения.
- file1, file2: Пути к исходному и целевому файлу соответственно.
Например:
Основной синтаксис Rsync следующий:
- [options]: Сюда входят все специфические для Rsync опции, такие как -a (режим архивации), -v (многословность), -z (сжатие данных во время передачи) и т. д.
- [[user@]source_host:]: Опционально указывает имя пользователя и хост для расположения источника. Если они не указаны, Rsync принимает локальный путь. Указание хоста подразумевает удаленный доступ, обычно защищенный по SSH.
- source_path: Путь к исходному файлу или каталогу. Это может быть локальный путь или путь на хосте источника, если указано.
- [[user@]destination_host:]: Опционально указывает имя пользователя и хост для места назначения. Как и в случае с исходным хостом, опущение этого параметра подразумевает локальный путь к месту назначения.
- path_To: Путь, по которому будут скопированы файлы или каталоги. Он может находиться в локальной системе или на указанном хосте назначения.
Например:
Безопасность
- SCP: По умолчанию работает через SSH (Secure Shell), обеспечивая безопасный канал с шифрованием и аутентификацией. Уровень безопасности привязан к SSH, что делает его очень безопасным для передачи файлов.
- Rsync: По умолчанию rsync использует протокол Rsync, но может работать и по SSH. rsync обеспечивает тот же уровень безопасности, что и SCP, если настроен на это. Однако rsync также может работать в режиме демона без SSH, что может быть менее безопасно, если не настроить должным образом другие меры безопасности.
Чтобы использовать Rsync с SSH, вы можете просто добавить опцию -e (или –rsh) к команде Rsync, указав ssh в качестве удаленной оболочки:
В этой команде:
- -a – режим архивации, в котором сохраняются разрешения, временные метки и т. д.
- -v включает режим verbose.
- -z включает сжатие при передаче данных.
- -e ssh указывает Rsync использовать SSH для передачи данных.
🐧 Как возобновить частично переданные файлы по SSH Используя Rsync
Если ваш удаленный хост прослушивает нестандартный порт SSH, вы можете указать этот порт с помощью опции -e, как показано ниже:
Где -p 2222 указывает, что SSH должен подключаться к порту 2222 на удаленном хосте.
Для более сложных настроек или повышения безопасности можно передать дополнительные параметры SSH с помощью флага -e.
Например, чтобы отключить строгую проверку ключей хоста, вы можете использовать:
Производительность
- SCP: Несмотря на безопасность и простоту, SCP не всегда является наиболее эффективным, особенно для больших массивов данных. В нем нет возможности сжимать данные во время передачи (хотя сжатие в SSH можно включить), и он всегда копирует файлы целиком, что может быть медленным и требовательным к пропускной способности для больших файлов.
- Rsync выполняет более сложную операцию, сравнивая исходный и конечный файлы перед передачей. Этот шаг сравнения может привести к улучшению общей производительности с точки зрения использования полосы пропускания, но может быть более требовательным к процессору во время процесса сравнения.
Масштабируемость
- SCP: Масштабирование с помощью SCP может быть затруднено из-за отсутствия функций инкрементного копирования и синхронизации. Для крупномасштабных операций эффективное управление пропускной способностью и хранением становится затруднительным.
- Rsync: Rsync лучше подходит для масштабирования благодаря функции инкрементного обновления и возможности эффективной синхронизации каталогов и файлов в нескольких местах. Он лучше адаптируется к различным сетевым условиям и конфигурациям хранилищ.
Работа с прерванными передачами
- SCP не имеет встроенного механизма для возобновления прерванной передачи. Если передача прервана, ее нужно перезапустить с самого начала.
- Rsync имеет возможность возобновлять прерванную передачу, что делает его более надежным при передаче больших файлов или по ненадежным соединениям.
🕡 Как сохранить права доступа acl при использовании команд tar и rsync
Эффективность и скорость передачи данных
- SCP обычно быстрее для отдельных файлов или при передаче данных в первый раз, поскольку он копирует все содержимое без проверки различий.
- Rsync превосходит по эффективности, особенно при последующих передачах, поскольку копирует только различия между источником и местом назначения, что может значительно сократить время передачи и использование полосы пропускания.
см. также:
- 🐧 Как переместить домашний каталог на новый раздел или диск в Linux
- 🐧 Как вывести список служб, которые запускаются при загрузке на Linux
- 👥 Как ограничить количество входов по SSH по пользователю / группе / на систему