scp — передача файлов по SSH
scp — утилита для копирования файлов по SSH поверх протокола SSH. Работает из терминала, не требует настройки сервера сверху — достаточно работающего sshd и авторизации. В эпоху rsync и bat SCP живёт как простой инструмент для разовых передач, когда не хочется возиться с daemon-ами или конфигурацией.
Синтаксис и базовые сценарии
Общий вид:
Источник и назначение могут быть локальными путями или remote-адресами в формате user@host:path.
Если на удалённом хосте используется нестандартный порт SSH, указывайте его через -P (заглавная P — у scp, в отличие от ssh).
Копирование директорий рекурсивно
Для копирования директории нужен флаг -r. Без него scp откажется передавать каталог и выведет ошибку.
При рекурсивном копировании scp передаёт содержимое директории, а не саму директорию целиком. Поведение зависит от наличия или отсутствия завершающего / в пути — проверяйте результат, если структура важна.
Полезные флаги
| Флаг | Описание |
|---|---|
-r | Рекурсивное копирование директорий |
-P port | Порт SSH на удалённом хосте |
-p | Сохраняет время модификации, доступ и права файла |
-q | Без прогресс-бара, тихий режим |
-C | Сжатие данных при передаче |
-i key.pem | Указание приватного ключа |
-o StrictHostKeyChecking=no | Автоматическое принятие нового хост-ключа |
-l rate | Ограничение полосы пропускания в Kbit/s |
Типичные паттерны передачи
Развёртывание артефактов:
Забрать лог с удалённого сервера:
Массовая передача нескольких файлов:
Передача между двумя серверами напрямую (источник и приёмник оба remote):
Флаг -3 перенаправляет трафик через локальную машину. Без него scp пытается установить соединение напрямую между хостами, что обычно не работает.
Ограничения и альтернативы
scp не поддерживает возобновление прерванных передач — если соединение оборвалось на середине гигабайтного файла, придётся начинать заново. Нет инкрементальной синхронизации, нет проверки контрольных сумм. Передача идёт последовательно, параллельная передача нескольких файлов не встроена.
Для повседневных задач rsync решает эти проблемы:
rsync умеет докачивать разорванные передачи, пропускать уже скопированные файлы и работать инкрементально. Для одноразовой передачи нескольких мелких файлов scp по-прежнему удобен — меньше параметров, быстрее на входе.
В современных дистрибутивах scp может быть обёрнут в OpenSSH-клиент. Поведение совпадает, но если заметили отличия в выводе или обработке ошибок — это нормально, реализация зависит от версии OpenSSH.