Разработчик(и) | Проект OpenSSH |
---|---|
Репозиторий | github.com/openssh/openssh-portable/ |
Написано в | С |
Операционная система | Кроссплатформенный |
Тип | Команда , Протокол связи |
Веб-сайт | www.openssh.com |
Протокол безопасного копирования ( SCP ) — это средство безопасной передачи файлов компьютера между локальным хостом и удаленным хостом или между двумя удаленными хостами. Он основан на протоколе Secure Shell (SSH). [1] «SCP» обычно относится как к протоколу безопасного копирования, так и к самой программе. [2]
По словам разработчиков OpenSSH в апреле 2019 года, SCP устарел, негибок и не поддается исправлению; они рекомендуют использовать более современные протоколы, такие как SFTP и rsync, для передачи файлов. [3] Поэтому , начиная с версии OpenSSH 9.0, scp
клиент по умолчанию использует SFTP для передачи файлов вместо устаревшего протокола SCP/RCP. [4]
SCP — это сетевой протокол , основанный на протоколе BSD RCP , [5] , который поддерживает передачу файлов между хостами в сети. SCP использует Secure Shell (SSH) для передачи данных и использует те же механизмы для аутентификации, тем самым гарантируя подлинность и конфиденциальность передаваемых данных . Клиент может отправлять (загружать) файлы на сервер, опционально включая их основные атрибуты (разрешения, временные метки). Клиенты также могут запрашивать файлы или каталоги с сервера (загружать). SCP по умолчанию работает через порт TCP 22. [6] Как и RCP, не существует RFC , определяющего специфику протокола.
Обычно клиент инициирует SSH-подключение к удаленному хосту и запрашивает запуск SCP-процесса на удаленном сервере. Удаленный SCP-процесс может работать в одном из двух режимов:
Для большинства клиентов SCP режим источника обычно запускается с помощью -f
флага (from), а режим приемника — с помощью -t
(to). [2] Эти флаги используются внутри и не документируются за пределами исходного кода SCP.
В прошлом, при безопасном копировании с удаленного на удаленный, клиент SCP открывает SSH-соединение с исходным хостом и запрашивает, чтобы он, в свою очередь, открыл SCP-соединение с местом назначения. (Режим «с удаленного на удаленный» не поддерживал открытие двух SCP-соединений и использование исходного клиента в качестве посредника). SCP нельзя использовать для удаленного копирования из источника в место назначения при работе в режиме аутентификации с паролем или интерактивной клавиатурой, так как это раскрыло бы источнику учетные данные аутентификации сервера назначения. Однако это возможно с помощью методов на основе ключей или GSSAPI , которые не требуют ввода данных пользователем. [2]
В последнее время режим «удаленный-удаленный» поддерживает маршрутизацию трафика через клиента, который инициировал передачу, даже если он является третьей стороной передачи. Таким образом, учетные данные авторизации должны находиться только у исходного клиента, третьей стороны. [7]
SCP не ожидает текст, сообщающийся с оболочкой входа SSH. Текст, переданный из-за профиля SSH (например, echo "Welcome"
в .bashrc
файле), интерпретируется как сообщение об ошибке, а пустая строка ( echo ""
) приводит к тому, что клиент SCP блокируется в ожидании завершения сообщения об ошибке. [2]
Программа SCP [8] — это программный инструмент, реализующий протокол SCP как служебный демон или клиент. Это программа для выполнения безопасного копирования.
Возможно, наиболее широко используемой программой SCP является программа командной строки scp
OpenSSH , которая предоставляется в большинстве реализаций SSH. scp
Программа является безопасным аналогом команды rcp
. scp
Программа должна быть частью всех серверов SSH, которые хотят предоставлять службу SCP, так как она scp
также функционирует как сервер SCP. Начиная с OpenSSH 9.0, программа была обновлена для использования более нового, более безопасного протокола SFTP ; -O
добавлена опция для использования SCP со старыми серверами только SCP. [4]
Обычно синтаксис scp
программы [9] похож на синтаксис cp
(копировать) :
Копирование локального файла на удаленный хост:
scp LocalSourceFile пользователь @ remotehost : каталог / TargetFile
Копирование файла с удаленного хоста и рекурсивное копирование папки (с -r
переключателем) с удаленного хоста:
scp пользователь @ remotehost : каталог / ИсходныйФайл ЛокальныйЦелевойФайл scp -r пользователь @ host : каталог / ИсходнаяПапка ЛокальнаяЦелеваяПапка
Обратите внимание, что если удаленный хост использует порт, отличный от порта по умолчанию 22, его можно указать в команде. Например, копирование файла с хоста:
scp -P 2222 пользователь @ хост : каталог / ИсходныйФайл ЦелевойФайл
Поскольку протокол Secure Copy Protocol реализует только передачу файлов, клиенты GUI SCP редки, так как для его реализации требуется дополнительная функциональность ( как минимум, листинг каталогов ). Например, WinSCP по умолчанию использует протокол SFTP. [10] Даже при работе в режиме SCP такие клиенты, как WinSCP, обычно не являются чистыми клиентами SCP, так как они должны использовать другие средства для реализации дополнительной функциональности (например, ls
команду ). [11] Это, в свою очередь, приводит к проблемам зависимости от платформы.
Более совершенными инструментами для управления файлами по SSH являются SFTP- клиенты.
В 2019 году была объявлена уязвимость CVE - 2019-6111 [12] , связанная с инструментом и протоколом SCP openssh , позволяющая пользователям перезаписывать произвольные файлы в целевом каталоге клиента SCP.