Копіювання файлів через 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: Автоматизація передавань за допомогою скрипту оболонки
Після налаштування безпарольного 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 проти rsync проти 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 Certificate для шифрування всього трафіку до ваших веб-сервісів
Часті запитання
У чому різниця між 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-сховища та мережевого підключення корпоративного рівня.
