Блог компании 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 для одноразовой передачи, задач развертывания и быстрой автоматизации. Хотя он может быть не лучшим решением для масштабной синхронизации, его удобство и универсальное присутствие в современных системах делают его надежным инструментом во многих рабочих процессах.