Оглавление

В современном мире системного администрирования и DevOps передача файлов между серверами — задача, с которой сталкиваются ежедневно. Несмотря на наличие множества утилит для выполнения этой задачи, далеко не все они обеспечивают необходимую безопасность. Одним из популярных решений для быстрой и защищенной передачи файлов является протокол Secure Copy Protocol (SCP). В этой статье мы рассмотрим, как работает SCP и как использовать команду scp в Linux с примерами и практическими сценариями.


Введение в SCP

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

SCP основан на протоколе SSH, который обеспечивает шифрование данных и аутентификацию пользователей, что предотвращает атаки типа «человек посередине».

Основные режимы работы SCP:

  • Режим источника (Source Mode): Доступ к исходному файлу и его передача клиенту.
  • Режим приёмника (Sink Mode): Получение файла от клиента и сохранение в указанной директории.

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


Синтаксис и основные опции SCP

Команда scp имеет простой и понятный синтаксис:

scp [опции] источник_файла пункт_назначения

Основные опции SCP:

  • -C: Сжатие данных при передаче.
  • -i: Использование указанного приватного ключа для аутентификации.
  • -P: Указание порта для SSH-соединения.
  • -p: Сохранение времени модификации и доступа файла.
  • -q: Тихий режим (без вывода сообщений).
  • -r: Рекурсивная передача директорий.
  • -v: Отображение отладочных сообщений.

Пример базового синтаксиса:

scp файл.txt user@remote_host:/путь/до/директории

Эта команда копирует файл файл.txt на удаленный сервер в указанную директорию.


Примеры использования команды SCP

Копирование файла с локальной системы на удаленный сервер

Передача файла с локального компьютера на удаленный сервер выполняется с помощью следующей команды:

scp файл.txt user@192.168.1.10:/home/user/

Описание:

  • файл.txt — файл, который копируется.
  • user@192.168.1.10 — учетная запись пользователя и IP-адрес удаленного сервера.
  • /home/user/ — путь к директории назначения на удаленном сервере.

Пример вывода:

файл.txt                                     100%    0     0.0KB/s   00:00

Переименование файла при копировании

Чтобы переименовать файл на удаленной системе:

scp файл.txt user@192.168.1.10:/home/user/файл_новое_имя.txt

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

Рекурсивное копирование директорий

Для передачи целой директории используйте опцию -r:

scp -r папка/ user@192.168.1.10:/home/user/

Описание:

  • Копирует директорию папка и её содержимое на удаленный сервер.

Пример вывода:

файл1.txt                                     100%    0     0.0KB/s   00:00
файл2.txt                                     100%    0     0.0KB/s   00:00

Использование альтернативного порта

По умолчанию SCP использует порт 22 для SSH-соединения. Чтобы использовать другой порт, укажите его с помощью опции -P:

scp -P 2222 файл.txt user@192.168.1.10:/home/user/

Примечание: Убедитесь, что сервер принимает соединения на указанном порту.


Передача файлов с удаленной системы на локальную

Для копирования файла с удаленного сервера на локальный компьютер:

scp user@192.168.1.10:/home/user/файл.txt /путь/на/локальной/системе/

Описание:

  • user@192.168.1.10:/home/user/файл.txt — путь к файлу на удаленной системе.
  • /путь/на/локальной/системе/ — директория на локальной системе, куда будет сохранен файл.

Пример:

scp user@192.168.1.10:/home/user/файл.txt ./

Эта команда скопирует файл.txt в текущую директорию.

Рекурсивное копирование директории с удаленного сервера

scp -r user@192.168.1.10:/home/user/папка/ ./

Копирует папку и её содержимое с удаленного сервера на локальную систему.


Передача файлов между двумя удаленными серверами

Одной из полезных функций SCP является возможность копирования файлов между двумя удаленными системами:

scp user1@192.168.1.10:/путь/к/файлу.txt user2@192.168.1.20:/путь/к/назначению/

Пример с перенаправлением через локальную систему:

scp -3 user1@192.168.1.10:/путь/к/файлу.txt user2@192.168.1.20:/путь/к/назначению/

Опция -3 заставляет передавать трафик через локальную систему для дополнительной безопасности.


Советы по безопасности при использовании SCP

  • Будьте осторожны с перезаписью файлов. SCP не запрашивает подтверждения перед перезаписью существующих файлов.
  • Используйте SSH-ключи для повышения безопасности.
  • Следите за обновлениями SCP. Убедитесь, что вы используете последнюю версию утилиты.

Заключение

Команда SCP — это надежный и быстрый способ передачи файлов в Linux, обеспечивающий базовую безопасность благодаря использованию SSH. Она идеально подходит для одноразовых задач, где важна скорость. Для более сложных сценариев с управлением файлами можно использовать SFTP или rsync.