SCP тесно связан с протоколом SSH и действительно родился из той же идеи. SCP – это расширение протокола SSH, обеспечивающее конфиденциальность и защиту данных во время их передачи. Сначала давайте разберемся, как работает SCP, а затем посмотрим на команды scp.
Что такое SCP?

SCP означает протокол безопасного копирования. Это безопасный и эффективный метод копирования файлов и каталогов между локальным и удаленным хостами или между двумя удаленными хостами. Он широко используется для безопасной передачи данных по сети. SCP опирается на SSH (Secure Shell) для создания безопасного соединения и шифрования данных при передаче. Независимо от того, нужно ли вам переместить один файл или целый каталог, SCP обеспечивает надежное решение для удаленной передачи файлов.
Как работает SCP?

SCP построен на базе протокола SSH – криптографического сетевого протокола для безопасного удаленного входа в систему и выполнения команд. Он использует те же механизмы безопасности, что и SSH, включая шифрование и аутентификацию, для защиты данных при передаче. При использовании SCP пользователь инициирует команду копирования на своем локальном компьютере, в которой указывает исходный файл и место назначения на удаленном компьютере. SCP устанавливает SSH-соединение с удаленной системой, а затем безопасно копирует файлы из источника в место назначения.
Когда использовать SCP?

SCP особенно полезен в следующих сценариях.
Удаленное резервное копирование сервера. SCP позволяет создавать резервные копии файлов с удаленного сервера на локальный компьютер или наоборот, что обеспечивает избыточность данных и аварийное восстановление.
Развертывание приложений. Он также упрощает процесс за счет безопасного копирования необходимых файлов в каждую целевую систему при развертывании приложений на нескольких серверах,
Передача больших файлов. SCP – это надежный и безопасный альтернативный метод передачи данных для больших файлов, которые могут быть слишком велики для отправки в виде вложений в электронную почту.
Безопасный обмен файлами. SCP гарантирует, что данные будут зашифрованы на протяжении всего пути при отправке конфиденциальных файлов другим людям.
Удаленное сотрудничество. SCP можно использовать для безопасного обмена файлами с сотрудниками или членами команды, находящимися в разных местах.
Синтаксис команды SCP
Прежде чем приступить к использованию команды SCP, давайте разберемся в базовом синтаксисе.
Синтаксис команды SCP выглядит следующим образом:
scp [options] [source] [destination]Объяснение синтаксиса
Опции. Это необязательные флаги, которые изменяют поведение команды SCP. Вы можете использовать различные опции для настройки процесса передачи данных. Вот некоторые распространенные варианты:
-r: Рекурсивно копирует каталоги и их содержимое.
-p: Сохраняет разрешения, временные метки и режимы исходного файла.
-P: Указывает номер порта для SSH-соединения.
-i: Указывает файл закрытого ключа для аутентификации по SSH.
-C: Использовать сжатие для ускорения передачи данных.
-l: Ограничить полосу пропускания, используемую для передачи данных (в Кбит/с).
-v: Режим Verbose – отображение отладочных сообщений во время передачи данных.
-o: Передает опцию клиенту SSH. С ее помощью можно отключить строгую проверку ключей хоста.
Источник. В источнике указывается файл или каталог, который нужно скопировать. Это может быть локальный или удаленный путь – в зависимости от контекста.
Пункт назначения. Пункт назначения указывает место, куда нужно скопировать источник. Как и источник, это может быть локальный или удаленный путь.
Примеры команд
Копирование файла с локального сервера на удаленный
scp /path/to/local/file.txt user@remotehost:/path/to/destination//path/to/local/file.txt: Это исходный файл, который нужно скопировать с локальной машины.
user@remotehost: Замените user на имя удаленного пользователя, а remote host – на имя хоста или IP-адрес удаленного сервера.
/path/to/destination/: Это путь назначения на удаленном сервере, куда будет скопирован файл.
Пример: В моем случае я выбрал один удаленный сервер для передачи файла.
Имя пользователя удаленного узла – abhishekvarma
Адрес удаленного хоста – 192.168.29.70
scp /home/vboxuser/Desktop/sample.zip abhishekvarma@192.168.29.70:/Users/abhishekvarma/DesktopПри подключении к удаленной машине она запрашивает пароль. Здесь я выбрал zip-файл для копирования.
Выход

При отсутствии ошибок при подключении к удаленному серверу вывод будет выглядеть следующим образом.
sample.zip 100% 20KB 717.9KB/s 00:00Копирование файла с удаленной машины на локальную
scp user@remotehost:/path/to/remote/file.txt /path/to/local/destination/То же, что и выше, замените пользователя и адрес удаленного хоста.
Пример
scp abhishekvarma@192.168.29.70:/Users/abhishekvarma/Desktop/sample.zip /home/vboxuser/DesktopВыход

Это просто пример вывода в моем случае. Временная метка меняется в зависимости от скорости соединения.
sample.zip 100% 20KB 51.2KB/s 00:00Рекурсивное копирование каталога
scp user@remotehost:/path/to/remote/file.txt /path/to/local/destination/Здесь флаг ‘-r’ указывает SCP копировать каталоги рекурсивно (включая подкаталоги и их содержимое).
Пример
scp -r /home/vboxuser/Desktop abhishekvarma@192.168.29.70:/Users/abhishekvarma/DesktopЗдесь я указал весь каталог для копирования файлов.
Выход

sample.zip 100% 20KB 1.0MB/s 00:00 Скриншот от 2023-08-13 21-45-23.png 100% 27KB 1.5MB/s 00:00 .swp 100% 12KB 894.2KB/s 00:00 .help.swp 100% 12KB 780.4KB/s 00:00Копирование файлов, соответствующих шаблону
scp /path/to/local/*.txt user@remotehost:/path/to/destination/*.txt – шаблон, который соответствует всем файлам с расширением .txt в указанном локальном каталоге. Пути источника и назначения такие же, как и раньше.
Пример
scp /home/vboxuser/Desktop/locfolder/*.png abhishekvarma@192.168.29.70:/Users/abhishekvarma/DesktopВыход

Здесь я попробовал использовать расширение .png.
Скриншот от 2023-08-13 21-45-23.png 100% 27KB 1.4MB/s 00:00 Скриншот от 2023-08-13 21-55-28.png 100% 24KB 1.7MB/s 00:00 Скриншот от 2023-08-13 22-04-03.png 100% 38KB 2.1MB/s 00:00Сохраняйте атрибуты файлов
scp -p /path/to/local/file.txt user@remotehost:/path/to/destination/Здесь флаг ‘-p’ сохраняет время модификации, время доступа и режимы исходного файла при копировании.
Пример
scp -p /home/vboxuser/Desktop/sample.zip abhishekvarma@192.168.29.70:/Users/abhishekvarma/DesktopВыход

sample.zip 100% 20KB 420.0KB/s 00:00Укажите другой порт SSH
scp -P 22 /path/to/local/file.txt user@remotehost:/path/to/destination/Флаг ‘-P’ указывает другой порт SSH (в данном случае 22) для SCP-соединения. Вы можете использовать любой порт по своему усмотрению.
Пример
scp -P 22 /home/vboxuser/Desktop/sample.zip abhishekvarma@192.168.29.70:/Users/abhishekvarma/DesktopВыход

sample.zip 100% 20 КБ 1,2 МБ/с 00:00Копирование со сжатием
scp -C /path/to/local/file.txt user@remotehost:/path/to/destination/Этот флаг ‘-C’ включает сжатие во время передачи, что потенциально уменьшает размер передаваемых данных. Адреса источника и назначения такие же, как описано ранее.
Пример
scp -C /home/vboxuser/Desktop/sample.zip abhishekvarma@192.168.29.70:/Users/abhishekvarma/DesktopВыход

sample.zip 100% 20KB 985.8KB/s 00:00Подробный вывод для отладки
scp -v /path/to/local/file.txt user@remotehost:/path/to/destination/Опция ‘-v’ активирует вывод подробной информации, которая предоставляет более подробную информацию в процессе передачи.
Пример
scp -v /home/vboxuser/Desktop/sample.zip abhishekvarma@192.168.29.70:/Users/abhishekvarma/DesktopВыход

Пример вывода будет выглядеть следующим образом.
Выполнение: программа /usr/bin/ssh хост 192.168.29.70, пользователь abhishekvarma, команда scp -v -t /Users/abhishekvarma/Desktop OpenSSH_8.9p1 Ubuntu-3ubuntu0.3, OpenSSL 3.0.2 15 Mar 2022 debug1: Чтение данных конфигурации /etc/ssh/ssh_config debug1: /etc/ssh/ssh_config line 19: include /etc/ssh/ssh_config.d/*.conf matched no files debug1: /etc/ssh/ssh_config line 21: Applying options for * debug1: Connecting to 192.168.29.70 [192.168.29.70] port 22. debug1: Connection established. debug1: identity file /root/.ssh/id_rsa type -1 debug1: identity file /root/.ssh/id_rsa-cert type -1 debug1: identity file /root/.ssh/id_ecdsa type -1 debug1: identity file /root/.ssh/id_ecdsa-cert type -1 debug1: identity file /root/.ssh/id_ecdsa_sk type -1 debug1: identity file /root/.ssh/id_ecdsa_sk-cert type -1Копирование с удаленного компьютера на локальный с выводом подробной информации
scp -v user@remotehost:/path/to/remote/file.txt /path/to/local/destination/Те же объяснения, что и в предыдущем примере, только роли локальных и удаленных мест поменялись местами.
Пример
scp -v abhishekvarma@192.168.29.70:/Users/abhishekvarma/Desktop/sample.zip /home/vboxuser/DesktopВыход

Результат будет выглядеть следующим образом.
Выполнение: программа /usr/bin/ssh хост 192.168.29.70, пользователь abhishekvarma, команда scp -v -f /Users/abhishekvarma/Desktop/sample.zip OpenSSH_8.9p1 Ubuntu-3ubuntu0.3, OpenSSL 3.0.2 15 Mar 2022 debug1: /etc/ssh/ssh_config строка 19: include /etc/ssh/ssh_config.d/*.conf matched no files debug1: Чтение данных конфигурации /etc/ssh/ssh_config debug1: /etc/ssh/ssh_config line 21: Applying options for * debug1: Connecting to 192.168.29.70 [192.168.29.70] port 22. debug1: Connection established. debug1: identity file /root/.ssh/id_rsa type -1 debug1: identity file /root/.ssh/id_rsa-cert type -1 debug1: identity file /root/.ssh/id_ecdsa type -1 debug1: identity file /root/.ssh/id_ecdsa-cert type -1 debug1: identity file /root/.ssh/id_ecdsa_sk type -1 debug1: identity file /root/.ssh/id_ecdsa_sk-cert type -1Копирование с использованием другого ключа SSH
scp -i /path/to/private_key.pem /path/to/local/file.txt user@remotehost:/path/to/destination/Флаг “-i /path/to/private_key.pem” задает другой закрытый ключ SSH для аутентификации.
Пример
scp -i /path/to/private_key.pem /home/vboxuser/Desktop/sample.zip abhishekvarma@192.168.29.70:/Users/abhishekvarma/DesktopВыход

Если у вас есть закрытый ключ, то вы можете использовать его, а можете использовать ключ по умолчанию.
sample.zip 100% 20 КБ 1,1 МБ/с 00:00Копирование нескольких файлов на удаленный сервер
scp file1.txt file2.txt user@remotehost:/path/to/destination/Эта команда копирует файлы file1.txt и file2.txt из локального каталога в указанный пункт назначения на удаленном сервере.
Пример
scp /home/vboxuser/Desktop/image.png /home/vboxuser/Desktop/sample.zip abhishekvarma@192.168.29.70:/Users/abhishekvarma/Desktop Выход

image.png 100% 39 КБ 1,4 МБ/с 00:00 sample.zip 100% 20 КБ 1,5 МБ/с 00:00Копирование удаленного файла с другим именем
scp user@remotehost:/path/to/remote/file.txt /path/to/local/newfilename.txtЭта команда копирует файл file.txt с удаленного сервера в локальный каталог, переименовывая его в newfilename.txt.
Пример
scp abhishekvarma@192.168.29.70:/Users/abhishekvarma/Desktop/sample.zip /home/vboxuser/Desktop/newfile.zipВыход

При выполнении этой команды старые и новые расширения файлов должны быть одинаковыми.
sample.zip 100% 20 КБ 28,7 КБ/с 00:00Копирование с определенным ограничением пропускной способности
scp -l 1000 /path/to/local/file.txt user@remotehost:/path/to/destination/Флаг ‘-l’ задает ограничение пропускной способности в Кбит/с (в данном случае 1000 Кбит/с) для передачи данных.
Пример
scp -l 300 /home/vboxuser/Desktop/sample.zip abhishekvarma@192.168.29.70:/Users/abhishekvarma/DesktopВыход

sample.zip 100% 20 КБ 31,3 КБ/с 00:00Копирование файлов и сохранение символических ссылок
scp -rp /path/to/local/source/ user@remotehost:/path/to/destination/Флаг ‘-p’ сохраняет атрибуты файлов, а флаг -r рекурсивно копирует каталоги. Эта команда также сохраняет символические ссылки во время копирования.
Пример
scp -rp /home/vboxuser/Desktop/image.png abhishekvarma@192.168.29.70:/Users/abhishekvarma/DesktopВыход

image.png 100% 39 КБ 1,8 МБ/с 00:00Сжатое копирование файлов
scp -vC /path/to/local/file.txt user@remotehost:/path/to/destination/Эта команда сочетает в себе как вывод подробной информации (-v), так и сжатие (-C) во время передачи файла.
Пример
scp -vC /home/vboxuser/Desktop/image.png abhishekvarma@192.168.29.70:/Users/abhishekvarma/DesktopВыход

Результат будет выглядеть следующим образом.
scp: debug1: fd 3 очистка O_NONBLOCK Отправка режимов файла: C0664 40050 image.png Sink: C0664 40050 image.png image.png d 6 clearing O_NONBLOCK scp: debug1: fd - clearing O_NONBLOCK image.png debug1: client_input_channel_req: channel type exit-status reply debug1: channel 0: free: client-session, channels 1 Transferred: sent 40220, received 2576 bytes, in 0.1 seconds Bytes per second: sent 352570.0, received 22581.3 root@ubuntu: ~ debug1: Exit status 0 debug1: compress outgoing: raw data 40287, compressed 38198, factor 0.95 debug1: compress incoming: raw data 792, compressed 757, factor 0.96 Копирование между двумя удаленными серверами
Если вы хотите передать файлы с одного удаленного сервера на другой, то можете воспользоваться этой командой.
scp user1@remotehost1:/path/to/remote/file.txt user2@remotehost2:/path/to/destination/Эта команда напрямую передает файл file.txt с remotehost1 на remotehost2.
Пример
scp user1@remotehost1:/path/to/remote/file.txt abhishekvarma@192.168.29.70:/Users/abhishekvarma/DesktopВыход
file.txt 100% 512 КБ 512,0 КБ/с 00:00Если во время передачи возникли какие-либо ошибки или проблемы, на выходе могут появиться сообщения об ошибках, содержащие информацию о том, что именно пошло не так.
ssh: подключение к хосту source.example.com порт 22: Connection refused lost connectionВ этом случае сообщение об ошибке говорит о том, что SSH-соединение с сервером-источником было отклонено. Это может быть вызвано различными причинами, такими как неправильное имя хоста, IP-адрес, порт или проблемы с конфигурацией SSH.
Заключение
Надеюсь, эта статья была полезной для вас, чтобы узнать о SCP и о том, как он работает.









