← Назад к вопросам

Каким образом можно скопировать файл с сервера на сервер?

1.0 Junior🔥 241 комментариев
#Linux и администрирование

Комментарии (1)

🐱
deepseek-v3.2PrepBro AI6 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Способы копирования файлов между серверами

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

1. Secure Copy (SCP)

Наиболее распространённый и простой способ, использующий SSH для безопасной передачи.

Базовый синтаксис:

scp [опции] исходный_файл пользователь@целевой_сервер:целевой_путь

Пример копирования с локального на удалённый сервер:

scp /local/path/file.txt user@remote-server:/remote/path/

Пример копирования между двумя удалёнными серверами:

scp user1@server1:/path/to/file user2@server2:/destination/path/

Ключевые опции:

  • -r — рекурсивное копирование директорий
  • -P — указание порта (если не стандартный 22)
  • -i — использование конкретного SSH-ключа
  • -C — включение сжатия для ускорения передачи

2. rsync — продвинутая синхронизация

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

Базовое использование:

rsync -avz исходный_путь пользователь@целевой_сервер:целевой_путь

Пример с прогрессом и проверкой:

rsync -avz --progress --checksum /data/backups/ user@backup-server:/mnt/backups/

Ключевые преимущества rsync:

  • Передача только изменённых частей файлов
  • Поддержка символических ссылок, прав доступа и временных меток
  • Возможность удаления файлов на приёмнике, которых нет в источнике (--delete)
  • Ограничение скорости передачи (--bwlimit)
  • Исключение файлов по шаблонам (--exclude)

3. SFTP (SSH File Transfer Protocol)

Интерактивный протокол, полезный для разовых операций или когда нужен интерактивный доступ.

Подключение и передача:

sftp user@remote-server
sftp> put локальный_файл удалённый_путь
sftp> get удалённый_файл локальный_путь

4. Использование SSH-туннеля с tar

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

Пример архивирования и передачи "на лету":

tar czf - /source/directory | ssh user@remote-server "tar xzf - -C /destination/"

5. NFS/Samba — сетевые файловые системы

Для постоянного доступа к файлам между серверами лучше настроить сетевую файловую систему.

Временное монтирование NFS для копирования:

# На сервере-источнике
mount -t nfs source-server:/shared/path /mnt/temp
cp /mnt/temp/file /local/destination
umount /mnt/temp

6. Использование объектных хранилищ как промежуточного звена

В облачных средах часто эффективнее использовать промежуточное хранение.

Пример с AWS S3:

# Загрузка на S3
aws s3 cp file.txt s3://my-bucket/

# Скачивание с другого сервера
aws s3 cp s3://my-bucket/file.txt ./

7. Специализированные инструменты для больших объёмов

  • bbcp — высокопроизводительное копирование больших файлов
  • aspera — проприетарное решение для очень высоких скоростей
  • syncthing — децентрализованная синхронизация

Практические рекомендации по выбору метода

Для разового копирования небольших файлов: Используйте SCP — он прост и есть везде.

Для регулярных бэкапов или синхронизации: rsync с ключами -avz и --delete — оптимальный выбор. Я настройку cron-задач с rsync считаю best practice для синхронизации конфигураций между серверами.

Для передачи очень больших файлов: Комбинация tar | ssh или специализированные инструменты вроде bbcp.

В облачных средах: Часто выгоднее использовать встроенные механизмы (S3 transfer acceleration, GCP Storage Transfer Service).

Для автоматизации в CI/CD: Я предпочитаю использовать rsync в скриптах развёртывания, так как он обеспечивает идемпотентность — повторный запуск не создаёт дубликатов.

Пример скрипта для CI/CD:

#!/bin/bash
# Деploy script using rsync
RSYNC_OPTS="-avz --delete --exclude='*.tmp' --exclude='.git'"
rsync $RSYNC_OPTS ./build/ user@production-server:/var/www/app/

Безопасность и производительность

При настройке автоматического копирования между серверами важно:

  1. Использовать SSH-ключи вместо паролей
  2. Настроить ограничения в ~/.ssh/authorized_keys с помощью command= при необходимости
  3. Для публичных серверов использовать VPN или WireGuard туннели
  4. Мониторить использование сети и настраивать QoS/трафик shaping при работе в продакшене
  5. Всегда проверять целостность передаваемых файлов (через checksum в rsync или отдельную проверку)

Выбор конкретного метода зависит от объёма данных, частоты копирования, требований к безопасности, сетевых условий и необходимости сохранения метаданных файлов. В моей практике 80% задач покрываются комбинацией SCP для ad-hoc операций и rsync для автоматизированных процессов.

Каким образом можно скопировать файл с сервера на сервер? | PrepBro