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

В чем отличие SSH от SCP?

SSH (Secure Shell) – защищенный сетевой протокол для безопасного управления сетевыми сервисами. Используется для выполнения команд на удаленной стороне.

SCP (Secure Copy Protocol) – протокол для безопасной передачи файлов между удаленной и локальной системой. Этот протокол основан на SSH протоколе.

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

Как работает scp

Эта команда представляет собой специальную утилиту, способную работать только по протоколу SSH (Secure Shell). Главное требование для передачи информации с одного ПК на другой – запустить специальный север SSH. Пользователь должен иметь логин и пароль от сервера, так как без этой информации его запуск будет невозможен.

Команда дает возможность перемещать документы различного объема. Делать это можно не только между локальной и удаленной системой, но и между 2 удаленными серверами. Для осуществления мероприятия потребуется знать логины и пароли.

Синтаксис

scp [опции][что нужно копировать][куда копировать]

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

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

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

Аргументы «что нужно скопировать» и «куда нужно скопировать» имеют свой специфический синтаксис:

(имя пользователя)-(IP)-(путь к требуемому файлу или директории)

В данном случае «имя пользователя» — это логин, который используется при запуске специального сервера SSH. IP-адрес персонального компьютера или хоста. Именно на них или с них будут копироваться файлы и директории.

Для осуществления поставленной задачи можно воспользоваться специальными опциями, которые поддерживает утилита. Основные из них:

  • «-1» — запуск специального протокола SSH-1.
  • «-2» — запуск специального протокола SSH-2.
  • «-В» — включение пакетного режима, который дает возможность переместить одновременно несколько файлов и директорий.
  • «-С» — запуск опции сжатия.
  • «-I» — есть возможность установки ограничения скорости передачи (измеряется в кбит/сек).
  • «-О» — с помощью такой команды задается требуемая опция на сервере SSH.
  • «-Р» — это позволит сохранить время, когда прошла модификация.
  • «-R» — имеется возможность рекурсивного копирования нескольких директорий.
  • «-V» — запуск наиболее подробного режима эксплуатации утилиты SCP Linux.

Примеры

Стоит изучить главные направления, которые весьма актуальны при использовании команды scp.

Создание копий локальных файлов

К примеру, с помощью протокола SSH нужно скопировать  «file.dat» на ПК с IP-адресом 195.161.114.71 (в директорию «/home/user»). Для этого в командной строке потребуется ввести:

scp file.dat root@195.161.114.71: /home/user

Чтобы не вводить IP-адрес сервера, можно указать доменное имя.

scp file.dat root@vseprolinux.ru: /home/user

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

В данном случае требуется ввести информацию с точностью до наоборот

scp root@vseprolinux.ru: /home/user/file.dat

Создание копии папки

К примеру, требуется перенести директорию «/var/log/exim4» с локального к удаленному компьютеру «/home/user/copia».

В данном случае потребуется использование опции «-R». Необходимо ввести в командной строке

scp –R /var/log/exim4 root@vseprolinux.ru: /home/user/copia

SCP Команда: На Что Обратить Внимание

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

Для аутентификации и настройки соединения вам нужно будет создать пару ключей ssh с помощью следующей команды:

ssh-keygen -t rsa

Вы копируете этот ключ в удалённую систему, используя:

ssh-copy-id user@remote_machine

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

Если вы не помните пароль(и) root для какой-либо из систем, вы можете попросить клиента ssh выбрать файл, из которого закрытый идентификационный ключ для подтверждения RSA будет считываться автоматически.

Для протокола версии 2 дефолтный путь идентификации ключа хоста — ~/.ssh/id_dsa, а для версии протокола 1 — ~/.ssh/id_rsa. Затем нужно выяснить, где хранятся резервные копии закрытых и открытых ключей, чтобы вы могли применить команду ssh для их автоматического использования. 

Для пути /back-up/home/jack/.ssh команда выглядит следующим образом:

ssh -i /back-up/home/user/.ssh/id_dsa user@yourserver.servername.domain

Совет: значением по умолчанию этого параметра является –overwrite [yes], поэтому, если вы не укажете опцию –overwrite no или –overwrite ask в своей команде scp, операция перезапишет файлы с одинаковыми названиями и местоположениями без каких-либо предупреждений.

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

Прежде чем начать

Команда scp  использует ssh для передачи данных, поэтому она требует ключ SSH или пароль для аутентификации на удаленном систем.

Двоеточие(:) в scp различие между локальным и удаленным хостами.

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

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

При передаче больших файлов рекомендуется запустить команду scp внутри экрана или tmux сессии в Linux.

Копирование файлов и каталогов между двумя системами с помощью 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/andreyex.txt

Если SSH на удаленным хосту прослушивает порт по умолчанию 22, то вы можете указать порт, используя аргумент -P :

ssh -P 2322 file.txt remote_username@10.10.0.2:/remote/directory

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

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

scp -r /local/directory 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.zip с того же удалённого хоста на наш локальный компьютер:

scp root@191.162.0.2:/writing/articles/SCP.zip Users/Olha/Desktop

Опять же, это должно вызвать тот же вывод входа в систему через SSH, где вы должны ввести пароль, если аутентификация не была отключена привилегиями sudo или вы не заставили 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

Удалённый Файл в Другое Удалённое Местоположение

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

Пример:

scp root@191.162.0.2:/writing/article/scp.zip olha@11.10.0.1:/publishing

Приведённая выше команда копирует исходный файл /writing/article/scp.zip с одного хоста на другой. Чтобы скопировать папки, просто добавьте параметр -r и укажите путь к папке, а не файл внутри неё, как мы делали раньше.

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

scp -3 root@191.162.0.2:/writing/article/scp.zip olha@11.10.0.1:/publishing

Вот и всё!

Заключение

Мы рассмотрели наиболее распространенные примеры работы с командой scp. Более подробную информацию можно получить в соответствующих man-страницах.

[spoiler title=»Источники»]

  • https://losst.ru/kopirovanie-fajlov-scp
  • https://ybez.ru/post/kak-rabotat-s-scp-v-windows/
  • https://www.vseprolinux.ru/scp-linux
  • https://www.hostinger.ru/rukovodstva/scp-komanda-linux-dlia-kopirovanija-failov/
  • https://andreyex.ru/linux/komandy-linux-i-komandy-shell/ispolzovanie-komandy-scp-dlya-bezopasnoj-peredachi-fajlov-v-linux/
  • https://ITProffi.ru/peredacha-fajlov-v-linux-s-pomoshhyu-scp/
[/spoiler]