Копирование файлов через 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-соединение для безопасного копирования файлов между хостами.
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

rsync — это профессиональный выбор для синхронизации и передачи файлов по SSH. Его главная особенность — дельта-передача: вместо копирования целых файлов rsync анализирует источник и назначение и передает только измененные части. Это экономит огромное количество времени и пропускной способности при работе с большими файлами или часто обновляемыми директориями.
1) Базовый синтаксис rsync
rsync [options] [source] [destination]2) Загрузить файл с локальной машины на удаленный сервер
rsync -avz /path/to/local/file username@remote_host:/path/to/remote/destination3) Синхронизировать всю директорию на удаленный сервер
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: Копирование файлов между двумя удаленными серверами

Менее известная, но чрезвычайно полезная возможность как SCP, так и rsync — это возможность передачи файлов непосредственно между двумя удаленными серверами — без маршрутизации данных через ваш локальный компьютер. Это неоценимо при миграции серверов или синхронизации данных между облачными экземплярами.
1) Копирование файлов между двумя удаленными серверами с помощью SCP
scp username1@remote_host1:/path/to/file username2@remote_host2:/path/to/destination2) Копирование файлов между двумя удаленными серверами с помощью 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)

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_host4) Когда использовать SFTP
SFTP лучше всего подходит для интерактивных сеансов управления файлами — например, когда вам нужно просмотреть структуру удаленного каталога, выборочно скачать файлы журналов или загрузить файлы конфигурации на веб-сервер. Многие графические клиенты (такие как 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) Автоматизация передачи файлов с помощью скрипта оболочки
С настроенным безпарольным 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>&1Troubleshooting Common SSH File Transfer Issues

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

| Функция | 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 сертификатом для шифрования всего трафика ваших веб-сервисов
Часто задаваемые вопросы

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 остается широко доступным и функциональным практически на всех системах.
Заключение

Освоение передачи файлов на основе SSH — это важный навык для всех, кто управляет серверами, развертывает приложения или поддерживает удаленную инфраструктуру. Каждый инструмент имеет свое назначение:
- SCP — ваш выбор для быстрых, простых одноразовых передач
- rsync незаменим для резервного копирования, развертывания и эффективной синхронизации больших наборов данных
- SFTP отлично подходит для интерактивных сеансов, когда вам нужно просматривать и управлять файлами на лету
Комбинирование этих инструментов с аутентификацией по SSH-ключам и надежными практиками безопасности дает вам надежный, автоматизированный и безопасный рабочий процесс передачи файлов, который масштабируется от одного аккаунта Shared Web Hosting вплоть до сложных многосерверных архитектур на Dedicated Servers.
Если вы ищете надежную, высокопроизводительную хостинг-среду для применения этих навыков на практике, изучите планы VPS Hosting AlexHost — созданные для разработчиков и системных администраторов, которые требуют полный root-доступ, SSD-хранилище и сетевое подключение корпоративного уровня.
на всех хостинговых услугах