Команда Linux SCP

SCP — это классический инструмент для создания зашифрованных копий между двумя Linux- и POSIX-совместимыми компьютерами в сети. SCP расшифровывается как «защищенная копия», причем «защищенная» означает шифрование передаваемых данных. Название протокола SCP происходит от двух технологий, на которых он основан:

  • протокол SSH (Secure Shell), который обеспечивает зашифрованный доступ к удаленным системам.
  • инструмент RCP (Remote Copy), который копирует файлы в сети без шифрования.

Команда Linux SCP — это программное обеспечение, которое запускается на локальной системе и на сервере. Инструмент действует как демон и клиент для протокола SCP. Поскольку SCP является частью широко используемого дистрибутива OpenSSH, он доступен практически на каждой системе. Как обычно в Linux, доступ к команде SCP можно получить через командную строку.

Однако одним из существенных недостатков протокола SCP является то, что это программное обеспечение органично развивалось. Это означает, что он не стандартизирован, и нет документа RFC или подобной спецификации. Эталонная реализация, которая является частью проекта OpenSSH — это все, что есть. В настоящее время существуют современные альтернативы SCP, которые являются предпочтительными для большинства случаев использования.

Функциональность и использование команды Linux SCP

Функциональность команды Linux SCP аналогична более старой команде RCP. Как и в случае с RCP, синтаксис SCP в командной строке повторяет команду CP, которая используется для копирования файлов в локальной системе. Поскольку SCP основан на протоколе SSH, сетевое взаимодействие осуществляется через TCP-порт 22. Ниже приведен обзор наиболее распространенных команд Linux для копирования данных:

Команда копирования

Название

Функциональность

Удаленный доступ

cp

Копировать

Копирование, только локальное

rcp

Удаленное копирование

Копирование локальный-удаленный, удаленный-удаленный

RSH

scp

Безопасное копирование

Безопасное копирование локальный-удаленный, удаленный-удаленный

SSH

sftp

Протокол безопасной передачи файлов

Безопасное копирование локально-удаленное, удаленно-удаленное; манипулирование удаленными файловыми системами

SSH

rsync

Удаленная синхронизация

Безопасное копирование локальное, локальное-удаленное, удаленное-удаленное; синхронизация

SSH, Stunnel

SCP можно использовать для копирования файла на сервер или для загрузки файла с сервера. Протокол допускает только односторонний поток данных. Это означает, что при каждом соединении вы можете копировать только в одном направлении. Вы также можете использовать SCP для копирования файлов между двумя системами в сети. Атрибуты также могут быть скопированы из исходного файла в целевой файл.

Поток данных при копировании между двумя удаленными системами

Если вы хотите скопировать файл между двумя удаленными системами с помощью команды Linux SCP, необходимо принять во внимание несколько моментов. SCP использует протокол SSH для установления зашифрованных соединений. При использовании SSH доступ к удаленным системам может осуществляться с помощью имени пользователя и пароля или ключей SSH (пары открытый/закрытый ключ). Приватный метод обычно предпочтительнее публичного.

В первоначальном варианте, при котором файл передается с одной удаленной системы (хоста) на другой хост, происходит следующий процесс:

  1. Пользователь дает команду программе SCP на локальной системе передать файл с хоста 1 на хост 2.
  2. Программа SCP на локальной системе пользователя открывает SSH-соединение с хостом 1 и запускает находящуюся там программу SCP.
  3. Программа SCP на хосте 1 открывает SSH-соединение с хостом 2 и передает файл, сохраненный на хосте 1, на хост 2, как если бы это был локальный файл.

Для того чтобы этот процесс работал, открытый SSH-ключ должен быть передан с хоста 1 на хост 2. Однако это означает, что хост 1 будет иметь постоянный доступ к хосту 2 без какого-либо участия пользователя, что представляет угрозу безопасности. Это привело к появлению современной версии процесса:

  1. Пользователь дает команду инструменту SCP на своей локальной системе передать файл с хоста 1 на хост 2.
  2. SCP открывает одно соединение с хостом 1 и другое с хостом 2.
  3. Файл проходит через локальную систему и передается на хост 2.

В этом случае открытый SSH-ключ пользователя хранится на хосте 1 и хосте 2. Часто это уже так, например, если пользователь является администратором, имеющим доступ к обоим хостам.

Синтаксис команды Linux SCP

Базовый формат команды SCP основан на синтаксисе команды CP, которая используется для копирования файлов в локальной системе. Синтаксис выглядит следующим образом: Файл из исходного пути копируется в целевой путь. Перед исходным путем могут быть помещены опции.

scp <options> <source_path> <target_path>

Для копирования файлов с, на или между удаленными системами исходный или целевой путь (или оба) заменяются более сложной записью пути. Запись будет содержать сетевое имя или IP-адрес узла и имя пользователя, который хочет получить доступ к узлу:

<user>@<host>:<directory/file.extension>

Опции SCP

Как обычно, функциональность команды SCP может быть определена с помощью различных опций. Ниже приведена подборка наиболее полезных опций:

Опция

Значение

Комментарий

-C

Использовать сжатие

Не путать с «-c» в нижнем регистре, который указывает шифр для шифрования

-p

Разрешения; передача атрибутов файла в целевой файл

Не путать с «-P» в верхнем регистре, который задает сетевой порт

-r

Копировать каталоги рекурсивно

-v

Подробно; показать выполнение операции шаг за шагом

-q

Тихий; отключить индикатор выполнения

-3

Третья сторона; отправка данных через локальную систему

Совет

Для подробного описания всех доступных опций посмотрите страницу man для команды Linux SCP.

Примеры использования команды Linux SCP

Команда SCP имеет множество вариантов использования. Далее мы приведем лишь некоторые из множества возможных случаев использования команды Linux SCP. Помните, что сегодня для копирования файлов в сети предпочтительнее использовать другие инструменты, а не команду SCP.

Копирование файла с локальной на удаленную систему

Для копирования файла «file.txt» из текущего каталога в локальной системе на хост «host1.com» мы воспользуемся следующим кодом. Обратите внимание, что в этом примере пользователь «user» имеет доступ для входа на хост «host1.com».

scp file.txt user@host1.com:/path/to/directory

Если операция копирования прошла успешно, файл «file.txt» будет находиться в каталоге «/path/to/directory».

Копирование файла с удаленной на локальную систему

Чтобы изменить направление операции копирования, просто поменяем местами локальный и удаленный путь. В этом примере мы будем использовать точку «.», чтобы указать текущий каталог в качестве целевого каталога.

scp user@host1.com:/path/to/directory/file.txt .

В следующем примере мы скопируем файл в папку «Desktop» в локальной папке пользователя, которая обозначается тильдой «~». Чтобы избежать возможных ошибок, путь с тильдой следует заключить в кавычки:

scp user@host1.com:/path/to/directory/file.txt "~/desktop/"

Если вы хотите скопировать файл и сохранить его под другим именем, просто укажите новое имя в конце целевого пути:

scp user@host1.com:/path/to/directory/file.txt "~/desktop/file.bak"

Копирование нескольких файлов

Если вы знакомы с командой CP, вы, вероятно, уже догадались, что с помощью команды SCP также можно скопировать несколько файлов. Самый простой способ сделать это — перечислить файлы по отдельности. В следующем примере все файлы находятся в текущем каталоге, поэтому мы не указываем путь к ним.

scp file-1.txt file-2.txt user@host1.com:/path/to/directory

Будьте осторожны при использовании подстановочных знаков и глобусов, таких как «?» и «*». При использовании в пути к хосту они могут привести к непредвиденным ошибкам. Лучше использовать цикл, как это сделано в нашем примере в разделе «Перемещение файлов на удаленную систему», или воспользоваться альтернативным инструментом.

Копирование целого каталога

Как и в случае с командой CP, SCP можно использовать для рекурсивного копирования целого каталога. Просто добавьте опцию «-r» перед исходным путем.

scp -r directory user@host1/com:/path/to/directory

После завершения операции вы сможете найти копии всех файлов и подкаталогов «directory» на хосте по пути «path/to/directory».

При передаче больших файлов часто целесообразно использовать опцию «-C», которая сжимает файлы для передачи.

scp -C -r directory user@host1/com:/path/to/directory
Примечание

Обратите внимание, что команда Linux SCP всегда передает все файлы вместе. Это означает, что если передача прерывается, ее нужно начинать с самого начала. Если вы копируете большие каталоги или у вас нестабильное сетевое соединение, вам следует рассмотреть возможность использования альтернативного инструмента.

Копирование файла между двумя удаленными системами

Чтобы скопировать файл между двумя хостами, мы укажем пользователя и хост для исходного и целевого путей:

scp user@host1.com:/path/to/directory/file.txt user@host2.com:/path/to/other/directory

Как отмечалось выше, обычно лучше направлять передачу через собственную систему. Для этого мы будем использовать опцию «-3»:

scp -3 user@host1.com:/path/to/directory/file.txt user@host2.com:/path/to/other/directory

Перемещение файлов на удаленную систему

Более сложным вариантом использования команды Linux SCP является перемещение локальных данных на хост. Это может быть удобно, если вы хотите, например, создать удаленную резервную копию локальных файлов, а после резервного копирования файлы больше не нужны. Команда SCP не предлагает никакого независимого варианта перемещения файлов, но мы можем создать решение самостоятельно, используя общие методы.

Сначала рассмотрим операцию перемещения. По сути, это комбинация копирования и удаления. Мы можем реализовать эту последовательность операций в командной строке с помощью команд «scp» и «rm». («rm» — это команда для удаления файлов). Логический оператор AND «&&» объединяет эти две команды, так что вторая выполняется только после успешного завершения первой. Таким образом, мы можем быть уверены, что копия была создана на хосте до того, как оригинал будет удален.

Наконец, мы используем цикл for для обработки файлов, расположенных в текущем каталоге. Есть возможность включить только определенные файлы или типы файлов. Поскольку мы хотим создать точную резервную копию каждого файла, мы будем использовать опцию «-p» для копирования атрибутов файла. А поскольку создание резервной копии — важный процесс, мы будем следить за ним с помощью опции «-v».

 

for file in ./example*.extension ; do scp -p -v "$file" user@host.com:"/backup/${file}.bak" && rm "$file" ; done

Альтернативы команде Linux SCP

Несмотря на наличие почти в каждой системе, SCP больше не является широко предпочитаемым методом копирования файлов в сети. Разработчики проекта OpenSSH, который является домом для SCP, сами отметили это.

В качестве альтернативы сопровождающие SCP приводят SFTP (Secure File Transfer Protocol) и Rsync (Remote Sync), которые также используют SSH для зашифрованного доступа к удаленному узлу. Обе программы обладают большей функциональностью и активно развиваются. Единственным недостатком этих инструментов является то, что их, возможно, придется установить перед использованием, в то время как SCP поставляется предустановленным на большинстве систем. Давайте рассмотрим эти две альтернативы подробнее.

SFTP является более или менее прямым преемником SCP. Передача данных шифруется и использует существующую инфраструктуру SSH. На практике это означает, что к удаленным файловым системам хостов можно получить доступ с помощью протокола STFP, если доступ по SSH разрешен из локальной системы. Протокол SFTP предлагает значительно более широкий набор функций, чем SCP. Передаваемые данные автоматически проверяются на корректность, а прерванная передача может быть возобновлена.

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

Резюме

Если в вашей системе доступны SFTP или Rsync, то для копирования данных в сети следует использовать один из них вместо SCP.

Оцените статью
cdelat.ru
Добавить комментарий