
SCP (безопасное копирование) — это утилита командной строки, которая позволяет безопасно копировать файлы и каталоги между двумя местами.
При передаче данных с помощью scp файлы и пароль шифруются, так что никто, следящий за трафиком, не получит никакой конфиденциальной информации. SCP использует протокол SSH как для аутентификации, так и для шифрования.
В этом руководстве будет показано, как использовать команду scp , с помощью практических примеров и подробных объяснений наиболее часто используемых параметров scp .
Синтаксис команды SCP
Прежде чем приступить к использованию команды scp , давайте рассмотрим ее базовый синтаксис.
Синтаксис команды scp имеет следующий вид:
scp [ OPTION ] [ user@ ] SRC_HOST: ] file1 [ user@ ] DEST_HOST: ] file2
-
OPTION— параметры scp , такие как шифр, конфигурация ssh, порт ssh, лимит, рекурсивное копирование и т. д. - « — .
-
[user@]SRC_HOST:]file1— путь к исходному файлу. Имя пользователя на исходной машине и имя хоста (или IP-адрес) исходной машины используются, если файл расположен на удалённой машине. -
[user@]DEST_HOST:]:file2— путь к файлу назначения. Имя пользователя на компьютере назначения и имя хоста (или IP-адрес) компьютера назначения используются, если файл расположен на удалённом компьютере.
Локальные файлы можно указывать с помощью абсолютного или относительного пути, тогда как имена удаленных файлов должны включать спецификацию пользователя и хоста.
scp предоставляет ряд параметров, которые управляют всеми аспектами его поведения. Наиболее часто используемые параметры:
-
-P— указывает порт SSH удаленного хоста. -
-p— сохраняет время изменения и доступа к файлу. -
-q— Используйте эту опцию, если вы хотите отключить индикатор прогресса и сообщения, не являющиеся ошибками. -
-C— эта опция заставляетscpсжимать данные при их отправке на целевой компьютер. -
-r— эта опция указываетscpкопировать каталоги рекурсивно.
Прежде чем начать
Команда scp использует ssh для передачи данных, поэтому для аутентификации на удаленных системах требуется ключ SSH или пароль.
Двоеточие ( : ) — это то, с помощью чего scp различает локальные и удаленные местоположения.
Чтобы иметь возможность копировать файлы, необходимо иметь как минимум права на чтение исходного файла и права на запись в целевой системе.
Будьте осторожны при копировании файлов, имеющих одинаковое имя и местоположение в обеих системах, scp заменит файлы без предупреждения.
При передаче больших файлов рекомендуется запускать команду scp внутри сеанса screen или tmux .
Копирование файлов и каталогов между двумя системами с помощью scp
С помощью scp вы можете скопировать файл или каталог:
- Из вашей локальной системы в удаленную систему.
- Из удаленной системы в вашу локальную систему.
- Между двумя удаленными системами из вашей локальной системы.
Копирование локального файла на удаленную систему с помощью команды scp
Чтобы скопировать файл из локальной системы в удаленную, выполните следующую команду:
scp file.txt remote_username@10.10.0.2:/remote/directory
Где file.txt — имя файла, который нужно скопировать, remote_username — имя пользователя на удалённом сервере, 10.10.0.2 — IP-адрес сервера. /remote/directory — это путь к каталогу, в который нужно скопировать файл. Если удалённый каталог не указан, файл будет скопирован в домашний каталог удалённого пользователя.
Вам будет предложено ввести пароль пользователя, и начнется процесс передачи.
remote_username@10.10.0.2's password: file.txt 100% 0 0.0KB/s 00:00
Если не указывать имя файла в месте назначения, файл будет скопирован с исходным именем. Если вы хотите сохранить файл под другим именем, необходимо указать новое имя:
scp file.txt remote_username@10.10.0.2:/remote/directory/newfilename.txt
Если SSH на удаленном хосте прослушивает порт, отличный от порта по умолчанию 22, то вы можете указать порт с помощью аргумента -P :
scp -P 2322 file.txt remote_username@10.10.0.2:/remote/directory
Чтобы скопировать каталог и все его файлы, вызовите команду scp с флагом -r , которая рекурсивно копирует весь каталог и его содержимое:
scp -r /local/directory remote_username@10.10.0.2:/remote/directory
При использовании подстановочных знаков, таких как * или ? для сопоставления определённых файлов или каталогов, чтобы избежать расширения оболочки, необходимо заключить путь, содержащий подстановочные знаки, в кавычки ( " " ) или одинарные кавычки ( ' ' ). В следующем примере мы копируем все файлы .txt из локального каталога Projects в каталог Projects на удалённом сервере:
scp "~Projects/*.txt" remote_username@10.10.0.2:/home/user/Projects/
Если вы хотите сохранить метаданные файла, которые, помимо прочего, включают данные о владельце и дату создания файла, используйте опцию -p . Например, чтобы скопировать file.txt в удалённый каталог и сохранить метаданные, введите:
scp -p file.txt remote_username@10.10.0.2:/remote/directory/
Копирование удаленного файла в локальную систему с помощью команды scp
Чтобы скопировать файл из удаленной системы в локальную, используйте удаленное расположение в качестве источника, а локальное расположение в качестве места назначения.
Например, чтобы скопировать файл с именем file.txt с удаленного сервера с IP 10.10.0.2 , выполните следующую команду:
scp remote_username@10.10.0.2:/remote/file.txt /local/directory
Если вы не установили беспарольный вход по SSH на удаленную машину, вам будет предложено ввести пароль пользователя.
Копирование файла между двумя удаленными системами с помощью команды scp
В отличие от rsync , при использовании scp вам не нужно входить на один из серверов для передачи файлов с одной удаленной машины на другую.
Следующая команда скопирует файл /files/file.txt с удаленного хоста host1.com в каталог /files на удаленном хосте host2.com .
scp user1@host1.com:/files/file.txt user2@host2.com:/files
Вам будет предложено ввести пароли для обеих удалённых учётных записей. Данные будут переданы напрямую с одного удалённого хоста на другой.
Чтобы направить трафик через машину, на которой выдается команда, используйте опцию -3 :
scp -3 user1@host1.com:/files/file.txt user2@host2.com:/files
Заключение
Если вы ищете быстрый, надежный и безопасный способ копирования файлов и каталогов между вашими системами Linux, scp — это подходящий инструмент для этой работы.
Вы также можете настроить аутентификацию на основе SSH-ключа и подключаться к своим серверам Linux без ввода пароля.
Если вы регулярно подключаетесь к одним и тем же системам, вы можете упростить свой рабочий процесс, определив все свои соединения в файле конфигурации SSH .
Связанные руководства