Сэкономьте 15% на всех хостинговых услугах

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

Используйте код: Skills Начать
Рубрики
Linux Безопасность

Копирование файлов через SSH: полное руководство по SCP, rsync и SFTP

SSH (Secure Shell) — это основа безопасного удаленного управления сервером. Независимо от того, являетесь ли вы разработчиком, развертывающим код, системным администратором, управляющим инфраструктурой, или опытным пользователем, поддерживающим среду VPS Hosting, передача файлов между машинами — это задача, которую вы будете выполнять постоянно.

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

Зачем использовать SSH для передачи файлов?

disruptive

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

  • Сквозное шифрование: Каждый байт данных — включая учетные данные, команды и содержимое файлов — зашифрован при передаче с использованием современных криптографических алгоритмов. Это делает SSH-передачи невосприимчивыми к перехвату пакетов и атакам типа «человек посередине».
  • Не требуется дополнительное программное обеспечение: SSH предустановлен практически на всех системах Linux/Unix и встроен в Windows 10+ и macOS.
  • Универсальность: Одно SSH-соединение может обрабатывать интерактивные сеансы оболочки, передачу файлов, переадресацию портов и автоматизированные скрипты.
  • Удобство автоматизации: SSH легко интегрируется с заданиями cron, конвейерами CI/CD и скриптами резервного копирования, обеспечивая полностью автоматизированную передачу файлов без пароля.
  • Надежность: SSH-соединения корректно обрабатывают сетевые сбои, особенно в сочетании с инструментами, такими как rsync.

Способ 1: Копирование файлов с помощью SCP (Secure Copy Protocol)

disruptive

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

1) Базовый синтаксис SCP

scp [options] [source] [destination]

2) Загрузить файл с локальной машины на удаленный сервер

scp /path/to/local/file username@remote_host:/path/to/remote/destination

Разбор:

/path/to/local/fileфайл, который вы хотите передать на локальной машине
username@remote_hostваше имя пользователя SSH и имя хоста или IP-адрес сервера
/path/to/remote/destinationцелевой каталог или путь файла на удаленном сервере

3) Загрузить файл с удаленного сервера на локальную машину

scp username@remote_host:/path/to/remote/file /path/to/local/destination

Просто поменяйте местами источник и назначение, чтобы загрузить файл с сервера на локальную машину.

4) Копировать весь каталог рекурсивно

scp -r /path/to/local/directory username@remote_host:/path/to/remote/destination

Флаг -r указывает SCP копировать каталог и все его содержимое рекурсивно, включая вложенные подкаталоги.

5) Полезные опции SCP

ОпцияОписание
-P [port]Укажите пользовательский порт SSH (обратите внимание: прописная -P, в отличие от строчной -p в SSH)
-CВключить сжатие для более быстрых передач по медленным соединениям
-i [identity_file]Использовать определенный приватный ключ SSH для аутентификации
-l [limit]Ограничить использование полосы пропускания в Кбит/с
-qТихий режим — подавить вывод прогресса
-vПодробный режим — полезен для отладки проблем с подключением

6) Когда использовать SCP

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

Способ 2: Копирование файлов с помощью rsync

disruptive

rsync — это профессиональный выбор для синхронизации и передачи файлов по SSH. Его главная особенность — дельта-передача: вместо копирования целых файлов rsync анализирует источник и назначение и передает только измененные части. Это экономит огромное количество времени и пропускной способности при работе с большими файлами или часто обновляемыми директориями.

1) Базовый синтаксис rsync

rsync [options] [source] [destination]

2) Загрузить файл с локальной машины на удаленный сервер

rsync -avz /path/to/local/file username@remote_host:/path/to/remote/destination

3) Синхронизировать всю директорию на удаленный сервер

rsync -avz /path/to/local/directory/ username@remote_host:/path/to/remote/destination/

Важно: Обратите внимание на косую черту / в конце исходной директории. С косой чертой rsync копирует содержимое директории. Без нее rsync копирует саму директорию как поддиректорию назначения.

4) Зеркалировать директорию (удалить файлы, удаленные из источника)

rsync -avz --delete /path/to/local/directory/ username@remote_host:/path/to/remote/destination/

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

5) Использовать пользовательский порт SSH

rsync -avz -e "ssh -p 2222" /path/to/local/directory/ username@remote_host:/path/to/remote/destination/

6) Полезные опции rsync

ОпцияОписание
-aРежим архива: сохраняет разрешения, временные метки, символические ссылки и владельца
-vПодробный режим: отображает прогресс передачи файл за файлом
-zСжатие: уменьшает объем данных, передаваемых по сети
–deleteУдаляет файлы в назначении, которые больше не существуют в источнике
–progressПоказывает прогресс в реальном времени для каждого файла
–excludeИсключить определенные файлы или шаблоны (например, –exclude ‘*.log’)
-n или –dry-runИмитировать передачу без фактического копирования
-e “ssh -p [port]”Указать пользовательский порт SSH
–bwlimit=[KB/s]Ограничить скорость передачи, чтобы не перегружать соединение

7) Когда использовать rsync

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

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

disruptive

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

1) Копирование файлов между двумя удаленными серверами с помощью SCP

scp username1@remote_host1:/path/to/file username2@remote_host2:/path/to/destination

2) Копирование файлов между двумя удаленными серверами с помощью rsync

rsync -avz username1@remote_host1:/path/to/source/ username2@remote_host2:/path/to/destination/

Примечание: Для работы передачи между серверами исходный сервер должен иметь возможность установить SSH-соединение с целевым сервером. Вам может потребоваться настроить SSH-ключи на исходном сервере или использовать перенаправление SSH-агента (ssh -A).

3) Передача между серверами через SSH-туннель (альтернативный способ)

Если прямое SSH-соединение между серверами невозможно из-за ограничений брандмауэра, вы можете направить передачу через ваш локальный компьютер, используя tar и ssh:

ssh username1@remote_host1 "tar czf - /path/to/source" | ssh username2@remote_host2 "tar xzf - -C /path/to/destination"

Это передает сжатый архив с сервера 1 непосредственно на сервер 2 через вашу локальную сессию терминала.

Способ 4: Копирование файлов с помощью SFTP (SSH File Transfer Protocol)

disruptive

SFTP обеспечивает интерактивный опыт, похожий на FTP, через зашифрованное SSH-соединение. В отличие от SCP, который является инструментом с одной командой, SFTP открывает постоянный сеанс, в котором вы можете интерактивно просматривать каталоги, загружать, скачивать, переименовывать и удалять файлы.

1) Запуск сеанса SFTP

sftp username@remote_host

Вы попадете в приглашение SFTP (sftp>), из которого вы можете выполнять следующие команды:

2) Основные команды SFTP

КомандаОписание
lsСписок файлов в текущем удаленном каталоге
llsСписок файлов в текущем локальном каталоге
cd /remote/pathИзменить удаленный каталог
lcd /local/pathИзменить локальный каталог
put /local/file /remote/destinationЗагрузить файл на удаленный сервер
get /remote/file /local/destinationСкачать файл с удаленного сервера
mput *.txtЗагрузить несколько файлов, соответствующих шаблону
mget *.logСкачать несколько файлов, соответствующих шаблону
mkdir /remote/newdirСоздать каталог на удаленном сервере
rm /remote/fileУдалить файл на удаленном сервере
exit или quitЗакрыть сеанс SFTP

3) Подключение к пользовательскому SSH-порту через SFTP

sftp -P 2222 username@remote_host

4) Когда использовать SFTP

SFTP лучше всего подходит для интерактивных сеансов управления файлами — например, когда вам нужно просмотреть структуру удаленного каталога, выборочно скачать файлы журналов или загрузить файлы конфигурации на веб-сервер. Многие графические клиенты (такие как FileZilla, Cyberduck и WinSCP) используют SFTP в качестве своего базового протокола, что делает его доступным и для нетехнических пользователей.

Способ 5: Автоматизация передачи файлов с аутентификацией по ключам SSH

disruptive

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

1) Создание пары ключей SSH

На локальной машине выполните:

ssh-keygen -t ed25519 -C "your_email@example.com"

Примечание: ed25519 — это современный рекомендуемый алгоритм. Используйте -t rsa -b 4096, если вам нужна совместимость со старыми системами.

Следуйте подсказкам, чтобы сохранить ключ (расположение по умолчанию: ~/.ssh/id_ed25519) и при необходимости установите парольную фразу для дополнительной безопасности.

2) Копирование открытого ключа на удаленный сервер

ssh-copy-id username@remote_host

Это добавляет ваш открытый ключ в файл ~/.ssh/authorized_keys на удаленном сервере. Вас попросят ввести пароль в последний раз.

Если ssh-copy-id недоступен, вы можете сделать это вручную:

cat ~/.ssh/id_ed25519.pub | ssh username@remote_host "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"

3) Проверка безпарольной аутентификации

ssh username@remote_host

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

4) Автоматизация передачи файлов с помощью скрипта оболочки

С настроенным безпарольным SSH вы можете автоматизировать передачу файлов в заданиях cron или скриптах:

#!/bin/bash
# Daily backup script
rsync -avz --delete /var/www/html/ username@backup_server:/backups/www/

Добавьте это в ваш crontab (crontab -e) для ежедневного запуска:

0 2 * * * /usr/local/bin/backup.sh >> /var/log/backup.log 2>&1

Troubleshooting Common SSH File Transfer Issues

disruptive

Even experienced administrators run into issues. Here are the most common problems and their solutions:

Permission Denied (publickey)

  • Verify the public key is correctly added to ~/.ssh/authorized_keys on the remote server
  • Check that ~/.ssh has permissions 700 and authorized_keys has permissions 600
  • Confirm the SSH daemon allows key authentication (PubkeyAuthentication yes in /etc/ssh/sshd_config)

Connection Refused

  • Verify the SSH service is running: systemctl status sshd
  • Check that the correct port is being used
  • Review firewall rules: ufw status or iptables -L

Transfer Speed Is Slow

  • Enable compression: add -C to SCP or -z to rsync
  • Use a faster cipher: ssh -c aes128-ctr (less secure but faster on high-latency links)
  • For large transfers, consider rsync with –bwlimit to avoid saturating your network

Host Key Verification Failed

  • The remote server’s SSH fingerprint has changed (could indicate a security issue or a server rebuild)
  • Remove the old key: ssh-keygen -R remote_host
  • Reconnect and verify the new fingerprint before accepting it

Выбор правильного инструмента: SCP vs. rsync vs. SFTP

disruptive

ФункцияSCPrsyncSFTP
Простота использования⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐
Дельта-передачи
Синхронизация каталогов✅ (рекурсивно)✅ (с –delete)✅ (вручную)
Интерактивный режим
Автоматизация✅ (со скриптами)
Эффективность пропускной способностиНизкаяВысокаяНизкая
Лучше всего дляБыстрые одноразовые передачиРезервные копии и синхронизацияИнтерактивный просмотр

Защита передачи файлов SSH: лучшие практики

disruptive

Независимо от того, какой инструмент вы используете, следуйте этим рекомендациям безопасности для защиты ваших серверов и данных:

  1. Отключите аутентификацию по паролю — Используйте исключительно SSH ключи и установите PasswordAuthentication no в /etc/ssh/sshd_config
  2. Измените порт SSH по умолчанию — Переход с порта 22 значительно снижает количество автоматических попыток перебора
  3. Используйте fail2ban — Автоматически блокируйте IP-адреса, которые повторно не прошли аутентификацию
  4. Ограничьте доступ SSH по IP — Используйте правила брандмауэра или директивы AllowUsers для ограничения доступа
  5. Держите SSH в актуальном состоянии — Регулярно обновляйте OpenSSH для устранения известных уязвимостей
  6. Используйте надежные алгоритмы ключей — Предпочитайте ed25519 или rsa-4096 более старым и слабым алгоритмам
  7. Защитите ваши веб-приложения — Сочетайте безопасность SSH с SSL сертификатом для шифрования всего трафика ваших веб-сервисов

Часто задаваемые вопросы

disruptive

1) В чем разница между SCP и SFTP?

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

2) Могу ли я использовать rsync без SSH?

Да — rsync имеет собственный режим демона, который работает без SSH, но это менее безопасно. Для любой передачи через интернет всегда используйте rsync через SSH (rsync -e ssh).

3) Как передать файлы, если мой сервер использует нестандартный порт SSH?

Используйте флаг -P с SCP (scp -P 2222) или опцию -e “ssh -p 2222” с rsync. Для SFTP используйте sftp -P 2222.

4) SCP устарел?

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

Заключение

disruptive

Освоение передачи файлов на основе SSH — это важный навык для всех, кто управляет серверами, развертывает приложения или поддерживает удаленную инфраструктуру. Каждый инструмент имеет свое назначение:

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

Комбинирование этих инструментов с аутентификацией по SSH-ключам и надежными практиками безопасности дает вам надежный, автоматизированный и безопасный рабочий процесс передачи файлов, который масштабируется от одного аккаунта Shared Web Hosting вплоть до сложных многосерверных архитектур на Dedicated Servers.

Если вы ищете надежную, высокопроизводительную хостинг-среду для применения этих навыков на практике, изучите планы VPS Hosting AlexHost — созданные для разработчиков и системных администраторов, которые требуют полный root-доступ, SSD-хранилище и сетевое подключение корпоративного уровня.