SCP (Secure Copy Protocol) — инструмент командной строки и протокол для передачи файлов между локальным и удалённым хостом через SSH. Шифрует и данные, и аутентификацию, используя тот же механизм, что и SSH. Работает на порту 22 — дополнительных открытых портов не требует, что упрощает прохождение через файрвол.
Как работает
Клиент устанавливает SSH-соединение с удалённым сервером и запускает на нём SCP-процесс. Процесс работает в одном из двух режимов:
- Source mode — читает файлы и отправляет клиенту (флаг
-f). Используется при скачивании файла с сервера. - Sink mode — принимает файлы от клиента и записывает на диск (флаг
-t). Используется при загрузке файла на сервер.
Синтаксис утилиты scp:
# Скопировать файл с локального на сервер
scp /local/file.txt user@server:/remote/path/
# Скопировать файл с сервера на локальный
scp user@server:/remote/file.txt /local/path/
# Рекурсивное копирование директории
scp -r /local/dir/ user@server:/remote/path/
# Указать нестандартный порт SSH
scp -P 2222 file.txt user@server:/path/
# Копирование через промежуточный jump-сервер (OpenSSH 7.3+)
scp -J user@jump-server file.txt user@target:/path/
SCP передаёт метаданные файлов: права доступа, временные метки — при использовании флага -p. Без него принимающая сторона устанавливает дефолтные права.
История
SCP основан на BSD RCP (Remote Copy Protocol), опубликованном Университетом Калифорнии Беркли в 1982 году в составе BSD r-commands. RCP передавал данные без шифрования. Tatu Ylönen в 1995 году создал SSH и адаптировал RCP с шифрованием — так появился SCP. В 2019 году исследователь Гарри Синтонен опубликовал уязвимости в реализации SCP: сервер мог перезаписать нежелательные файлы на клиенте. В ответ команда OpenSSH в версии 9.0 (2022) переключила утилиту scp на использование SFTP-протокола внутри, сохранив привычный интерфейс командной строки. Флаг -O восстанавливает старое поведение для совместимости.
SCP vs SFTP vs RSYNC
| Утилита | Протокол | Синхронизация | Инкремент |
|---|---|---|---|
| scp | SSH/SFTP | Нет | Нет |
| sftp | SFTP (интерактивный) | Нет | Нет |
| rsync | rsync over SSH | Да | Да (delta) |
На что обращать внимание
scp не проверяет, существует ли целевая директория — если путь указан неверно, файл копируется под новым именем. При передаче большого числа мелких файлов scp медленнее, чем rsync: последний передаёт только изменения (delta-алгоритм). Для регулярной синхронизации директорий между серверами используйте rsync over SSH. scp не поддерживает докачку после обрыва — передача начинается заново. Аутентификация через SSH-ключ безопаснее пароля при автоматизации. WinSCP и Cyberduck предоставляют графический интерфейс для тех же операций.
SCP vs rsync vs SFTP
SCP (Secure Copy Protocol) использует SSH для шифрованной передачи файлов. SFTP — более функциональный протокол поверх SSH (resume, управление файлами). rsync — оптимальный для синхронизации: передаёт только изменённые части файлов. SCP быстрее rsync для первоначальной копии, rsync быстрее при обновлениях. Инструменты GUI: WinSCP (Windows), Cyberduck (Mac/Windows). Аутентификация: SSH-ключ вместо пароля — безопаснее и удобнее. Примечание: в OpenSSH 9+ SCP по умолчанию переключается на SFTP-протокол для совместимости. Для деплоя кода: rsync over SSH предпочтительнее SCP.