---
title: 'SCP профессиональное руководство | Zomro'
description: ''
image: 'https://zomro.com/static/site/images/logo/logo-white.png?v=1790950739'
---

![opened image]()

  * [Zomro](https://zomro.com/rus/)
  * [FAQ](https://zomro.com/rus/blog/faq/)
  * SCP профессиональное руководство 



# SCP профессиональное руководство

18-10-2025

Полное практическое руководство по `scp`: от базового синтаксиса и типовых сценариев до нюансов OpenSSH 9.x (SFTP по умолчанию), производительности, безопасности и сравнений с `sftp`/`rsync`.

## Зачем нужен `scp`

`scp` — классическая команда для защищённой передачи файлов поверх SSH. В версиях OpenSSH 9.x транспорт по умолчанию реализуется через **SFTP** , что делает поведение `scp` более предсказуемым и безопасным (исторический SCP‑протокол считался проблемным). Итог для практики:

  * если нужна **быстрая одноразовая передача** «как есть» — `scp` остаётся удобным;

  * для **массовых инкрементальных синхронизаций/перезапусков** лучше подходит `rsync`;

  * для **интерактивной работы с деревом** и тонкой настройки прав — `sftp` или графические клиенты.




> Важно: для обратной совместимости предусмотрен флаг `-O` — включить «старый» SCP‑протокол. Используйте осознанно (см. § 8.3).

## Синтаксис и топ‑опции

**Общий шаблон:**
    
    
    scp [ОПЦИИ] [[ПОЛЬЗОВАТЕЛЬ@]ХОСТ:]/путь/источник [[ПОЛЬЗОВАТЕЛЬ@]ХОСТ:]/путь/назначение
    

**Топ‑опции для ежедневной практики:**

Опция | Что делает | Когда применять  
---|---|---  
`-P <порт>` | Подключиться к SSH на другом порту | Хост слушает, например, 2202/2224  
`-i <key>` | Явно указать ключ | Несколько ключей, кастомные пути  
`-r` | Рекурсивно копировать каталоги | Деплой статики, бэкапы  
`-p` | Сохранить время/права | Логи, конфиги, артефакты сборки  
`-C` | Сжатие | Медленные каналы, текст/JSON  
`-l <kbps>` | Ограничить скорость (Кбит/с) | Не «забивать» канал  
`-v` / `-q` | Подробный / тихий режим | Отладка / скрипты  
`-3` | «Реле» между двумя удалёнными через локал | Межсерверная миграция  
`-O` | Принудительно старый SCP‑протокол | Слетают паттерны/совместимость  
`-o <SSH‑опция>` | Любая SSH‑настройка | `-o ProxyJump=…`, `-o Ciphers=…` и т. д.  
  
> Примечание: `-P` — **порт** , `-p` — **права/время**. Не путать.

## Базовые сценарии

### Локал → удалённый (IPv6 + нестандартный порт)
    
    
    scp -P 2224 -i ~/.ssh/id_ed25519 ./builds/report.csv \
      devops@[2001:db8::10]:/srv/reports/
    

### 

### Удалённый → локал (сохранить метаданные)
    
    
    scp -p qa@[2001:db8::20]:/var/log/app/app.log ./logs/app-qa.log
    

### 

### Рекурсивная загрузка каталога
    
    
    scp -r ./dist/ web@203.0.113.12:/var/www/html/
    

### 

### Файлы с пробелами/спецсимволами
    
    
    scp "./exports/Report № 7.pdf" \
        ops@198.51.100.25:"/srv/docs/Report № 7.pdf"
    

> Совет: для удалённого пути используйте кавычки на **той** стороне: `user@host:"/путь с пробелами"`.

## Полезные режимы и трюки

### Сжатие и лимит канала
    
    
    # Сжатие + лимит до 1.2 Мбит/с
    scp -C -l 1200 media.tar.gz cdn@198.51.100.7:/data/cdn/incoming/
    

### 

### Подробный вывод и выбор шифра (для диагностики)
    
    
    scp -v -P 2202 -c aes256-ctr ./config.yml admin@203.0.113.44:/etc/myapp/
    

### 

### SSH‑алиасы в `~/.ssh/config`
    
    
    Host staging
      HostName 203.0.113.44
      User admin
      Port 2202
      IdentityFile ~/.ssh/id_ed25519
    

**Теперь короче:**
    
    
    scp ./config.yml staging:/etc/myapp/
    

### 

### ProxyJump (bastion)
    
    
    scp -o ProxyJump=bastion \
        ./secrets.env app.internal:/etc/myapp/
    

## 

## 

## Межсерверные копии (две удалённые)

### Через локальную машину (ключ `-3`)
    
    
    scp -3 [email protected]:/var/lib/app/db.sqlite \
           [email protected]:/srv/app/
    

Локальная машина устанавливает **две** SSH‑сессии и прокачивает поток через себя.

### 

### Прямой копипайп через SSH
    
    
    ssh [email protected] "cat /var/lib/app/db.sqlite" \
      | ssh [email protected] "cat > /srv/app/db.sqlite"
    

> Плюсы: точный контроль, можно добавить `pv`/хеш‑проверки. Минусы: ручнее, чем `scp`/`rsync`.

## Производительность и надёжность

  * **Сжатие`-C`** полезно на медленных линках и для текстов (JSON/CSV/логи), но может замедлить на быстрых каналах/больших бинарниках.

  * **Лимит`-l`** задаётся в **Кбит/с** (например, `-l 1200` ≈ 1.2 Мбит/с), помогает не забивать канал.

  * **Мультиплексирование SSH** :
        
        
        Host *
          ControlMaster auto
          ControlPath ~/.ssh/cm-%r@%h:%p
          ControlPersist 60s
        

> Повторные `scp` будут открываться быстрее в пределах таймаута.

  * **Резюмирование/доскачка:** у `scp` нативного «resume» нет. Для крупных копий лучше `rsync -e ssh`.




## Безопасность

  * **Ключи:** используйте Ed25519 (`ssh-keygen -t ed25519`), храните приватные ключи с правами `600`, защитите passphrase.

  * **Проверка хоста:** первый коннект добавляет запись в `~/.ssh/known_hosts`. Для автоматизации допустимо `-o StrictHostKeyChecking=accept-new`, но с пониманием рисков.

  * **Права и владельцы:** `-p` сохраняет метаданные; если важен владелец/группа на удалённой стороне — после копии выполните `chown` (или используйте `rsync --chown`).

  * **Изоляция:** для «складских» хостов выделяйте пользователя без shell‑прав (например, ограниченный `sftp‑chroot`), даже если передача идёт `scp`.




## Особенности OpenSSH 9.x (важно)

### **SFTP по умолчанию**

> Современный `scp` перенаправляет операции на SFTP‑подсистему. Отсюда изменения в обработке паттернов и кавычек.

### **Когда нужен**`-O`

> Если унаследованные скрипты полагаются на «старые» тонкости SCP‑протокола (например, удалённую интерпретацию wildcard оболочкой), для совместимости добавьте `-O`. Рекомендуется рассмотреть миграцию на эквивалент через SFTP/`rsync`.

### 

### **Паттерны и кавычки**

> В «старом» SCP расширение выполняла **удалённая оболочка** , что приводило к сюрпризам и рискам. В SFTP‑режиме поведение предсказуемее, но некоторые старые паттерны не работают. Явно экранируйте спецсимволы и используйте кавычки на **удалённой** стороне пути: `user@host:"/path with spaces"`.

## Сравнение: `scp` vs `sftp` vs `rsync`

Критерий | scp | sftp | rsync  
---|---|---|---  
Простой одноразовый перенос | **Да** | Да | Да  
Рекурсивные каталоги | **Да (`-r`)** | Да | Да  
Возобновление/инкрементальность | Нет | Частично (через команды клиента) | **Да (хэш/дифф)**  
Ограничение полосы | **Да (`-l`)** | Да (через клиент) | **Да (`--bwlimit`)**  
Сжатие «на лету» | **Да (`-C`)** | Нет (обычно) | **Да (`-z`)**  
Массовые зеркалирования | Можно, но не лучшее | Можно, но ручнее | **Лучший выбор**  
Интерактивный режим | Нет | **Да** | Нет  
  
> **Вывод:** держите под рукой все три. `scp` — коротко и быстро; `sftp` — интерактив и права; `rsync` — надёжные синхронизации.

## 

## Частые ошибки и их диагностика

  * `Permission denied (publickey)`: проверьте ключ, права `~/.ssh` и `~/.ssh/authorized_keys` (700/600/600), пользователя/порт.

  * `No such file or directory`: проверьте **путь на удалённой стороне** , кавычки и права на каталог назначения.

  * Зависания/таймауты: проверьте `-P <порт>`, `ufw`/`iptables`/`security group`, прокси/бастион (`-o ProxyJump`).

  * Медленно: уберите `-C` для больших бинарников, проверьте MTU, попробуйте другой шифр (`-c chacha20-poly1305@openssh.com` или `aes128-ctr`).




## Мини‑шпаргалка (копипаст‑готово)
    
    
    # Локал → удалённый (IPv6, порт 2224)
    scp -P 2224 ./file.txt devops@[2001:db8::10]:/srv/
    
    # Удалённый → локал с сохранением метаданных
    scp -p qa@[2001:db8::20]:/var/log/app.log ./logs/
    
    # Рекурсивно каталог
    scp -r ./dist/ web@203.0.113.12:/var/www/html/
    
    # Сжатие + лимит канала 1.2 Мбит/с
    scp -C -l 1200 media.tar.gz cdn@198.51.100.7:/data/cdn/incoming/
    
    # Межсерверная передача через локал (-3)
    scp -3 [email protected]:/var/lib/app/db.sqlite \
           [email protected]:/srv/app/
    
    # Явный ключ и алиас из ~/.ssh/config
    scp -i ~/.ssh/id_ed25519 ./config.yml staging:/etc/myapp/
    

## 

## 

## Чек‑лист: перед и после передачи

### **Перед запуском**

  * Доступ по SSH по ключу работает (`ssh user@host`).

  * Верный **порт** (`-P`) и **алиас/HostName** в `~/.ssh/config`.

  * Права на ключи: `~/.ssh` — 700, приватный ключ — 600.

  * Достаточно прав на **каталог назначения** (владение/`chmod`).

  * Путь с пробелами/Юникодом **заключён в кавычки** и на удалённой стороне: `user@host:"/path with spaces"`.

  * Для больших текстовых данных включено **сжатие** `-C` (при медленном канале).

  * При необходимости ограничена полоса `-l <kbps>`.

  * Понимание версии OpenSSH: если полагаетесь на старое расширение паттернов — учтите режим `-O`.




### **Во время копирования**

  * Для диагностики включён `-v` (при проблемах с подключением/скоростью).

  * Через bastion используется `-o ProxyJump=` или алиас с ProxyJump.

  * При межсерверной передаче выбран корректный режим: `scp -3` или `ssh | ssh` пайп.




### **После копирования**

  * Проверена **целостность** (при необходимости): `sha256sum`/`md5sum` исходника и копии.

  * Сохранены **временные метки/права** (`-p`) или вручную приведены `chown/chmod`.

  * Для больших миграций рассмотрен переход на `rsync -e ssh` (resume, диффы).

  * Логи/вывод операции сохранены (для отчётности CI/CD).э




## Заключение

`scp` по‑прежнему полезен: минимальный барьер входа, SSH‑безопасность, удобство в скриптах. Знайте его сильные стороны и ограничения: при больших зеркалированиях берите `rsync`, для интерактивных сессий — `sftp`. Помните про особенности OpenSSH 9.x и работайте с путями/паттернами аккуратно. Это избавит от «магии» и сделает ваши копии предсказуемыми и воспроизводимыми.

Похожие статьи

[VestaCP: Как создать сайт-заглушку](https://zomro.com/rus/blog/articles/195-vestacp-kak-sozdat-sajt-zaglushku) [Перенос домена к другому пользователю на одном сервере с VestaCP](https://zomro.com/rus/blog/faq/386-domain-transfer-to-another-user-on-the-same-server-with-vestacphestiacp) [Команда ps в действии: 30 примеров для продвинутого мониторинга Linux (Часть 1)](https://zomro.com/rus/blog/faq/519-the-ps-command-in-action-30-examples-for-advanced-linux-monitoring) [Как ограничить доступ к сайту по IP через .htaccess](https://zomro.com/rus/blog/faq/614-how-to-restrict-access-to-the-site-by-ip-via-htaccess) [Как установить PHP 8.* - 5.* на Ubuntu 24.04](https://zomro.com/rus/blog/faq/659-how-to-install-php-85-on-ubuntu-2404)

[ Premium Cloud VPS от €7.95/мес ](/rus/vps)
