Как использовать команду SCP в Linux

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

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

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

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

В этом руководстве мы увидим различные примеры scpкоманды. Мы также рассмотрим некоторые из часто используемых параметров scpкоманды.

Начало работы с командой scp

С помощью scpкоманды вы можете передавать файлы / каталоги:

  • С вашего локального компьютера на удаленный.
  • Между двумя удаленными машинами.
  • С удаленной машины на локальную.

Общий синтаксис:

scp [Option] [source_file_name] [[email protected]_Host]:destination_folder

Давайте разберемся с основными атрибутами этой команды один за другим.

  • [source_file_name] Это исходный файл, который вы хотите скопировать.
  • [ [email protected] _Host] Это имя пользователя удаленной системы, в которую вы хотите скопировать файл. IP-адрес удаленного компьютера также используется в этом атрибуте после @символа «».
  • [ папка назначения] Это каталог, в котором вы хотите сохранить скопированный файл.

Примечание. В :синтаксисе используется символ двоеточия ( ), поскольку он различает локальное и удаленное расположение. Мы используем двоеточие ( :) с удаленной системой, чтобы указать каталог, в который должны быть скопированы файлы. Если мы не укажем целевой каталог, файлы будут скопированы в домашний каталог пользователя удаленной системы.

Параметры, используемые с scp

Некоторые из наиболее популярных опций, используемых с scpкомандой, перечислены ниже.

Вариант Описание
-C разрешить сжатие файла для передачи
-v дать подробный вывод
-r рекурсивно копировать файлы и каталоги
-p сохранять разрешения, режимы и время доступа к файлам
-P изменить порт по умолчанию, используемый scpкомандой

Часто используемые параметры с командой scp

Мы увидим примеры этих опций далее в руководстве.

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

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

Общий синтаксис:

scp [file_name] [email protected]:[destination_folder]

Пример:

scp apache-tomcat-9.0.8.tar.gz [email protected]:gaurav

В этом примере мы копируем файл apache-tomcat-9.0.8.tar.gz из локальной системы в удаленную систему с IP-адресом 143.110.178.221.

В удаленной системе файл теперь будет скопирован в каталог с именем gaurav.

Выход:

[email protected]:~$ scp apache-tomcat-9.0.8.tar.gz [email protected]:gaurav
[email protected]'s password: 
apache-tomcat-9.0.8.tar.gz                           100% 9589KB  79.8KB/s   02:00    
[email protected]:~$ 

Давайте проверим вывод файла в удаленной системе.

[email protected]:~/gaurav# ls
apache-tomcat-9.0.8.tar.gz
[email protected]:~/gaurav#

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

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

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

Общий синтаксис:

scp [file 1] [file 2] [file n] [email protected]_host:[specific directory]

Давайте разберемся в этом простом процессе на примере.

Пример:

scp ath.html abc.txt ppa-purge_0.2.8+bzr56_all.deb [email protected]:gaurav

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

Выход:

[email protected]:~$ scp ath.html abc.txt ppa-purge_0.2.8+bzr56_all.deb [email protected]:gaurav 
[email protected]'s password: 
ath.html                                      100%  199KB  94.7KB/s   00:02    
abc.txt                                       100%    0     0.0KB/s   00:00    
ppa-purge_0.2.8+bzr56_all.deb                 100% 4360    42.2KB/s   00:00    
[email protected]:~$

В удаленной системе:

[email protected]:~/gaurav# ls -l
total 9800
-rw-r--r-- 1 root root       0 Oct  5 08:58 abc.txt
-rw-r--r-- 1 root root 9818695 Oct  5 08:35 apache-tomcat-9.0.8.tar.gz
-rw-r--r-- 1 root root  204057 Oct  5 08:58 ath.html
-rw-r--r-- 1 root root    4360 Oct  5 08:58 ppa-purge_0.2.8+bzr56_all.deb
[email protected]:~/gaurav#

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

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

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

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

Общий синтаксис:

scp -r [directory path] [email protected]_host:[target_directory]

Пример:

scp -r PycharmProjects [email protected]:gaurav

Выход:

[email protected]:~$ scp -r PycharmProjects [email protected]:gaurav
[email protected]'s password: 
__main__.py                                   100%  623     7.8KB/s   00:00    
__init__.py                                   100%   23     0.4KB/s   00:00    
completion.py                                 100% 2929    28.1KB/s   00:00    
search.py                                     100% 4728    38.7KB/s   00:00    
uninstall.py                                  100% 2963    32.5KB/s   00:00    
hash.py                                       100% 1681    21.3KB/s   00:00    
check.py                                      100% 1430    16.8KB/s   00:00    
configuration.py                              100% 7125    50.4KB/s   00:00    
show.py                                       100% 6289    49.8KB/s   00:00    
download.py                                   100% 6623    48.2KB/s   00:00  
[email protected]:~$  

Использование -rопции с scpкомандой копирует все подпапки и файлы в каталоге с локального компьютера в удаленную систему.

Отображение подробной информации о процессе scp

Вы можете использовать опцию -v(нижний регистр v) для отображения информации о файлах, которые копируются на удаленную или локальную систему. Этот тип вывода также называется подробным выводом.

При использовании этой опции на экране отображается полная отладочная информация о файле.

Общий синтаксис:

scp -v [file_name] [email protected]_host:

Пример:

scp -v apache-tomcat-9.0.8.tar.gz [email protected]:team

Выход:

[email protected]:~$ scp -v apache-tomcat-9.0.8.tar.gz [email protected]:team
Executing: program /usr/bin/ssh host 159.89.170.11, user root, command scp -v -t team
OpenSSH_7.6p1 Ubuntu-4ubuntu0.3, OpenSSL 1.0.2n  7 Dec 2017
debug1: Reading configuration data /home/gaurav/.ssh/config
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 19: Applying options for *
debug1: Connecting to 159.89.170.11 [159.89.170.11] port 22.
debug1: Connection established.
debug1: key_load_public: No such file or directory
debug1: identity file /home/gaurav/.ssh/id_rsa type -1
apache-tomcat-9.0.8.tar.gz                                                                                          100% 9589KB  99.8KB/s   01:36    
debug1: client_input_channel_req: channel 0 rtype exit-status reply 0
debug1: channel 0: free: client-session, nchannels 1
debug1: fd 0 clearing O_NONBLOCK
debug1: fd 1 clearing O_NONBLOCK
Transferred: sent 9826736, received 4016 bytes, in 97.2 seconds
Bytes per second: sent 101133.9, received 41.3
debug1: Exit status 0
[email protected]:~$

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

Передача файлов между двумя удаленными хостами

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

Общий синтаксис:

scp [email protected]_1:/[file_name] [email protected]_2:[folder_to_save]

The syntax may seem a bit wider but is pretty simple. Here, the the first part of the command gives the input about the remote user from where the file is to be copied. colon (:) and / is used to specify the file name or the directory name which is to be transferred between the two remote machines.

The second part gives information about the target remote system where the file is to be copied.

Example:

scp -r [email protected]:gaurav [email protected]:/team

Here, we will be copying a directory named ‘gaurav’ recursively from the local system to a remote system. The file will be copied to a folder ‘team’ on the remote system.

Output:

[email protected]:~$ scp -r [email protected]:/gaurav [email protected]:/team 
[email protected]'s password: 
1.py                                          100%  134   261.3KB/s   00:00    
variables.py                                  100%  377   949.2KB/s   00:00    
abc.txt                                       100%    0     0.0KB/s   00:00    
ath.html                                      100%  199KB  41.8MB/s   00:00    
[email protected]:~$

Here, we used the scp command on the local system to transfer a directory named ‘gaurav’ from one remote server to another.

Transfer files from the remote system to your local system

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

Общий синтаксис:

scp [email protected]_host:/files/file.txt /[folder_of_local_system]

Выход:

[email protected]:~$ scp [email protected]:how.txt .
[email protected]'s password: 
how.txt                                                                                                             100%   11     0.1KB/s   00:00    
[email protected]:~$

Здесь я загрузил (скопировал) файл с удаленного сервера в свой домашний каталог. Следовательно, я использовал точку ( .), чтобы указать в команде копирование файла в мой домашний каталог.

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

[email protected]:~$ ls -l how.txt
-rw-r--r-- 1 gaurav gaurav 11 Oct  6 09:49 how.txt
[email protected]:~$ 

Здесь файл скопирован в мой домашний каталог с удаленного сервера.

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

Сжатие файлов для более быстрой передачи

Иногда передача больших файлов может занять много времени. Эту проблему можно решить, используя scpкоманду с параметром -C(в верхнем регистре C).

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

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

Общий синтаксис:

scp -C [file_name] [email protected]_host:[target_folder]

Давайте посмотрим на сравнительный пример, чтобы понять разницу.

Передача без опции -C:

[email protected]:~$ scp -rv dlink [email protected]:team
Executing: program /usr/bin/ssh host 68.183.82.183, user root, command scp -v -r -t team
OpenSSH_7.6p1 Ubuntu-4ubuntu0.3, OpenSSL 1.0.2n  7 Dec 2017
debug1: Reading configuration data /home/trinity/.ssh/config
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 19: Applying options for *
debug1: Connecting to 68.183.82.183 [68.183.82.183] port 22.
debug1: Connection established.

debug1: client_input_channel_req: channel 0 rtype exit-status reply 0
debug1: channel 0: free: client-session, nchannels 1
debug1: fd 0 clearing O_NONBLOCK
debug1: fd 1 clearing O_NONBLOCK
Transferred: sent 7516504, received 4008 bytes, in 74.6 seconds
Bytes per second: sent 100693.7, received 53.7
debug1: Exit status 0
[email protected]:~$ 

Из вышеприведенного вывода мы видим, что время, необходимое для передачи, составляет 74,6 секунды. Мы попробуем передать тот же файл, используя параметр -C, и заметим разницу.

Передача с опцией -C:

[email protected]:~$ scp -Crv dlink [email protected]:team
Executing: program /usr/bin/ssh host 68.183.82.183, user root, command scp -v -r -t team
OpenSSH_7.6p1 Ubuntu-4ubuntu0.3, OpenSSL 1.0.2n  7 Dec 2017
debug1: Reading configuration data /home/trinity/.ssh/config
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 19: Applying options for *
debug1: Connecting to 68.183.82.183 [68.183.82.183] port 22.
debug1: Connection established.
.
.
webupload.img                                                                                                       100% 1834KB  98.7KB/s   00:18    
Sending file modes: C0664 1877552 router.img
Sink: C0664 1877552 router.img
router.img                                                                                                          100% 1834KB 100.3KB/s   00:18    
Sink: E
Sending file modes: C0664 3754103 DSL-2750U-Release-IN-T-01.00.07.zip
Sink: C0664 3754103 DSL-2750U-Release-IN-T-01.00.07.zip
DSL-2750U-Release-IN-T-01.00.07.zip                                                                                 100% 3666KB 218.5KB/s   00:16    
Sink: E
debug1: client_input_channel_req: channel 0 rtype exit-status reply 0
debug1: channel 0: free: client-session, nchannels 1
debug1: fd 0 clearing O_NONBLOCK
debug1: fd 1 clearing O_NONBLOCK
Transferred: sent 7518864, received 3828 bytes, in 51.0 seconds
Bytes per second: sent 100245.4, received 51.0
debug1: Exit status 0
debug1: compress outgoing: raw data 7511925, compressed 7513136, factor 1.00
debug1: compress incoming: raw data 1467, compressed 999, factor 0.68
[email protected]:~$

Здесь мы можем легко заметить, что использование -Cпараметра с scpкомандой позволило нам сжать файл по сети, что позволило сэкономить время.

Использование другого порта ssh для передачи файлов

При использовании scpкоманды по умолчанию развертывается порт port 22. Пользователь может выбрать порт по своему усмотрению. Вы можете использовать -P(параметр P в верхнем регистре) с scpкомандой, чтобы использовать порт по вашему выбору.

Общий синтаксис:

cp -P [new_port_number] [file_name/directory_name] [email protected]:[destination_folder]

Пример:

scp -P 4248 dlink [email protected]:team

Используя указанную выше команду, файл будет передан на удаленный сервер. Но на этот раз port 4248вместо порта по умолчанию будет использоваться порт port 22.

Заключение

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


Как включить SSH в Ubuntu 20.04

Как включить SSH в Ubuntu 20.04

Безопасный доступ к вашей машине Ubuntu из любого места

Как настроить сервер и клиент WireGuard VPN в Ubuntu 20.04

Как настроить сервер и клиент WireGuard VPN в Ubuntu 20.04

Настройте собственный VPN с помощью Wireguard

Как установить Git на Ubuntu 20.04 LTS

Как установить Git на Ubuntu 20.04 LTS

Одна из первых вещей, которые вы должны установить на свой Linux-компьютер

Как использовать команду SCP в Linux

Как использовать команду SCP в Linux

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

Как создать пользователя Sudo в Ubuntu 20.04 LTS

Как создать пользователя Sudo в Ubuntu 20.04 LTS

Предоставьте root-права любому пользователю с sudo в Ubuntu 20.04 LTS

Как добавить ключи SSH в Ubuntu 20.04

Как добавить ключи SSH в Ubuntu 20.04

В этой статье объясняется процесс добавления аутентификации ключей SSH на сервер Ubuntu 20.04 и отключения аутентификации на основе пароля.

Как запустить тесты скорости из командной строки Linux с помощью Speedtest-cli

Как запустить тесты скорости из командной строки Linux с помощью Speedtest-cli

Speedtest.net - это сервис для проверки скорости вашего интернет-соединения. Он использует ближайший сервер speedtest.net для загрузки

Лучший бесплатный видеоредактор для Ubuntu в 2020 году

Лучший бесплатный видеоредактор для Ubuntu в 2020 году

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

7 лучших приложений для динамических обоев Ubuntu

7 лучших приложений для динамических обоев Ubuntu

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

Как установить TensorFlow на CentOS

Как установить TensorFlow на CentOS

Установите TensorFlow с помощью Python (pip) или контейнера Docker