Команда 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/