Команда scp: использование и параметры, копирование папок и указание порта

Тестовая средаСемейство RHELAlmaLinux 9.8OpenSSH 9.9p1Принимающая сторона Debian 12 · OpenSSH 9.2p1Учётная запись rootПроверено 2026-10-28

scp — это инструмент копирования для обмена файлами с сервером, к которому вы подключаетесь по SSH. При отправке файла командой scp вы, как и в cp, сначала указываете источник, а затем место назначения. Когда мы отправили файлы и папки с сервера AlmaLinux 9 на сервер Debian 12 и забрали их обратно, передача прошла по протоколу SFTP, а файл размером 20MB дошёл менее чем за 1 секунду.

Весь вывод ниже — это точный результат работы scp из OpenSSH 9.9 под учётной записью root на отправляющей стороне. На примерные значения заменены только адреса серверов и имена учётных записей.

1️⃣ Использование scp и удалённые пути

Перед путём на удалённом сервере ставится [учётная запись@адрес сервера:]. Путь без двоеточия считается путём на сервере, где вы запускаете команду, поэтому сторона с двоеточием определяет, отправляете вы или получаете.

🧭 Направление копирования scp и удалённые пути
Поясняющая схема
↔️ Направление копирования
$ scp report.txt user@203.0.113.10:~/scp-test/user@203.0.113.10:~/scp-test/report.txt ./downloads/-3 user@203.0.113.10:~/scp-test/report.txt user@198.51.100.20:~/scp-test/
источник💻 Сервер, на котором запущена командаreport.txt
➜
приёмник🖥️ Удалённый сервер203.0.113.10:~/scp-test/
источник🖥️ Удалённый сервер203.0.113.10:~/scp-test/report.txt
➜
приёмник💻 Сервер, на котором запущена команда./downloads/
источник🖥️ Удалённый сервер A203.0.113.10:~/scp-test/report.txt
➜
Посредник💻 Сервер, на котором запущена команда-3
➜
приёмник🖥️ Удалённый сервер B198.51.100.20:~/scp-test/
🧩 Формат удалённого пути
user учётная запись для подключения, 203.0.113.10 адрес сервера или домен, :~/scp-test/ а после двоеточия — путь на этом сервере (тильда означает домашнюю папку)
Если локальный файл стоит первым, а удалённый путь после него, это отправка. Если путь после двоеточия заканчивается косой чертой, файл сохраняется в этой папке под тем же именем.
Если удалённый путь стоит первым, это получение. Полученный файл оказывается по локальному пути, указанному после него.
Когда и источник, и назначение — удалённые серверы, начиная с OpenSSH 8.7 данные идут через сервер, на котором запущена команда. Это тот же способ, что и с -3.

Отправляет report.txt из текущей папки в папку scp-test в домашнем каталоге удалённого сервера.

scp report.txt user@203.0.113.10:~/scp-test/
report.txt                                    100%   14     5.1KB/s   00:00

По окончании передачи в одной строке выводятся имя файла, ход выполнения, размер, скорость и затраченное время. Этот индикатор появляется только при запуске в терминале. Поэтому если перенаправить вывод в файл, в файле ничего не останется.

При получении сначала укажите удалённый путь, а затем локальный путь для сохранения.

scp user@203.0.113.10:~/scp-test/report.txt ./downloads/
report.txt                                    100%   14     2.7KB/s   00:00

Если путь назначения заканчивается именем файла, а не папкой, файл сохраняется под этим именем. После отправки командой ниже в папке на принимающей стороне report.txt лежал под именем report-1028.txt.

scp report.txt user@203.0.113.10:~/scp-test/report-1028.txt
report.txt                                    100%   14     4.6KB/s   00:00

🔲 Симулятор команды scp

В симуляторе ниже вы можете сами вводить команды отправки, получения и копирования папок и смотреть вывод для каждого параметра.

Симулятор команды scpOpenSSH 9.9
[root@server work]#
Работает только в браузере. В списке слева видны файлы на удалённой стороне, а клавиши ↑↓ возвращают предыдущие команды.

2️⃣ Параметры команды scp

Параметры пишутся сразу после scp, перед источником. -P для порта — заглавная буква, а строчная -p сохраняет время и права, поэтому если перепутать регистр, выполнится другое действие.

-l задаёт верхний предел скорости передачи в Kbit/s. Без параметров файл размером 20MB передался менее чем за 1 секунду.

scp backup.tar.gz user@203.0.113.10:~/scp-test/
backup.tar.gz                                 100%   20MB  53.6MB/s   00:00

-l 8000 соответствует примерно 1,000KB в секунду. При отправке того же файла с -l 8000 индикатор показал скорость 996.5KB/s, а передача заняла 20 секунд.

scp -l 8000 backup.tar.gz user@203.0.113.10:~/scp-test/backup-l.tar.gz
backup.tar.gz                                 100%   20MB 996.5KB/s   00:20

-C сжимает данные в SSH-соединении тем же способом, что и gzip. Мы отправили по три раза файл журнала размером 19MB с повторяющимися предложениями, и между этими двумя серверами вариант с -C оказался немного медленнее.

КомандаФайлВремя выполненияСкорость на индикаторе
scp backup.tar.gz20MB0,68 с53.6MB/s
scp -l 8000 backup.tar.gz20MB20.82 с996.5KB/s
scp access.log (3 раза)19MB0.79~0.89 с—
scp -C access.log (3 раза)19MB0.84~0.97 с—

Время выполнения — это время от запуска команды через подключение до конца передачи. В руководстве ssh тоже сказано, что сжатие помогает на медленных линиях и замедляет передачу в быстрых сетях.

-v выводит ход работы от подключения до передачи строками debug1, поэтому он нужен для поиска причины, когда подключение не удаётся или останавливается на аутентификации. Вывод длинный, поэтому мы отобрали через grep только строки аутентификации и передачи.

scp -v report.txt user@203.0.113.10:~/scp-test/ 2>&1 | grep -E 'Authenticated|Sending|Transferred'
Authenticated to 203.0.113.10 ([203.0.113.10]:22) using "publickey".
debug1: Sending subsystem: sftp
Transferred: sent 2536, received 3248 bytes, in 0.1 seconds

Строка [Sending subsystem: sftp] означает, что scp отправил файл по протоколу SFTP. Начиная с OpenSSH 9.0 scp по умолчанию использует SFTP. С -O передача идёт по старому протоколу SCP, а на том же месте появляется [Sending command: scp -v -t].

scp -O -v report.txt user@203.0.113.10:~/scp-test/ 2>&1 | grep -E 'Authenticated|Sending|Transferred'
Authenticated to 203.0.113.10 ([203.0.113.10]:22) using "publickey".
debug1: Sending command: scp -v -t ~/scp-test/
Sending file modes: C0600 14 report.txt
Transferred: sent 2328, received 3036 bytes, in 0.1 seconds

📌 Основные опции: результаты из этой статьи

ОпцияНазначениеРезультат в этой статье
-PУказывает порт подключения SSHПорт 22: передача report.txt завершена, закрытый порт 2222: завершение с [Connection timed out]
-iУказывает файл закрытого ключа для аутентификации по открытому ключуПередача report.txt завершена с указанием ~/.ssh/id_ed25519
-rКопирует файлы и вложенные папки в папкеНа принимающей стороне папки css и images остаются в исходной структуре; без параметра передача не идёт из-за ошибки [not a regular file]
-pСохраняет время изменения, время доступа и права источникаВремя изменения сохраняется; на принимающей стороне в этой статье права 600 остались только у файла, отправленного с -O -p
-CСжимает данные в SSH-соединенииДля журнала 19MB между двумя серверами этой статьи вариант с параметром был немного медленнее
-lЗадаёт верхний предел скорости передачи в Kbit/sС -l 8000: 20MB при 996.5KB/s, 20.82 секунды
-vВыводит ход работы от подключения до передачи строками debug1Передача по SFTP подтверждена строкой [Sending subsystem: sftp]
-3Передаёт данные между двумя удалёнными серверами через сервер, на котором запущена команда (способ по умолчанию начиная с OpenSSH 8.7)Передача report.txt завершена с двумя папками одного сервера в роли источника и назначения
-OПередаёт по старому протоколу SCPВ выводе -v появляется [Sending command: scp -v -t]; путям с пробелами нужна дополнительная обратная косая черта
-oПередаёт в ssh параметр в формате ssh_configОжидание задано как 10 секунд через ConnectTimeout=10, [Connection timed out] подтверждён

📎 Другие опции: по официальному руководству

ОпцияНазначение
-qОтключает индикатор хода, а также предупреждения и диагностические сообщения ssh
-JСначала подключается к промежуточному хосту, а оттуда настраивает TCP-перенаправление до конечного назначения (краткая форма настройки ProxyJump, несколько переходов разделяются запятыми)
-FУказывает другой файл как пользовательский файл настроек ssh (передаётся напрямую в ssh)
-4Принудительно использует только адреса IPv4
-6Принудительно использует только адреса IPv6

3️⃣ Копирование папок через scp и сохранение времени

Если указать папку без параметров, scp выведет ошибку о том, что это не обычный файл, и не выполнит передачу.

scp site-files user@203.0.113.10:~/scp-test/
scp: local "site-files" is not a regular file
scp: failed to upload file site-files to ~/scp-test/

С -r копируются файлы и вложенные папки в папке.

scp -r site-files user@203.0.113.10:~/scp-test/
logo.png                                      100%   48KB   4.7MB/s   00:00
style.css                                     100%   15     5.0KB/s   00:00
index.html                                    100%   15     5.2KB/s   00:00

В выводе показаны только имена файлов. В выводе find на принимающей стороне папки css и images лежали в site-files в исходной структуре.

ssh user@203.0.113.10 'cd ~/scp-test && find site-files'
site-files
site-files/images
site-files/images/logo.png
site-files/index.html
site-files/css
site-files/css/style.css

-r следует по символическим ссылкам в папке и копирует исходные файлы, поэтому для папок, где ссылки должны остаться ссылками, лучше подходит rsync -a.

-p сохраняет время изменения, время доступа и права источника. Перед отправкой мы задали исходному report.txt время изменения 1 октября 2026 г. 00:00 (UTC) и права 600. Часовой пояс принимающего сервера — UTC, поэтому ls на отправляющей стороне тоже выводился с TZ=UTC.

TZ=UTC ls -l report.txt
-rw------- 1 root root 14 Oct  1 00:00 report.txt
scp -p report.txt user@203.0.113.10:~/scp-test/report-p.txt
report.txt                                    100%   14     4.7KB/s   00:00
scp -O -p report.txt user@203.0.113.10:~/scp-test/report-Op.txt
report.txt                                    100%   14     4.2KB/s   00:00
ssh user@203.0.113.10 'ls -l ~/scp-test/report.txt ~/scp-test/report-p.txt ~/scp-test/report-Op.txt'
-rw------- 1 user user 14 Oct  1 00:00 /home/user/scp-test/report-Op.txt
-rw-rw-r-- 1 user user 14 Oct  1 00:00 /home/user/scp-test/report-p.txt
-rw-rw-r-- 1 user user 14 Oct 28 06:17 /home/user/scp-test/report.txt

report-p.txt, отправленный с -p, и report-Op.txt, отправленный с -O -p, сохранили исходное время, а report.txt без параметров сохранился со временем отправки. На принимающем сервере файлы, отправленные по SFTP, даже с -p получили права 664, и только файл, отправленный по старому протоколу SCP (-O), сохранил 600.

Поэтому для файлов, права которых должны совпадать с источником, после отправки проверяйте права через ls -l на принимающей стороне.

4️⃣ Указание порта и файла ключа в scp

Для серверов, к которым нельзя подключиться через стандартный порт 22 и стандартный ключ, укажите порт и ключ перед отправкой. -P указывает порт подключения SSH, а -i — файл закрытого ключа для аутентификации по открытому ключу.

Ниже пример с прямым указанием порта 22 и файла ключа. Если порт сервера изменён, напишите этот номер вместо 22.

scp -P 22 -i ~/.ssh/id_ed25519 report.txt user@203.0.113.10:~/scp-test/
report.txt                                    100%   14     5.3KB/s   00:00

Без -i, как и ssh, команда по очереди использует ключи со стандартными именами в ~/.ssh (id_rsa, id_ecdsa, id_ed25519 и т. д.).

Если вы часто отправляете файлы на один и тот же сервер, запишите псевдоним в ~/.ssh/config и вводите в scp только его.

Host myserver
    HostName 203.0.113.10
    User user
    Port 22
    IdentityFile ~/.ssh/id_ed25519

Имя в строке Host становится псевдонимом, а четыре строки под ней заменяют адрес сервера, учётную запись, порт и файл ключа. Команда с одним псевдонимом завершилась тем же результатом в одну строку, что и с полным адресом и ключом.

scp report.txt myserver:~/scp-test/
report.txt                                    100%   14     4.2KB/s   00:00

-P, -i и псевдонимы используют настройки подключения ssh без изменений, поэтому создание ключа и его регистрация на сервере проходят так же, как при подключении через команду SSH.

5️⃣ Копирование между серверами через scp

Даже когда и источник, и назначение — удалённые серверы, хватит одной строки scp. Начиная с OpenSSH 8.7 данные передаются через сервер, на котором запущена команда, и этот способ — -3. В официальных примечаниях к выпуску причиной смены способа по умолчанию названо то, что учётные данные сервера назначения не нужно хранить на сервере-источнике.

Замер ниже выполнен с двумя папками одного сервера в роли источника и назначения. Если сервер назначения другой, измените только учётную запись и адрес в конце.

scp -3 user@203.0.113.10:~/scp-test/report.txt user@203.0.113.10:~/scp-test/copy3/
report.txt                                    100%   14     2.5KB/s   00:00

Это похоже на то, как головной офис принимает документы между двумя филиалами и пересылает их дальше.

Прежний способ, при котором сервер-источник отправляет данные напрямую серверу назначения, задаётся через -R. Для него сервер-источник должен подключаться к серверу назначения без пароля. Начиная с OpenSSH 10.6 при использовании -R появляется предупреждение о прекращении поддержки, а в следующих версиях этот параметр планируется игнорировать и копировать способом -3.

6️⃣ Сравнение scp и rsync

Для разовой отправки нескольких файлов достаточно scp, а для регулярной синхронизации одной и той же папки или возобновления прерванной передачи лучше подходит команда rsync. scp при каждом запуске заново отправляет все указанные файлы, а rsync сравнивает источник с назначением и передаёт только изменённые файлы.

Параметрscprsync
Объём передачиВсе указанные файлы при каждом запускеТолько файлы, изменённые относительно источника
Сохранение недополученных файлов (--partial)❌✅
Удаление файлов, которых нет в источнике (--delete)❌✅
Символические ссылкиСледует по ним и копирует файлыС -a остаются ссылками
Нужно на принимающей сторонеДоступ по SSH и сервер SFTPrsync установлен с обеих сторон

7️⃣ Сообщения об ошибках команды scp и их решение

Когда scp завершается ошибкой, причина сразу видна в первой строке вывода. Во всех трёх случаях, когда мы намеренно вызвали ошибки отсутствующим файлом, правами на запись и неверным портом, причина была в первой строке, а код выхода каждый раз отличался от 0.

🔲 No such file or directory

Если попытаться получить файл, которого нет на удалённой стороне, вместе с путём выводится [No such file or directory].

scp user@203.0.113.10:~/scp-test/nofile.txt ./downloads/
scp: ~/scp-test/nofile.txt: No such file or directory

При отправке та же ошибка появляется, если нет папки назначения. scp не создаёт отсутствующие папки, поэтому сначала выполните через ssh mkdir -p и создайте папку.

scp report.txt user@203.0.113.10:~/scp-test/nodir/sub/
scp: dest open "scp-test/nodir/sub/": No such file or directory
scp: failed to upload file report.txt to ~/scp-test/nodir/sub/

🔲 Permission denied

Если у папки на принимающей стороне нет права на запись, после [dest open] следует [Permission denied]. Ниже результат отправки в папку readonly с правами 555.

scp report.txt user@203.0.113.10:~/scp-test/readonly/
scp: dest open "scp-test/readonly/report.txt": Permission denied
scp: failed to upload file report.txt to ~/scp-test/readonly/

Если перед [Permission denied] стоит [учётная запись@адрес сервера:], а в скобках указан способ аутентификации вроде publickey, соединение отклонено на этапе аутентификации. Такой текст программа ssh выводит при неудачной аутентификации, поэтому сначала проверьте файл ключа, указанный через -i, и открытый ключ, зарегистрированный на сервере.

🔲 Connection timed out

Если номер порта неверен или брандмауэр блокирует этот порт и ответа нет, scp ждёт подключения и завершается с [Connection timed out]. Ниже результат отправки на закрытый порт 2222 с ожиданием 10 секунд.

scp -P 2222 -o ConnectTimeout=10 report.txt user@203.0.113.10:~/scp-test/
ssh: connect to host 203.0.113.10 port 2222: Connection timed out
scp: Connection closed

При этой ошибке сначала проверьте, совпадает ли номер в -P с SSH-портом сервера.

🔲 Пробелы и тильда (~) в путях

В нынешнем scp, который передаёт данные по SFTP, удалённый путь с пробелами достаточно один раз заключить в одинарные кавычки.

scp report.txt 'user@203.0.113.10:~/scp-test/my files/'
report.txt                                    100%   14     4.7KB/s   00:00

Когда мы добавили -O к той же команде и отправили по старому протоколу SCP, команда завершилась ошибкой [ambiguous target]. Дело в том, что в старом протоколе SCP удалённая оболочка разбирает путь ещё раз.

scp -O report.txt 'user@203.0.113.10:~/scp-test/my files/'
scp: ambiguous target

В этом случае поставьте обратную косую черту перед пробелом, чтобы и удалённая оболочка прочитала его как одно слово.

scp -O report.txt 'user@203.0.113.10:~/scp-test/my\ files/'
report.txt                                    100%   14     4.5KB/s   00:00

Если путь после двоеточия начинается без косой черты и тильды, он считается относительно домашней папки удалённой учётной записи.

scp report.txt user@203.0.113.10:scp-test/report-rel.txt
report.txt                                    100%   14     5.6KB/s   00:00

В официальном руководстве сказано использовать -O, когда старый сервер SFTP не может преобразовать путь с тильдой в домашнюю папку. В этом случае путь относительно домашней папки без тильды, как выше, тоже сохранит файл в том же месте.

🔢 FAQ & рекомендуемые материалы

Если есть файл с таким же именем, он перезаписывается новым без подтверждения. Когда мы несколько раз отправляли один и тот же report.txt в одну папку, передача тоже каждый раз шла без вопросов. Поэтому файлы, которые нужно сохранить, отправляйте с другим именем в конце пути назначения.

Если поставить * в удалённый путь и заключить его в одинарные кавычки, будут получены все файлы с подходящим именем на удалённом сервере. При получении report-*.txt с удалённого сервера шесть подходящих файлов передались по очереди. Кавычки нужны, чтобы оболочка сервера, на котором запущена команда, не разобрала * первой.

С -B scp работает в пакетном режиме, который не запрашивает пароль или парольную фразу. Согласно официальному руководству, в этом режиме нельзя ввести пароль, поэтому для автоматических задач вроде cron сначала настройте аутентификацию по ключу.

🧭 Рекомендуемые материалы о сетевых командах 13 статей · 2 источника
🗂️ Сетевые команды
📄 Команда ip 📄 Команды netstat · ifconfig 📄 Команда nmtui
📄 Команда SSH 📄 Команда rsync 📄 Команда wget 📄 Команды rz · sz 📄 Команда scp
📄 Команда host 📄 Команда nslookup
📄 Команда iptables 📄 Команда firewall-cmd 📄 Команда certbot
Linux SSH (Secure Shell)
Linux · Подключение
Команда SSH: опции и использование
В Linux SSH (Secure Shell) — это протокол, который позволяет безопасно подключаться к другой системе по сети.
Читать →Текущая статья
Команда rsync: отправка с локального сервера на удалённый.
Linux · Передача
Команда rsync в Linux: опции и примеры использования
Если ради синхронизации папок на двух серверах каждый раз копировать всё заново, объём передачи остаётся равным полному размеру, даже когда изменился всего один файл.
Читать →Текущая статья
Команда TOP в Linux: интерфейс командной строки (CLI-Command-Line Interface)
Linux · Передача
Команда wget в Linux
Команда wget запускает ссылку для скачивания из интернета в командной строке Linux и скачивает файл.
Читать →Текущая статья
Установка утилиты lrzsz в Rocky Linux
Linux · Передача
Linux: установка утилиты lrzsz, загрузка (rz) и скачивание (sz) файлов
Чтобы в Linux запускать команды rz и sz для загрузки и скачивания файлов, на сервере должна быть установлена lrzsz.
Читать →Текущая статья
Поясняющая схема направления копирования и удалённых путей команды scp: копирование между двумя серверами идёт через сервер, на котором запущена команда
Linux · Передача
Команда scp: использование и параметры, копирование папок и указание порта
scp — это инструмент копирования для обмена файлами с сервером, к которому вы подключаетесь по SSH; при отправке файла командой scp вы, как и в cp, сначала указываете источник, а затем место назначения.
Читать →Текущая статья

ℹ️ О партнёрских ссылках
Материалы этого сайта содержат партнёрские ссылки. Если посетитель покупает товар или услугу по такой ссылке, сайт получает комиссию от продавца. При этом сумма, которую платит покупатель (при акционных скидках сумма снижается ↓), не увеличивается. Указанные цены, скидки и наличие актуальны на момент написания и могут отличаться, поэтому перед покупкой уточняйте их у продавца. Товары выбираются и оцениваются по нашим собственным критериям, а комиссия не влияет ни на порядок, ни на содержание обзоров.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Докажите, что вы человек: 9   +   5   =