Заощадьте 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]Обмежити використання пропускної здатності в Kbit/s
-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 для резервних копій, розгортання та будь-яких повторюваних завдань синхронізації. Це особливо потужно при управлінні великими кодовими базами, медіа-бібліотеками або експортом баз даних на Dedicated Server, де ефективність пропускної здатності та цілісність даних є критичними.

Метод 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 agent forwarding (ssh -A).

3) Передача між серверами через SSH Tunneling (альтернативний метод)

Якщо прямий 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 Key

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) Автоматизація передачі за допомогою 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

disruptive

Навіть досвідчені адміністратори стикаються з проблемами. Ось найпоширеніші проблеми та їх рішення:

Permission Denied (publickey)

  • Перевірте, що публічний ключ правильно додано до ~/.ssh/authorized_keys на віддаленому сервері
  • Перевірте, що ~/.ssh має дозволи 700 і authorized_keys має дозволи 600
  • Підтвердьте, що SSH демон дозволяє аутентифікацію за ключем (PubkeyAuthentication 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

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-сховища та мережевої підключення корпоративного рівня.