Блог компании 3v-Hosting
Команда Linux scp и примеры ее использования
6 мин.
Безопасная передача файлов между системами - одна из основных задач системного администрирования и разработки. Команда scp (безопасное копирование), доступная в большинстве Unix-подобных систем, включая Linux-серверы, является наиболее эффективным способом копирования файлов и каталогов между локальными и удаленными системами по SSH. В отличие от традиционного cp для локального копирования, scp предназначена для безопасной передачи данных с использованием SSH-шифрования, что делает ее особенно актуальной для удаленных операций и автоматизированных скриптов в хостинговых средах.
Основы синтаксиса scp
Основной синтаксис команды scp имеет последовательную структуру, которую легко понять на нескольких примерах:
scp [options] source destination
Источником и местом назначения могут быть локальные файлы, каталоги или удаленные адреса, заданные в формате user@host:/path. Такая гибкость позволяет scp копировать в трех общих направлениях:
- С локального на удаленный
- С удаленного на локальный
- С одной удаленной системы на другую (через локальную машину).
Например, чтобы загрузить локальный файл report.pdf на удаленный сервер:
scp report.pdf [email protected]:/home/user/docs/
Чтобы получить файл с удаленного сервера:
scp [email protected]:/home/user/docs/report.pdf .
Обе операции требуют SSH-доступа к удаленной системе. Если пользователь аутентифицирован с помощью SSH-ключей, команда будет выполнена без запроса пароля. В противном случае пароль будет запрашиваться для каждого соединения.
Передача каталогов с помощью scp
По умолчанию scp предназначен для копирования отдельных файлов. Однако он может рекурсивно копировать целые каталоги с помощью флага -r (recursive). Это очень важно при перемещении больших файловых структур или резервном копировании папок между средами.
scp -r project_folder/ user@server:/var/www/
Эта команда отправляет всю директорию project_folder по указанному пути на удаленный сервер. Все файлы и подкаталоги сохраняются, а права доступа поддерживаются, если они явно не отменены с помощью дополнительных флагов.
Общие параметры для улучшения передачи файлов
Команда scp содержит ряд флагов, которые могут оптимизировать или контролировать поведение процесса передачи файлов:
-P <порт> Указывает порт, если удаленный SSH-сервер работает на нестандартном порту.
-C Включает сжатие для ускорения передачи больших файлов по медленным соединениям.
-p Сохраняет время модификации, время доступа и режимы исходного файла.
-q Тихий режим. Подавляет индикатор выполнения и сообщения об ошибках.
-l <лимит> Ограничивает используемую полосу пропускания, заданную в Кбит/с.
Например, передача файлов через нестандартный порт со сжатием может выглядеть следующим образом:
scp -P 2222 -C bigfile.tar.gz user@host:/data/
Эта команда передает файл через SSH-порт 2222 и применяет сжатие для оптимизации пропускной способности.
Другие полезные статьи по администрированию в нашем Блоге:
- Руководство по команде cat в Linux
- Как установить Nginx на Ubuntu 22.04
- Установка и использование Virtualenv в Python3
- Как установить Node.js на Ubuntu 22.04
Соображения безопасности и лучшие практики
SCP в целом безопасен благодаря использованию SSH, но администраторы должны убедиться, что удаленный SSH-сервер правильно настроен для предотвращения несанкционированного доступа. Строгая аутентификация по ключу SSH предпочтительнее, чем вход по паролю, особенно при автоматизированном развертывании или конвейерах CI/CD. Отключение входа root через SSH также является распространенной практикой для минимизации рисков.
В производственных средах, где важны производительность и масштабируемость, SCP - не самое эффективное решение. Такие инструменты, как rsync или sftp, предлагают дополнительные возможности, например дельта-передачи или интерактивные сессии. Однако для быстрых и безопасных одноразовых операций копирования scp остается безусловным выбором.
Расширенные сценарии использования в хостинге и рабочих процессах DevOps
В управляемых хостинговых средах scp часто используется для таких задач, как передача резервных копий веб-сайтов, загрузка файлов конфигурации на удаленные серверы или получение файлов журналов для диагностики. Инженеры DevOps могут включать scp в сценарии, которые развертывают новые версии приложений на удаленных узлах.
Рассмотрим сценарий, в котором сценарий ночного резервного копирования перебрасывает дампы баз данных с промежуточного сервера на внешний узел хранения:
scp /backups/db-$(date+%F).sql.gz backupuser@storage:/mnt/backups/
Подобные команды можно планировать через cron для автоматизации. В сочетании с доступом по ключу SSH и зашифрованными файлами резервных копий это создает надежную процедуру резервного копирования.
Еще один вариант использования - передача файлов между двумя удаленными хостами с третьей машины:
scp user1@host1:/var/www/index.html user2@host2:/var/www/
Это полезно при переносе служб или данных без загрузки файлов на промежуточную систему. Обратите внимание, что для этого случая требуется доверие к SSH и разрешения на доступ между инициирующей машиной и обеими удаленными системами.
Ограничения и альтернативные инструменты
Несмотря на свою простоту, scp имеет ограничения. Он не поддерживает функцию возобновления прерванной передачи, что может быть проблематично для больших файлов или нестабильных сетевых соединений. В ней также отсутствуют тонкие индикаторы выполнения или логика синхронизации. Для этих целей более надежны такие инструменты, как rsync:
rsync -avz -e ssh myfolder/ user@remote:/home/user/
Тем не менее, scp по-прежнему занимает ценное место в экосистеме Linux благодаря своей универсальной доступности и простоте. Он не требует никаких настроек на целевом хосте, кроме SSH, что делает его отличным выбором для специальных переносов или сред с ограниченным инструментарием.
Заключение
Команда scp является основной утилитой для безопасной передачи файлов в Linux и Unix-подобных системах. Она сочетает в себе привычную команду cp и безопасность SSH, обеспечивая простые, но эффективные удаленные операции с файлами. Системные администраторы, разработчики и хостинг-провайдеры используют scp для одноразовой передачи, задач развертывания и быстрой автоматизации. Хотя он может быть не лучшим решением для масштабной синхронизации, его удобство и универсальное присутствие в современных системах делают его надежным инструментом во многих рабочих процессах.