SFTP Протокол: Повний посібник із безпечної передачі файлів на вашому VPS
Передача файлів на сервер і з нього є одним із найрутинніших завдань у веб-хостингу та системному адмініструванні — проте це також одна з найчастіших помилок з точки зору безпеки. Застарілі протоколи, такі як FTP, передають облікові дані та дані у відкритому тексті, залишаючи ваш сервер повністю відкритим для перехоплення. SFTP (SSH File Transfer Protocol) повністю усуває цей ризик, маршрутизуючи кожен байт даних через зашифрований SSH-тунель.
Цей посібник охоплює все, що вам потрібно знати про SFTP: як він працює зсередини, як налаштувати його на Linux VPS, як підключитися за допомогою інструментів командного рядка та GUI-клієнтів, і чому він має бути вашим методом за замовчуванням для всіх операцій передачі файлів.
Що таке SFTP і чим він відрізняється від FTP?
SFTP розшифровується як SSH File Transfer Protocol. Незважаючи на схожу назву, це не просте розширення традиційного протоколу FTP — це абсолютно окремий протокол, побудований з нуля для роботи через SSH (Secure Shell). Ця відмінність має величезне практичне значення.
| Функція | FTP | SFTP |
|---|---|---|
| Шифрування | Відсутнє (відкритий текст) | Повне SSH-шифрування |
| Необхідні порти | 20 + 21 (+ пасивний діапазон) | 22 (один порт) |
| Автентифікація | Лише логін/пароль | Пароль, SSH-ключ, 2FA |
| Сумісність із брандмауером | Складна | Проста |
| Цілісність даних | Не гарантована | Криптографічно підтверджена |
Традиційний FTP надсилає ваше ім’я користувача, пароль і всі дані файлів у відкритому тексті. Будь-хто, хто виконує перехоплення пакетів у тому самому мережевому сегменті, може миттєво прочитати ваші облікові дані. SFTP шифрує весь сеанс — автентифікацію, команди та дані файлів — використовуючи ту саму перевірену криптографію, яка захищає SSH-з’єднання по всьому світу.
Як працює SFTP: технічний огляд
Коли ви ініціюєте сеанс SFTP, відбувається така послідовність дій:
- TCP-з’єднання встановлюється з портом 22 на віддаленому сервері.
- SSH-рукостискання відбувається: сервер надає свій хост-ключ, а клієнт перевіряє його за відомими хостами для запобігання атакам типу «людина посередині».
- Автентифікація виконується — або за допомогою пароля, або пари публічного/приватного ключів.
- Підсистема SFTP викликається в межах автентифікованого SSH-сеансу.
- Файлові операції (завантаження, вивантаження, перейменування, видалення, перегляд каталогів) виконуються через зашифрований канал.
Весь сеанс, від автентифікації до останнього байта переданих даних, захищений симетричним шифруванням, узгодженим під час SSH-рукостискання. Жодні облікові дані чи вміст файлів ніколи не передаються у відкритому тексті.
Крок 1: Встановлення та налаштування сервера OpenSSH
Більшість сучасних дистрибутивів Linux — включаючи Ubuntu та Debian — постачаються з OpenSSH або попередньо встановленим, або легкодоступним у їхніх репозиторіях пакетів. Якщо ви запускаєте новий екземпляр VPS Хостингу, переконайтеся, що сервер OpenSSH присутній і працює.
Встановлення OpenSSH на Ubuntu/Debian
sudo apt update && sudo apt install openssh-server -yПеревірка роботи служби
sudo systemctl status sshУ виводі ви повинні побачити active (running). Якщо служба не запущена, запустіть і увімкніть її:
sudo systemctl start ssh
sudo systemctl enable sshПеревірка увімкнення SFTP
OpenSSH включає підтримку SFTP через вбудовану підсистему. Підтвердьте, що вона налаштована в /etc/ssh/sshd_config:
grep -i sftp /etc/ssh/sshd_configВи повинні побачити рядок, подібний до:
Subsystem sftp /usr/lib/openssh/sftp-serverЯкщо цей рядок відсутній або закоментований, додайте його та перезапустіть SSH-демон:
sudo systemctl restart sshКрок 2: Створення виділеного користувача SFTP (найкраща практика)
Замість використання облікового запису root або загального адміністративного облікового запису для передачі файлів, створіть виділеного користувача SFTP з обмеженим доступом. Це обмежує масштаб наслідків у разі компрометації облікових даних.
Створення користувача та встановлення домашнього каталогу
sudo adduser sftpuser
sudo mkdir -p /var/sftp/uploads
sudo chown root:root /var/sftp
sudo chmod 755 /var/sftp
sudo chown sftpuser:sftpuser /var/sftp/uploadsНалаштування Chroot Jail у sshd_config
Відкрийте /etc/ssh/sshd_config і додайте наступний блок у кінець файлу:
Match User sftpuser
ForceCommand internal-sftp
PasswordAuthentication yes
ChrootDirectory /var/sftp
PermitTunnel no
AllowAgentForwarding no
AllowTcpForwarding no
X11Forwarding noЦя конфігурація ізолює користувача всередині /var/sftp, запобігаючи переміщенню до інших частин файлової системи. Перезапустіть SSH для застосування змін:
sudo systemctl restart sshКрок 3: Налаштування автентифікації за SSH-ключем для SFTP
Автентифікація за паролем зручна, але менш безпечна, ніж автентифікація на основі ключів. Для виробничих середовищ настійно рекомендуються пари SSH-ключів.
Генерація пари SSH-ключів на вашій локальній машині
На Linux або macOS:
ssh-keygen -t ed25519 -C "sftp-key-$(date +%Y%m%d)"На Windows (PowerShell або Windows Terminal):
ssh-keygen -t ed25519Це генерує два файли: приватний ключ (зберігайте його в таємниці, ніколи не діліться ним) та публічний ключ (що закінчується на .pub).
Копіювання публічного ключа на сервер
ssh-copy-id -i ~/.ssh/id_ed25519.pub sftpuser@your-server-ipКрім того, вручну додайте публічний ключ до ~/.ssh/authorized_keys на сервері.
Вимкнення автентифікації за паролем (необов’язково, але рекомендовано)
Після підтвердження роботи автентифікації на основі ключів вимкніть вхід за паролем для користувача SFTP в sshd_config, змінивши PasswordAuthentication yes на PasswordAuthentication no у блоці Match User.
Крок 4: Підключення до SFTP з командного рядка
Клієнт SFTP командного рядка доступний нативно на Linux і macOS, а також включений до OpenSSH на Windows 10/11.
Базовий синтаксис підключення
sftp username@hostname_or_ipПриклад:
sftp sftpuser@203.0.113.45Підключення на нестандартному порту
Якщо ваш SSH-демон прослуховує порт, відмінний від 22 (поширений захід посилення безпеки):
sftp -P 2222 sftpuser@203.0.113.45Підключення за допомогою SSH-ключа
sftp -i ~/.ssh/id_ed25519 sftpuser@203.0.113.45Крок 5: Основні команди SFTP
Після підключення ви працюєте в інтерактивній оболонці SFTP. Наступні команди охоплюють переважну більшість щоденних завдань управління файлами.
Навігація
# List files on the remote server
ls
ls -la
# Change remote directory
cd /var/sftp/uploads
# Show current remote directory
pwd
# List files on your local machine
lls
# Change local directory
lcd ~/Downloads
# Show current local directory
lpwdЗавантаження файлів на сервер
# Upload a single file
put localfile.txt
# Upload a file to a specific remote path
put localfile.txt /var/sftp/uploads/localfile.txt
# Upload an entire directory recursively
put -r /local/directory /var/sftp/uploads/Завантаження файлів із сервера
# Download a single file to the current local directory
get remotefile.txt
# Download a file to a specific local path
get remotefile.txt ~/Downloads/remotefile.txt
# Download an entire directory recursively
get -r /var/sftp/uploads/ ~/local-backup/Управління файлами та каталогами
# Create a remote directory
mkdir new-folder
# Remove a remote file
rm old-file.txt
# Remove a remote directory
rmdir empty-folder
# Rename or move a file
rename old-name.txt new-name.txtЗавершення сеансу
exit
# or
bye
# or press Ctrl+DКрок 6: Підключення за допомогою GUI-клієнтів
SFTP командного рядка є потужним інструментом, але графічні клієнти часто більш практичні для управління великою кількістю файлів або для членів команди, яким менш комфортно працювати з терміналом.
FileZilla (Windows, macOS, Linux)
FileZilla є одним із найбільш широко використовуваних безкоштовних SFTP-клієнтів.
- Відкрийте FileZilla та перейдіть до File → Site Manager.
- Натисніть New Site і дайте йому описову назву.
- Встановіть Protocol на
SFTP – SSH File Transfer Protocol. - Введіть ваш Host (IP-адресу або домен) та Port (за замовчуванням: 22).
- Встановіть Logon Type на
Key fileдля автентифікації за SSH-ключем абоNormalдля автентифікації за паролем. - Введіть ваше Username та вкажіть шлях до файлу приватного ключа, якщо використовуєте автентифікацію на основі ключів.
- Натисніть Connect.
Тепер ви можете перетягувати файли між вашою локальною машиною (ліва панель) і віддаленим сервером (права панель).
WinSCP (Windows)
WinSCP є популярною альтернативою лише для Windows із двопанельним інтерфейсом і тісною інтеграцією з форматами ключів PuTTY.
- Відкрийте WinSCP і створіть New Session.
- Встановіть File Protocol на
SFTP. - Введіть Host name, Port number, Username та Password (або налаштуйте SSH-ключ у розділі Advanced → SSH → Authentication).
- Натисніть Login.
Cyberduck (macOS, Windows)
Cyberduck — це чистий, сучасний клієнт, який підтримує SFTP поряд із S3, FTP та іншими протоколами. Підключіться, натиснувши Open Connection, вибравши SFTP (SSH File Transfer Protocol) та ввівши облікові дані вашого сервера.
Автоматизація передачі SFTP за допомогою скриптів
Для повторюваних завдань, таких як резервне копіювання, збір журналів або конвеєри розгортання, ви можете автоматизувати передачу SFTP за допомогою shell-скриптів у поєднанні з автентифікацією за SSH-ключем (без запиту пароля).
Приклад: скрипт автоматичного резервного копіювання
#!/bin/bash
# Configuration
REMOTE_USER="sftpuser"
REMOTE_HOST="203.0.113.45"
REMOTE_DIR="/var/sftp/uploads/backups"
LOCAL_BACKUP_DIR="/var/backups/myapp"
SSH_KEY="/root/.ssh/id_ed25519"
DATE=$(date +%Y%m%d_%H%M%S)
BACKUP_FILE="backup_${DATE}.tar.gz"
# Create the backup archive
tar -czf "/tmp/${BACKUP_FILE}" "${LOCAL_BACKUP_DIR}"
# Upload via SFTP
sftp -i "${SSH_KEY}" "${REMOTE_USER}@${REMOTE_HOST}" <<EOF
cd ${REMOTE_DIR}
put /tmp/${BACKUP_FILE}
bye
EOF
# Clean up local temp file
rm "/tmp/${BACKUP_FILE}"
echo "Backup ${BACKUP_FILE} uploaded successfully."Заплануйте це за допомогою завдання cron для щонічного запуску:
crontab -e
# Add:
0 2 * * * /usr/local/bin/backup-sftp.sh >> /var/log/sftp-backup.log 2>&1Посилення безпеки SFTP у виробничому середовищі
Запуск SFTP на виробничому сервері вимагає більшого, ніж просто конфігурація за замовчуванням. Застосуйте ці заходи посилення безпеки, щоб значно зменшити поверхню атаки.
1. Зміна стандартного SSH-порту
Зміна порту 22 на нестандартний (наприклад, 2222 або 22222) різко зменшує кількість автоматизованих спроб брутфорсу:
# In /etc/ssh/sshd_config
Port 22222. Обмеження доступу SFTP за IP-адресою
Якщо ваша команда підключається з відомих IP-адрес, обмежте доступ SSH/SFTP за допомогою UFW або /etc/hosts.allow:
sudo ufw allow from 203.0.113.10 to any port 22
sudo ufw deny 223. Впровадження Fail2Ban
Fail2Ban відстежує журнали автентифікації та автоматично блокує IP-адреси після налаштованої кількості невдалих спроб входу:
sudo apt install fail2ban -y
sudo systemctl enable fail2ban4. Вимкнення входу root через SSH
# In /etc/ssh/sshd_config
PermitRootLogin no5. Використання надійних алгоритмів SSH-ключів
Надавайте перевагу ключам ed25519 або ecdsa над старішим алгоритмом rsa. При генерації ключів завжди використовуйте щонайменше 4096 біт для RSA:
ssh-keygen -t ed25519
# or
ssh-keygen -t rsa -b 40966. Встановлення відповідних прав доступу до файлів
Переконайтеся, що файли конфігурації SSH мають правильні права доступу для запобігання несанкціонованим змінам:
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
chmod 600 ~/.ssh/id_ed25519Ключові переваги SFTP над альтернативними протоколами
Безпека
SFTP шифрує як канал управління, так і канал даних за допомогою SSH. Не існує сценарію, за якого облікові дані або вміст файлів передаються у відкритому тексті. Це робить його категорично безпечнішим за FTP і простішим у захисті, ніж FTPS (FTP через SSL/TLS), який вимагає управління сертифікатами та кількох портів.
Дружність до брандмауерів і NAT
FTP у пасивному режимі вимагає відкриття діапазону портів даних у брандмауері, що є значним адміністративним навантаженням і ширшою поверхнею атаки. SFTP використовує один порт (22 за замовчуванням), що робить правила брандмауера простими та передбачуваними.
Уніфікована автентифікація з SSH
Оскільки SFTP працює через SSH, він успадковує повну екосистему автентифікації: автентифікацію за паролем, автентифікацію за публічним ключем, автентифікацію на основі сертифікатів і двофакторну автентифікацію. Якщо ви вже керуєте SSH-доступом до вашого сервера, SFTP не потребує додаткової інфраструктури автентифікації.
Цілісність даних
Транспортний рівень SSH включає коди автентифікації повідомлень (MAC), які перевіряють цілісність кожного пакета. Це означає, що ваші дані не лише зашифровані під час передачі, але й будь-яке втручання або пошкодження виявляється, а передача переривається.
Підтримка відновлення
На відміну від базового FTP, SFTP підтримує відновлення перерваних передач, що є критично важливим при завантаженні великих файлів через ненадійні з’єднання.
SFTP у контексті вашого хостингового стеку
SFTP — це не просто окремий інструмент — він природно інтегрується в ширший робочий процес хостингу та розгортання. Ось найпоширеніші випадки використання:
Управління WordPress та CMS: Завантажуйте теми, плагіни та медіафайли безпосередньо на ваш сервер, не покладаючись на панель управління хостингом. Це особливо корисно при роботі з VPS з cPanel або іншими середовищами панелей управління, де вам потрібен прямий доступ до файлової системи.
Розгортання застосунків: Передавайте скомпільовані ресурси, файли конфігурації або цілі каталоги застосунків на ваш сервер як частину конвеєра розгортання.
Резервне копіювання баз даних і конфігурацій: Автоматизуйте передачу дампів баз даних і резервних копій конфігурацій до віддаленого сховища за допомогою підходу зі скриптами, описаного вище.
Збір журналів: Завантажуйте журнали сервера на вашу локальну машину для аналізу без надання широкого SSH-доступу аналітикам.
Публікація статичних сайтів: Розгортайте статичні веб-сайти, згенеровані такими інструментами, як Hugo, Jekyll або Next.js, безпосередньо в кореневий каталог веб-сервера.
Якщо ви керуєте кількома проектами або потребуєте ізольованих середовищ для різних клієнтів, план VPS Хостингу надає вам root-доступ і гнучкість для налаштування SFTP саме так, як вимагає ваш робочий процес — включаючи chroot jail, права доступу для кожного користувача та конфігурації власних портів.
Для команд, які керують великою кількістю доменів і веб-сайтів, поєднання SFTP-доступу з Спільним веб-хостингом або виділеним середовищем гарантує, що передача файлів залишається швидкою, зашифрованою та придатною для аудиту.
Усунення поширених проблем SFTP
«Connection refused» на порту 22
- Перевірте, що SSH-служба запущена:
sudo systemctl status ssh - Перевірте, що порт 22 відкритий у вашому брандмауері:
sudo ufw status - Переконайтеся, що ви підключаєтесь до правильної IP-адреси
«Permission denied» під час завантаження файлу
- Перевірте, що цільовий каталог існує і доступний для запису користувачем SFTP
- Перевірте власника каталогу chroot: кореневий каталог chroot повинен належати
rootз правами755 - Перегляньте
/var/log/auth.logдля отримання детальних повідомлень про помилки
«Host key verification failed»
- Хост-ключ сервера змінився (можливо після перевстановлення або зміни IP-адреси)
- Видаліть старий ключ:
ssh-keygen -R hostname_or_ip - Підключіться знову та прийміть новий хост-ключ
Повільна швидкість передачі
- Перевірте пропускну здатність мережі незалежно, щоб виключити проблему з підключенням
- Розгляньте можливість увімкнення SSH-стиснення для передачі текстових даних:
sftp -C username@hostname - Для дуже великих файлів
rsyncчерез SSH може бути ефективнішим, ніж SFTP
«Broken pipe» або розриви з’єднання під час передачі
- Збільшіть налаштування SSH keepalive в
~/.ssh/config:
Host *
ServerAliveInterval 60
ServerAliveCountMax 3Порівняння SFTP, FTPS та SCP
| SFTP | FTPS | SCP | |
|---|---|---|---|
| База протоколу | SSH | SSL/TLS через FTP | SSH |
| Порти | 1 (порт 22) | 2+ (21 + порти даних) | 1 (порт 22) |
| Відновлення передачі | Так | Залежить від клієнта | Ні |
| Перегляд каталогів | Так | Так | Ні |
| Інтерактивний сеанс | Так | Так | Ні |
| Дружність до брандмауера | Відмінна | Помірна | Відмінна |
| Потрібен сертифікат | Ні | Так | Ні |
SCP (Secure Copy Protocol) є швидшим для простого копіювання файлів, але не має можливостей інтерактивного сеансу SFTP. Він не може переглядати каталоги, відновлювати передачі або керувати віддаленими файлами. Використовуйте SCP для швидкого одноразового копіювання; використовуйте SFTP для інтерактивного управління файлами та автоматизації.
FTPS додає TLS-шифрування до традиційного протоколу FTP. Він вимагає управління SSL-сертифікатами (розгляньте поєднання з SSL-сертифікатами для вашого домену) і є складнішим у налаштуванні через брандмауери. SFTP зазвичай є кращим вибором для нових розгортань, якщо у вас немає конкретної вимоги щодо сумісності з FTPS.
Часті запитання
Чи є SFTP тим самим, що й FTPS?
Ні. SFTP (SSH File Transfer Protocol) — це абсолютно окремий протокол, який працює через SSH. FTPS — це FTP із накладеним поверх шифруванням TLS/SSL. Вони несумісні між собою.
Чи потребує SFTP окремого порту від SSH?
Ні. SFTP працює через те саме SSH-з’єднання на порту 22. Не потрібно відкривати додаткові порти.
Чи можна використовувати SFTP з двофакторною автентифікацією?
Так. Оскільки SFTP використовує SSH для автентифікації, будь-який метод 2FA, підтримуваний SSH (наприклад, TOTP через Google Authenticator або Duo), може бути застосований до сеансів SFTP.
Чи підходить SFTP для передачі великих файлів?
Так. SFTP підтримує передачу великих файлів і може відновлювати перервані передачі, що робить його надійним для великих завантажень і вивантажень.
Чи можна обмежити користувача SFTP певним каталогом?
Так. Конфігурація chroot jail, описана в кроці 2 цього посібника, обмежує користувача призначеним каталогом, запобігаючи доступу до решти файлової системи.
Висновок
SFTP є золотим стандартом для безпечної передачі файлів у середовищах Linux-серверів. Поєднуючи простоту управління файлами у стилі FTP із надійною криптографічною безпекою SSH, він усуває найбільш значущі вразливості протоколів відкритого тексту, залишаючись при цьому простим у налаштуванні та використанні.
Ключові висновки з цього посібника:
- Встановіть OpenSSH на вашому сервері — підтримка SFTP включена автоматично
- Створіть виділеного користувача SFTP з chroot jail для виробничих середовищ
- Використовуйте автентифікацію за SSH-ключем замість паролів де це можливо
- Застосовуйте заходи посилення безпеки: змініть стандартний порт, впровадьте Fail2Ban, вимкніть вхід root
- Автоматизуйте повторювані передачі за допомогою shell-скриптів і завдань cron
- Виберіть правильний клієнт — CLI для скриптів і автоматизації, FileZilla або WinSCP для інтерактивного використання
Незалежно від того, чи керуєте ви інсталяцією WordPress, розгортаєте веб-застосунок або автоматизуєте резервне копіювання сервера, SFTP забезпечує безпеку, надійність і гнучкість, яких вимагає ваш робочий процес. Поєднайте його з високопродуктивним середовищем VPS Хостингу з SSD-сховищем, захистом від DDoS і повним root-доступом, і ви отримаєте налаштування передачі файлів, яке є одночасно швидким і справді безпечним.
Для команд із більш складними потребами інфраструктури — включаючи застосунки з високим трафіком або ресурсомісткі навантаження — ознайомтеся з Виділеними серверами для максимальної продуктивності та ізоляції, або перегляньте доступні Панелі управління VPS, щоб знайти інтерфейс управління, який найкраще відповідає робочому процесу вашої команди.
