Поиск по сайту:

Как безопасно передавать файлы с помощью SCP в Linux

Примеры команд SCP для безопасного копирования файлов между локальными и удаленными компьютерами в Linux

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

Что такое SCP?

SCP, что означает Secure Copy, представляет собой программу командной строки, позволяющую безопасно копировать файлы и каталоги между локальной и удаленной системой или между двумя удаленными системами в Linux и Unix-подобные операционные системы.

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

  • из вашей локальной системы в удаленную систему,
  • из удаленной системы в вашу локальную систему,
  • между удаленными системами из вашей локальной системы.

При передаче данных с помощью команды scp файлы и каталоги шифруются. Таким образом, даже если ваша сеть взломана, злоумышленники не смогут получить никаких значимых данных.

SCP является компонентом программы openSSH и использует протокол SSH для безопасной передачи файлов. OpenSSH предустановлен практически во всех современных дистрибутивах Linux и Unix, поэтому не беспокойтесь об его установке.

Предупреждение:

Согласно официальному объявлению разработчиков openSSH,

Протокол scp устарел, негибкий и его сложно исправить. Вместо этого мы рекомендуем использовать для передачи файлов более современные протоколы, такие как sftp и rsync.

Ссылка — https://lists.mindrot.org/pipermail/openssh-unix-dev/2019-March/037672.html.

Однако большинство пользователей по-прежнему предпочитают SCP другим протоколам. Потому что SCP обрабатывает передачу файлов между удаленными устройствами более эффективно, чем его аналоги, такие как SFTP и Rsync.

Кроме того, SCP работает точно так же, как команда cp, а rsync меняет свое поведение в зависимости от того, есть ли в исходном каталоге конечная косая черта или нет. Взгляните на следующие команды:

  • rsync source location/ — скопирует источник в папку назначения.
  • rsync source/destination/ — скопирует содержимое исходной папки в папку назначения.

Поэтому вы всегда должны дважды проверять, поставили ли вы косую черту в конце пути.

Лично я использую Rsync для копирования файлов большого размера между двумя хостами и SCP для копирования отдельных файлов по сети.

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

Общий синтаксис команды SCP приведен ниже:

scp [-346ABCpqrTv] [-c cipher] [-F ssh_config] [-i identity_file] [-J destination] [-l limit] [-o ssh_option] [-P port] [-S program] source ... target

В зависимости от пути передачи файлов синтаксис будет отличаться. Здесь я включил пример синтаксического формата.

Скопируйте файл из локальной системы в удаленную систему:

scp <options> SourceFile User@RemoteHost:RemotePath

Аналогично, чтобы скопировать каталог из вашей локальной системы в удаленную, используйте флаг -r:

scp -r SourceDirectory User@RemoteHost:RemotePath

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

scp <options> SourceFile1 SourceFile2 User@RemoteHost:RemotePath

Скопируйте файл из удаленной системы в локальную систему:

scp <options> User@RemoteHost:RemoteFilePath DestinationFile

Скопируйте каталог из удаленной системы в локальную:

scp -r User@RemoteHost:RemoteDirectoryPath DestinationDirectory

Скопируйте файл из одной удаленной системы в другую удаленную систему из вашей локальной системы:

scp <options> User@RemoteHost1:RemoteFile1 User@RemoteHost2:RemotePath

Обратите внимание, что при копировании файлов между двумя удаленными системами трафик не будет проходить через локальную систему. Операция происходит непосредственно между двумя удаленными системами. Однако вы можете передать трафик из системы, в которой вы запускаете команду scp, используя опцию -3.

Скопируйте каталог из одной удаленной системы в другую удаленную систему из вашей локальной системы:

scp -r User@RemoteHost1:RemoteDirectory User@RemoteHost2:DestinationPath

Параметры команды SCP

Наиболее часто используемые параметры команды SCP:

  • -C: включить сжатие. Здесь C означает сжатие. При использовании этой опции скорость передачи данных будет выше, поскольку данные сжимаются. SCP автоматически включит сжатие в исходной системе и распаковку в целевой системе.
  • -c : c означает шифр. По умолчанию SCP использует метод шифрования AES-128 для шифрования данных. Вы можете изменить метод шифрования, используя опцию -c.
  • -i : i означает файл удостоверения или закрытый ключ. Как вы уже знаете, в SSH используется аутентификация на основе пароля и ключа. Если вы хотите использовать аутентификацию на основе ключей при передаче файлов, вы можете использовать опцию -i, чтобы указать файл удостоверения или закрытый ключ.
  • -l предел: l означает ограничение пропускной способности. Используя эту опцию, вы можете установить максимальную пропускную способность, используемую для передачи данных. Предел должен быть указан в Кбит/с.
  • -F : иногда вам может потребоваться использовать разные сети для подключения к вашим системам Linux. Или вы можете находиться за прокси-сервером. В таких ситуациях вы можете использовать другой файл ssh_config, используя опцию -F.
  • -P порт – P означает порт. Обратите внимание, что это буква P в верхнем регистре. По умолчанию SSH использует номер порта 22. Возможно, вы изменили номер порта на целевом хосте по соображениям безопасности. В этом случае вам следует явно указать новый номер порта, используя опцию -P.
  • -p : если вы хотите сохранить время изменения, время доступа и режимы из исходного файла, вам необходимо использовать опцию -p при копировании файлов. Обратите внимание, что это строчная буква p.
  • -r : рекурсивно копировать целые каталоги.
  • -B: B означает пакетный режим. Он используется для выбора пакетного режима при передаче файлов. Это предотвращает запрос паролей или парольных фраз.
  • -S программа: имя программы, которая будет использоваться для зашифрованного соединения.
  • -v : v означает многословный. При использовании опции -v команда будет печатать прогресс на экране вашего терминала. Итак, вы увидите, что именно происходит при передаче файлов. Это полезно при отладке проблем с подключением, аутентификацией и конфигурацией.

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

Важные примечания, которые следует запомнить перед началом работы

  • Команда scp использует ssh для безопасной передачи файлов. Таким образом, для аутентификации на удаленных системах у вас должен быть либо ssh-ключ, либо пароль.
  • Чтобы иметь возможность передавать файлы, у вас должно быть разрешение на чтение исходных файлов и разрешение на запись в место назначения.
  • Команда scp не будет проверять местоположение назначения перед записью. Любые файлы с таким же именем в месте назначения будут перезаписаны без уведомления.
  • Чтобы различать локальные и удаленные местоположения, используйте двоеточие (:).
  • При передаче больших файлов рекомендуется запускать задачу внутри сеанса Screen или Tmux.

Перенос файлов с помощью SCP в Linux

Как я уже упоминал, мы можем использовать команду scp для копирования файла или каталога из локальной системы в удаленную систему и наоборот, а также для копирования файлов и папок между одним удаленным компьютером на другой удаленный компьютер.

1. Копирование файлов с помощью SCP из локальной системы в удаленную систему

Чтобы скопировать файл из локальной системы в удаленную систему с помощью команды scp, выполните:

scp File1.txt ostechnix@192.168.1.40:/home/ostechnix/

Пример вывода:

ostechnix@192.168.1.40's password: 
File1.txt                                                    100%  104   814.0KB/s   00:00 

Давайте разберем приведенную выше команду и посмотрим, что делает каждая опция.

  • File1.txt — исходный файл, который необходимо скопировать в место назначения.
  • ostechnix — имя пользователя удаленной системы.
  • 192.168.1.40 — IP-адрес удаленной системы.
  • /home/ostechnix/ — каталог назначения в удаленной системе. Это абсолютный путь, по которому мы хотим передать исходный файл, т. е. File.txt.

Вы также можете скопировать файл и переименовать его. Следующая команда передает File1.txt в место назначения и сохраняет файл с другим именем myfile.txt.

scp File1.txt ostechnix@192.168.1.40:/home/ostechnix/myfile.txt

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

2. Скопируйте несколько файлов с помощью SCP из локальной системы в удаленную систему.

Чтобы перенести несколько файлов из локальной системы в удаленную систему с помощью команды scp, выполните:

scp File1.txt File2.txt ostechnix@192.168.1.40:/home/ostechnix/

Пример вывода:

ostechnix@192.168.1.40's password: 
File1.txt                                                    100%  104   689.4KB/s   00:00    
File2.txt                                                    100%  496     6.3MB/s   00:00   

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

Здесь,

  • File1.txt и File2.txt — имена источников, которые будут скопированы в указанное место назначения.
  • ostechnix@192.168.1.40 — имя пользователя и IP-адрес удаленной системы.
  • /home/ostechnix — путь назначения, куда мы хотим поместить скопированные файлы.

Если файлы имеют одинаковое расширение, вы можете использовать следующие альтернативные команды для достижения той же цели.

scp {File1,File2}.txt ostechnix@192.168.1.40:/home/ostechnix/

Или,

scp *.txt ostechnix@192.168.1.40:/home/ostechnix/

3. Рекурсивное копирование каталогов с помощью SCP из локальной системы в удаленную систему.

Чтобы рекурсивно скопировать весь каталог, включая подкаталоги и его содержимое, из вашей локальной системы в удаленную систему, используйте флаг -r, как показано ниже.

scp -r Documents/ ostechnix@192.168.1.40:/home/ostechnix/

Скопируйте каталог из локальной системы в удаленную систему

Приведенная выше команда скопирует весь каталог 'Documents', включая его содержимое, в целевую систему.

Здесь,

  • -r : рекурсивно копировать файлы и каталоги, включая подкаталоги и их содержимое.
  • Документы: имя исходного каталога, который мы хотим скопировать в место назначения.
  • ostechnix@192.168.1.40 : имя пользователя и IP-адрес удаленной системы.
  • /home/ostechnix: путь назначения, в который мы хотим поместить скопированный каталог.

4. Перенос файлов с помощью SCP из удаленной системы в локальную систему.

Помните, что мы скопировали FIle1.txt в удаленную систему из нашей локальной системы. Давайте скопируем его обратно в локальную систему.

Чтобы скопировать файл из удаленной системы в локальную с помощью scp, запустите:

scp ostechnix@192.168.1.40:/home/ostechnix/File1.txt Downloads/

Здесь,

  • ostechnix@192.168.1.40 : имя пользователя и IP-адрес удаленной системы.
  • /home/ostechnix/File.txt: абсолютный путь к файлу, который мы хотим скопировать в локальную систему.
  • Загрузки – место сохранения скопированного файла.

Перенос файлов из удаленной системы в локальную систему

5. Перенос нескольких файлов с помощью SCP из удаленной системы в локальную систему.

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

scp ostechnix@192.168.1.40:/home/ostechnix/\{File1.txt,File2.txt\} Downloads/

Перенос нескольких файлов из удаленной системы в локальную систему

Приведенная выше команда скопирует файлы File1.txt и File2.txt из каталога /home/ostechnix/ удаленной системы в каталог . >Загрузки каталог локальной системы.

Обратите внимание, что нет пробелов после запятых в фигурных скобках.

6. Рекурсивное копирование каталогов из удаленной системы в локальную систему

Чтобы рекурсивно скопировать весь каталог, включая подкаталоги и его содержимое, с удаленного компьютера в локальную систему с помощью scp, используйте флаг -r. .

scp -r ostechnix@192.168.1.40:/home/ostechnix/Documents Downloads/

Приведенная выше команда скопирует все Документы из удаленной системы в каталог Загрузки в вашей локальной системе.

7. Копируйте файлы с помощью SCP между двумя удаленными компьютерами.

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

scp senthil@192.168.1.40:/home/senthil/File1.txt kumar@192.168.1.20:/home/kumar/

Вам будет предложено ввести пароль обеих удаленных систем.

Здесь,

  • senthil@192.168.1.40 — в данный момент находится имя пользователя и IP-адрес удаленной системы из файла.
  • /home/senthil/File1.txt — имя копируемого файла1 и его местоположение.
  • kumar@192.168.1.20 — имя пользователя и IP-адрес удаленной системы, куда мы хотим скопировать файл.
  • /home/kumar — место сохранения скопированного файла в удаленной системе.

Приведенная выше команда скопирует /home/senthil/File1.txt с удаленного хоста 192.168.1.40 в каталог /home/kumar/ на удаленный хост 192.168.1.20.

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

scp -3 senthil@192.168.1.40:/home/senthil/File1.txt kumar@192.168.1.20:/home/kumar/

8. Включите сжатие при копировании файлов с помощью SCP.

До сих пор мы передавали файлы без их сжатия. Теперь мы включим сжатие при передаче файлов, используя флаг -C.

scp -C File1.txt ostechnix@192.168.1.40:/home/ostechnix/

Флаг -C включит сжатие данных в источнике и автоматически распакует данные на стороне назначения.

Включив сжатие, вы можете значительно увеличить скорость копирования или передачи файлов.

9. Ограничьте пропускную способность при передаче файлов с помощью SCP

Мы можем ограничить пропускную способность при копировании файлов с помощью SCP, используя флаг -l. Обратите внимание, что максимальная пропускная способность указана в Кбит/с. 1 байт=8 бит. Поэтому, если вы хотите ограничить пропускную способность до 200 КБ/с, значение -l будет равно 1600 (200*8).

scp -l 1600 File1.txt ostechnix@192.168.1.40:/home/ostechnix/

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

10. Используйте другой порт при копировании файлов с помощью SCP

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

scp -P 2022 File1.txt ostechnix@192.168.1.40:/home/ostechnix/

11. Используйте другой шифр при копировании файлов с помощью SCP

По умолчанию SCP использует 'AES-128' для шифрования файлов. Если вы хотите использовать другой шифр, используйте флаг -c, за которым следует имя шифра.

Например, если вы хотите использовать шифр '3des-cbc', команда будет выглядеть следующим образом:

scp -c 3des-cbc File1.txt ostechnix@192.168.1.40:/home/ostechnix/

Чтобы просмотреть список поддерживаемых шифров, запустите:

ssh -Q cipher localhost | paste -d, -s -

Пример вывода:

3des-cbc,aes128-cbc,aes192-cbc,aes256-cbc,rijndael-cbc@lysator.liu.se,aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com,chacha20-poly1305@openssh.com

12. Копирование файлов с помощью SCP в подробном режиме

если вы хотите знать, что происходит за кулисами при копировании файлов с помощью scp, вы можете использовать флаг -v. При передаче файлов с помощью SCP в режиме Verbose в терминале будет отображаться пошаговый процесс выполнения команды SCP. Это может пригодиться при устранении неполадок.

scp -v File1.txt ostechnix@192.168.1.40:/home/ostechnix/

Вы увидите множество результатов при отправке файлов в подробном режиме, как показано на следующем выводе.

Копирование файлов с помощью SCP в подробном режиме

13. Передача файлов с помощью SCP в тихом режиме

Мы можем передавать файлы в тихом режиме с помощью флага -q. При совместном использовании файлов в тихом режиме в выходных данных не отображаются ход копирования, предупреждения или диагностические сообщения.

scp -q File1.txt ostechnix@192.168.1.40:/home/ostechnix/

14. Сохраняйте атрибуты файлов при передаче файлов с помощью SCP

Чтобы сохранить атрибуты файла, такие как время изменения файла, время доступа и режимы при копировании файлов с помощью SCP, используйте флаг -p. Обратите внимание, что это строчная буква.

scp -p File1.txt ostechnix@192.168.1.40:/home/ostechnix/

15. Используйте идентификационный файл при копировании файлов с помощью SCP

SSH поддерживает аутентификацию как на основе пароля, так и на основе ключей. Аутентификация на основе ключей — наиболее широко используемый метод аутентификации в средах Linux.

Если вы хотите использовать аутентификацию на основе ключей при передаче файлов, используйте параметр -i, чтобы указать файл удостоверения или закрытый ключ.

scp -i my_private_key.pem File1.txt ostechnix@192.168.1.40:/home/ostechnix/

16. Используйте другой файл ssh_config при передаче файлов с помощью SCP

Бывают ситуации, когда вам необходимо использовать разные сети для подключения к вашим системам Linux. Или вы можете находиться за прокси-сервером. В таких ситуациях вы можете использовать другой файл ssh_config, используя опцию -F.

scp -F /home/ostechnix/my_ssh_config File1.txt ostechnix@192.168.1.40:/home/ostechnix/

17. Скопируйте файлы с помощью SCP, используя IPv4 или IPv6.

Мы можем заставить SCP использовать только адреса IPv4 или IPv6 при копировании файлов. Этого можно добиться, добавив -4 для сетей IPv4 и -6 для сетей IPv6.

scp -6 File1.txt ostechnix@192.168.1.40:/home/ostechnix/

Часто задаваемые вопросы

Вопрос 1: Что такое SCP?

Ответ: SCP — это программа командной строки, предназначенная для безопасной передачи файлов и каталогов из локальной системы в удаленную систему и наоборот или напрямую между двумя удаленными системами.

Вопрос 2. Как скопировать файл с локального компьютера на удаленный компьютер с помощью SCP?

Чтобы скопировать файл из вашей локальной системы в удаленную систему, команда будет такой:

scp SourceFile.txt User@RemoteHost:/some/remote/directory

Вопрос 3: Как рекурсивно копировать файлы и каталоги?

Чтобы рекурсивно скопировать каталог, включая подкаталоги, используйте флаг -r.

scp -r /some/local/directory User@RemoteHost:/some/remote/directory

Вопрос 4. Могу ли я передать несколько файлов с помощью SCP?

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

Скопируйте несколько файлов с локального на удаленный:

scp file1.txt file2.txt file3.txt User@RemoteHost:/some/remote/directory
scp {file1,file2,file3}.txt User@RemoteHost:/some/remote/directory
scp *.txt User@RemoteHost:/some/remote/directory

Скопируйте несколько файлов с удаленного на локальный:

scp User@RemoteHost:/some/remote/directory/\{file1.txt,file2.txt,file3.txt\} /some/local/directory

Скопируйте несколько файлов с удаленного устройства на удаленное:

scp User@RemoteHost1:/some/remote/directory/\{file1.txt,file2.txt,file3.txt\} User@RemoteHost2:/some/remote/directory/

Вопрос 5: Как перенести все файлы в каталоге?

Чтобы перенести все файлы в каталоге, переключитесь на этот каталог:

cd dir_name
scp *.txt User@RemoteHost:/some/remote/directory

Вопрос 6: Могу ли я сжимать файлы?

Да, ты можешь. Используйте -C для сжатия файлов. Файлы сжимаются в источнике и автоматически распаковываются в месте назначения.

scp -C /some/large/file User@RemoteHost:/some/remote/directory

Вопрос 7. Могу ли я сохранить атрибуты файла?

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

scp -p file.txt User@RemoteHost:/some/remote/directory

Вопрос 8: Могу ли я использовать другой порт?

Да. SCP позволяет использовать другой порт с флагом -P.

scp -P 2022 file.txt User@RemoteHost:/some/remote/directory

Вопрос 9: Могу ли я использовать другой шифр?

Да, ты можешь. Используйте флаг -c, чтобы использовать другой шифр.

scp -c 3des-cbc User@RemoteHost:/some/remote/directory

Вопрос 10. Как составить список поддерживаемых SSH шифров?

Чтобы просмотреть список поддерживаемых шифров SSH и SCP, используйте следующую команду

ssh -Q cipher localhost | paste -d, -s -

Вопрос 11: Действительно ли SCP безопасен?

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

Вопрос 12. Могу ли я перенести файлы из системы Windows в систему Linux?

Да, ты можешь. Используйте любую программу PSCP для переноса файлов с платформы Windows на платформу Linux. Вы также можете использовать WinSCP.

Заключение

В этом подробном руководстве мы узнали, что такое SCP и как безопасно передавать файлы с помощью SCP в Linux. Мы предоставили 17 примеров команд SCP. Мы также рассмотрели часто задаваемые вопросы об SCP.

Независимо от того, являетесь ли вы администратором Linux, разработчиком или обычным пользователем, в какой-то момент вам придется копировать файлы в удаленную систему и обратно. Знание того, как использовать SCP для безопасного копирования файлов, определенно будет полезным.

Связанное чтение:

  • Как настроить SFTP-сервер с помощью SFTPGo в Linux
  • Перенос файлов и папок между компьютерами с помощью Croc
  • Обмен файлами между настольными компьютерами Linux с помощью Warpinator
  • Обмен файлами между несколькими устройствами с помощью Snapdrop через веб-браузер
  • Как безопасно обмениваться файлами через Интернет с помощью Firefox Send
  • Как безопасно обмениваться файлами из командной строки с помощью ffsend в Linux
  • PSiTransfer — простое решение для самостоятельного размещения файлов с открытым исходным кодом
  • Как настроить базовый файловый сервер с помощью simpleHTTPserver
  • Простой и быстрый способ поделиться файлами через Интернет из командной строки
  • OnionShare – безопасно и анонимно делитесь файлами любого размера

Статьи по данной тематике