scp копирует файлы между хостами поверх SSH: та же аутентификация, то же шифрование, никакого отдельного демона. По man-странице scp в актуальном OpenSSH утилита передаёт данные по протоколу SFTP, а не по старому протоколу scp/rcp. Ниже синтаксис, рабочие примеры и что поменялось в последних версиях OpenSSH, вплоть до 10.6 от 6 октября 2026 года.
Синтаксис и основные ключи
scp [ключи] источник ... назначение
Как у cp: слева что копируем, справа куда. Удалённый путь пишется как user@host:/path, можно и в виде URI scp://user@host:port/path. Если в имени локального файла есть двоеточие, пишите его через ./ или абсолютный путь, иначе scp примет его за адрес хоста.
- -r копирует каталоги рекурсивно, символические ссылки при этом раскрываются.
- -P задаёт порт SSH. Буква большая, потому что маленькая -p уже занята.
- -p сохраняет время изменения, время доступа и права файла.
- -i указывает приватный ключ.
- -J идёт через jump host, это то же самое, что ProxyJump в ssh_config.
- -C включает сжатие, полезно на медленном канале и текстовых данных.
- -l ограничивает скорость, значение в Кбит/с.
- -q убирает индикатор прогресса, -v включает отладку.
- -O включает старый протокол scp вместо SFTP.
Примеры на каждый день
Залить файл на сервер, в том числе с новым именем:
scp file.txt user@192.168.1.10:/home/user/ scp file.txt user@192.168.1.10:/home/user/file_new_name.txt
Каталог целиком и нестандартный порт:
scp -r folder/ user@192.168.1.10:/home/user/ scp -P 2222 file.txt user@192.168.1.10:/home/user/
Если на нестандартном порту приходит Connection refused, дело почти всегда не в scp: sshd слушает другой порт или его режет файрвол или группа безопасности у облака.
Скачать с сервера в текущий каталог:
scp user@192.168.1.10:/home/user/file.txt ./ scp -r user@192.168.1.10:/home/user/folder/ ./
С отдельным ключом, через бастион и с ограничением скорости, чтобы не забить канал на проде:
scp -i ~/.ssh/id_deploy file.txt user@host:/var/www/ scp -J admin@bastion.example.com backup.tar.gz user@10.0.0.5:/srv/ scp -l 50000 big.iso user@host:/tmp/ # примерно 50 Мбит/с
Копирование между двумя удалёнными серверами
scp user1@192.168.1.10:/path/file.txt user2@192.168.1.20:/path/dest/
С OpenSSH 8.7 (август 2021) такая копия по умолчанию идёт через вашу машину, раньше это включалось ключом -3. Так не нужно хранить ключи доступа ко второму серверу на первом, и серверам не обязательно видеть друг друга. Минус в том, что весь объём проходит через ваш канал, на гигабайтах это заметно.
Прямую копию с первого сервера на второй делает ключ -R: scp запускается на исходном сервере, и тот должен сам входить на второй без пароля. В OpenSSH 10.6 ключ -R объявлен устаревшим: пока он работает, но пишет предупреждение, а в одной из следующих версий будет игнорироваться, и копия пойдёт через ваш хост. Если у вас в скриптах есть scp -R, лучше переделать их сейчас.
SFTP вместо старого протокола и ключ -O
В OpenSSH 9.0 (апрель 2022) scp перешёл со старого протокола scp/rcp на SFTP по умолчанию. Старый протокол раскрывал маски в именах файлов через оболочку удалённой стороны, отсюда двойное экранирование и целый класс уязвимостей. В Ubuntu 24.04 и Debian 12 уже OpenSSH 9.x, так что там scp работает по SFTP. Версию проверить просто: ssh -V.
Для обычной работы разницы почти нет. Старый протокол через -O нужен, если на сервере нет SFTP (например, отключена подсистема sftp в sshd_config), если скрипт полагается на старое поведение масок или на пути с ~ на очень старом SFTP-сервере. В режиме -O маски раскрывает удалённая оболочка, поэтому кавычки и спецсимволы надо экранировать аккуратно.
Безопасность и типичные грабли
- scp молча перезаписывает существующий файл на цели. Перед массовым копированием проверьте пути.
- В скриптах и CI используйте ключи, а не пароли. Права на приватный ключ 600.
- Не путайте -P и -p: первый задаёт порт, второй сохраняет время и права.
- Файл может приехать, а сервис его не прочитает из-за владельца, прав или контекста SELinux и AppArmor.
- Если копия зависла или не проходит вход, запустите с -v: в выводе видно, на каком шаге ssh застрял.
Для регулярных выкладок и синхронизации каталогов удобнее rsync -avz -e ssh: он докачивает, умеет исключения и передаёт только изменения. scp хорош для разовых задач: закинуть конфиг, забрать лог или бэкап.
В итоге scp остаётся самым быстрым способом скопировать файл по SSH, только теперь это SFTP под капотом, копия между двумя серверами по умолчанию идёт через вашу машину, а ключ -R доживает последние версии. Для старых серверов без SFTP есть -O, для регулярной синхронизации лучше rsync.