Копирование файлов через SSH: полное руководство по SCP, rsync и SFTP
SSH (Secure Shell) — это основа безопасного удалённого управления серверами. Независимо от того, являетесь ли вы разработчиком, развёртывающим код, системным администратором, управляющим инфраструктурой, или опытным пользователем, обслуживающим среду VPS Hosting, безопасная передача файлов между машинами — это задача, которую вы будете выполнять постоянно.
Это исчерпывающее руководство охватывает все основные методы копирования файлов через SSH — включая SCP, rsync, SFTP и автоматизацию на основе ключей — с реальным синтаксисом, практическими примерами и экспертными советами, которые помогут вам работать быстрее и безопаснее.
Зачем использовать SSH для передачи файлов?
Прежде чем погружаться в инструменты, стоит понять, почему передача файлов на основе SSH является отраслевым стандартом как для серверных администраторов, так и для разработчиков.
- Сквозное шифрование: каждый байт данных — включая учётные данные, команды и содержимое файлов — шифруется при передаче с использованием современных криптографических алгоритмов. Это делает SSH-передачи невосприимчивыми к перехвату пакетов и атакам типа «человек посередине».
- Не требует дополнительного программного обеспечения: SSH предустановлен практически на каждой системе Linux/Unix и нативно доступен в Windows 10+ и macOS.
- Универсальность: одно SSH-соединение может обрабатывать интерактивные сеансы оболочки, передачу файлов, перенаправление портов и автоматизированные скрипты.
- Удобство автоматизации: SSH легко интегрируется с заданиями cron, конвейерами CI/CD и скриптами резервного копирования, обеспечивая полностью автоматизированную передачу файлов без ввода пароля.
- Надёжность: SSH-соединения корректно обрабатывают перебои в сети, особенно в сочетании с такими инструментами, как
rsync.
Метод 1: Копирование файлов с помощью SCP (Secure Copy Protocol)
SCP — это простейший и наиболее широко используемый инструмент для разовой передачи файлов по SSH. Он работает, используя существующее SSH-соединение для безопасного копирования файлов между хостами.
Базовый синтаксис SCP
scp [options] [source] [destination]Пример 1: Загрузка файла с локальной машины на удалённый сервер
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 — целевой каталог или путь к файлу на удалённом сервере
Пример 2: Скачивание файла с удалённого сервера на локальную машину
scp username@remote_host:/path/to/remote/file /path/to/local/destination
Просто поменяйте местами источник и назначение, чтобы скачать файл с сервера на локальную машину.
Пример 3: Рекурсивное копирование целого каталога
scp -r /path/to/local/directory username@remote_host:/path/to/remote/destination
Флаг -r указывает SCP рекурсивно копировать каталог и всё его содержимое, включая вложенные подкаталоги.
Полезные параметры SCP
Параметр
Описание
-P [port]
Указать нестандартный SSH-порт (обратите внимание: заглавная -P, в отличие от строчной -p в SSH)
-C
Включить сжатие для ускорения передачи по медленным соединениям
-i [identity_file]
Использовать конкретный приватный SSH-ключ для аутентификации
-l [limit]
Ограничить использование полосы пропускания в Kbit/s
-q
Тихий режим — подавить вывод прогресса
-v
Подробный режим — полезен для отладки проблем с соединением
Когда использовать SCP
SCP идеально подходит для быстрой, разовой передачи файлов, когда важна простота. Он не требует настройки и работает «из коробки» на любой системе с установленным SSH. Однако для больших каталогов или повторяющихся передач rsync является значительно лучшим выбором.
Метод 2: Копирование файлов с помощью rsync
rsync — это профессиональный инструмент для синхронизации и передачи файлов по SSH. Его ключевая особенность — дельта-передача: вместо копирования целых файлов rsync анализирует источник и назначение и передаёт только изменённые части. Это экономит огромное количество времени и трафика при работе с большими файлами или каталогами, которые часто обновляются.
Базовый синтаксис rsync
rsync [options] [source] [destination]
Пример 1: Загрузка файла с локальной машины на удалённый сервер
rsync -avz /path/to/local/file username@remote_host:/path/to/remote/destination
Пример 2: Синхронизация целого каталога с удалённым сервером
rsync -avz /path/to/local/directory/ username@remote_host:/path/to/remote/destination/
> Важно: обратите внимание на завершающий слэш / после исходного каталога. С завершающим слэшем rsync копирует *содержимое* каталога. Без него rsync копирует сам каталог как подкаталог назначения.
Пример 3: Зеркалирование каталога (удаление файлов, удалённых из источника)
rsync -avz --delete /path/to/local/directory/ username@remote_host:/path/to/remote/destination/
Флаг --delete гарантирует, что файлы, удалённые из источника, также удаляются из назначения, поддерживая оба расположения в полной синхронизации.
Пример 4: Использование нестандартного SSH-порта
rsync -avz -e "ssh -p 2222" /path/to/local/directory/ username@remote_host:/path/to/remote/destination/
Полезные параметры rsync
Параметр
Описание
-a
Режим архива: сохраняет права доступа, временны́е метки, символические ссылки и владельца
-v
Подробный режим: отображает прогресс передачи файл за файлом
-z
Сжатие: уменьшает объём данных, передаваемых по сети
--delete
Удаляет файлы в назначении, которых больше нет в источнике
--progress
Отображает прогресс передачи каждого файла в реальном времени
--exclude
Исключить определённые файлы или шаблоны (например, --exclude '*.log')
-n или --dry-run
Симулировать передачу без фактического копирования чего-либо
-e "ssh -p [port]"
Указать нестандартный SSH-порт
--bwlimit=[KB/s]
Ограничить скорость передачи, чтобы не перегружать соединение
Когда использовать rsync
Используйте rsync для резервного копирования, развёртывания и любых повторяющихся задач синхронизации. Он особенно эффективен при управлении большими кодовыми базами, медиатеками или экспортами баз данных на Dedicated Server, где критически важны эффективность использования полосы пропускания и целостность данных.
Метод 3: Копирование файлов между двумя удалёнными серверами
Менее известная, но чрезвычайно полезная возможность как SCP, так и rsync — это способность передавать файлы напрямую между двумя удалёнными серверами без маршрутизации данных через локальную машину. Это незаменимо при миграции серверов или синхронизации данных между облачными экземплярами.
Копирование файлов между двумя удалёнными серверами с помощью SCP
scp username1@remote_host1:/path/to/file username2@remote_host2:/path/to/destination
Копирование файлов между двумя удалёнными серверами с помощью rsync
rsync -avz username1@remote_host1:/path/to/source/ username2@remote_host2:/path/to/destination/
> Примечание: для работы передачи между серверами исходный сервер должен иметь возможность установить SSH-соединение с сервером назначения. Возможно, вам потребуется настроить SSH-ключи на исходном сервере или использовать перенаправление SSH-агента (ssh -A).
Передача между серверами через 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)
SFTP обеспечивает интерактивный, FTP-подобный опыт через зашифрованное SSH-соединение. В отличие от SCP, который является однокомандным инструментом, SFTP открывает постоянный сеанс, в котором вы можете просматривать каталоги, загружать, скачивать, переименовывать и удалять файлы в интерактивном режиме.
Запуск сеанса SFTP
sftp username@remote_host
Вы попадёте в приглашение SFTP (sftp>), из которого можно выполнять следующие команды:
Основные команды 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
Подключение к нестандартному SSH-порту через SFTP
sftp -P 2222 username@remote_host
Когда использовать SFTP
SFTP лучше всего подходит для интерактивных сеансов управления файлами — например, когда вам нужно просмотреть структуру удалённого каталога, выборочно скачать лог-файлы или загрузить конфигурационные файлы на веб-сервер. Многие GUI-клиенты (такие как FileZilla, Cyberduck и WinSCP) используют SFTP в качестве базового протокола, что делает его доступным и для нетехнических пользователей.
Метод 5: Автоматизация передачи файлов с аутентификацией по SSH-ключу
Ручной ввод пароля при каждой передаче файлов неэффективен и несовместим с автоматизацией. Аутентификация на основе 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: Автоматизация передачи с помощью shell-скрипта
После настройки 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
Устранение распространённых проблем с передачей файлов по SSH
Даже опытные администраторы сталкиваются с проблемами. Вот наиболее распространённые из них и их решения:
Permission Denied (publickey)
Убедитесь, что публичный ключ правильно добавлен в ~/.ssh/authorized_keys на удалённом сервере
Проверьте, что ~/.ssh имеет права 700, а authorized_keys — права 600PubkeyAuthentication yes в /etc/ssh/sshd_config)Connection Refused
- Убедитесь, что SSH-служба запущена:
systemctl status sshd - Проверьте, что используется правильный порт
- Проверьте правила брандмауэра:
ufw statusилиiptables -L
Медленная скорость передачи
- Включите сжатие: добавьте
-Cдля SCP или-zдля rsync - Используйте более быстрый шифр:
ssh -c aes128-ctr(менее безопасный, но быстрее на каналах с высокой задержкой) - Для больших передач рассмотрите
rsyncс--bwlimit, чтобы не перегружать сеть
Host Key Verification Failed
- SSH-отпечаток удалённого сервера изменился (это может указывать на проблему безопасности или пересборку сервера)
- Удалите старый ключ:
ssh-keygen -R remote_host - Переподключитесь и проверьте новый отпечаток перед его принятием
Выбор подходящего инструмента: SCP vs. rsync vs. SFTP
| Функция | SCP | rsync | SFTP |
|---|---|---|---|
| Простота использования | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐ |
| Дельта-передача | ❌ | ✅ | ❌ |
| Синхронизация каталогов | ✅ (рекурсивно) | ✅ (с --delete) | ✅ (вручную) |
| Интерактивный режим | ❌ | ❌ | ✅ |
| Автоматизация | ✅ | ✅ | ✅ (со скриптами) |
| Эффективность использования полосы пропускания | Низкая | Высокая | Низкая |
| Лучше всего для | Быстрых разовых передач | Резервного копирования и синхронизации | Интерактивного просмотра |
Защита SSH-передач файлов: лучшие практики
Независимо от того, какой инструмент вы используете, следуйте этим лучшим практикам безопасности для защиты ваших серверов и данных:
- Отключите аутентификацию по паролю — используйте исключительно SSH-ключи и установите
PasswordAuthentication noв/etc/ssh/sshd_config - Измените стандартный SSH-порт — отказ от порта 22 значительно снижает количество автоматизированных атак методом перебора
- Используйте
fail2ban— автоматически блокируйте IP-адреса, которые неоднократно не проходят аутентификацию - Ограничьте SSH-доступ по IP — используйте правила брандмауэра или директивы
AllowUsersдля ограничения круга лиц, которые могут подключаться - Обновляйте SSH — регулярно обновляйте OpenSSH для устранения известных уязвимостей
- Используйте надёжные алгоритмы ключей — отдавайте предпочтение
ed25519илиrsa-4096перед более старыми и слабыми алгоритмами - Защитите ваши веб-приложения — дополните SSH-безопасность SSL-сертификатом для шифрования всего трафика к вашим веб-сервисам
Часто задаваемые вопросы
В чём разница между SCP и SFTP?
SCP — это неинтерактивный инструмент командной строки, предназначенный для быстрой передачи файлов одной командой. SFTP — это интерактивный протокол, позволяющий просматривать, управлять, загружать и скачивать файлы в сеансовом интерфейсе. Оба используют SSH для шифрования.
Можно ли использовать rsync без SSH?
Да — rsync имеет собственный режим демона, работающий без SSH, но он менее безопасен. Для любой передачи через интернет всегда используйте rsync поверх SSH (rsync -e ssh).
Как передавать файлы, если мой сервер использует нестандартный SSH-порт?
Используйте флаг -P с SCP (scp -P 2222) или параметр -e "ssh -p 2222" с rsync. Для SFTP используйте sftp -P 2222.
Устарел ли SCP?
Разработчики OpenSSH отметили, что базовый протокол SCP имеет ограничения, и рекомендуют использовать SFTP или rsync для новых рабочих процессов. Тем не менее SCP по-прежнему широко доступен и функционален практически на всех системах.
Заключение
Освоение передачи файлов на основе SSH — это важнейший навык для всех, кто управляет серверами, развёртывает приложения или обслуживает удалённую инфраструктуру. У каждого инструмента есть своё место:
- SCP — ваш выбор для быстрых, простых, разовых передач
- rsync незаменим для резервного копирования, развёртывания и эффективной синхронизации больших наборов данных
- SFTP превосходит другие инструменты в интерактивных сеансах, когда вам нужно просматривать файлы и управлять ими на лету
Сочетание этих инструментов с аутентификацией по SSH-ключу и надёжными практиками безопасности даёт вам надёжный, автоматизированный и безопасный рабочий процесс передачи файлов, который масштабируется от одного аккаунта Shared Web Hosting вплоть до сложных многосерверных архитектур на Dedicated Servers.
Если вы ищете надёжную высокопроизводительную хостинговую среду для применения этих навыков на практике, ознакомьтесь с планами VPS Hosting от AlexHost — созданными для разработчиков и системных администраторов, которым необходим полный root-доступ, SSD-хранилище и сетевое подключение корпоративного уровня.
