FTP (*File Transfer Protocol*) to jeden z najstarszych protokołów do przesyłania plików między komputerem a serwerem, ale nie szyfruje ruchu: hasła i dane lecą jawnym tekstem. Dziś zamiast niego używa się SFTP, który działa przez SSH i jest bezpieczny. Niezależnie od protokołu spakuj pliki w jedno archiwum, wyślij je i rozpakuj na serwerze, bo wysyłanie tysięcy małych plików osobno bywa bardzo wolne.
Wysłanie plików na serwer wydaje się prostą sprawą, a okazuje się, że nazw jest kilka: FTP, FTPS, SFTP. Ten artykuł wyjaśnia, czym jest FTP, czy ktoś jeszcze z niego korzysta, czym różni się od SFTP i jak wysyłać pliki tak, żeby nie czekać godzinami. Jeśli nie masz jeszcze dostępu do serwera, zacznij od artykułu o SSH i kluczach, bo SFTP opiera się właśnie na SSH. O samym serwerze przeczytasz w tekście o serwerze VPS.
Czym jest protokół FTP?
FTP (File Transfer Protocol) to standardowy protokół przesyłania plików w modelu klient–serwer: Twój program (klient) łączy się z serwerem i wysyła lub pobiera pliki. Według opisu w Wikipedii obecna specyfikacja to RFC 959 z października 1985 roku, a pierwsza wersja (RFC 114) pochodzi z 1971 roku. To jeden z najstarszych protokołów internetowych, który powstał, zanim ktokolwiek myślał o szyfrowaniu ruchu.
Jak działa FTP? Połączenie kontrolne, dane i tryb pasywny
FTP używa dwóch osobnych połączeń: kontrolnego, którym wysyłasz polecenia (według infoboksu na porcie 21), oraz danych, którym przesyłane są pliki (port 20). Sposób ich nawiązania zależy od trybu:
| Tryb | Kto łączy się z kim | Kiedy się przydaje |
|---|---|---|
| Aktywny | klient nasłuchuje i wysyła polecenie PORT, a serwer łączy się z klientem ze swojego portu 20 | gdy klient jest dostępny z zewnątrz |
| Pasywny | klient wysyła polecenie PASV i sam nawiązuje połączenie danych z serwerem | gdy klient jest za zaporą sieciową |
Ponieważ dwa połączenia i dodatkowe porty komplikują konfigurację zapory, FTP bywa kłopotliwy w sieciach z firewallem. Jeśli klient nie może pobrać listy plików po zalogowaniu, jedną z pierwszych rzeczy do sprawdzenia jest tryb (zwykle pasywny).
Dlaczego zwykły FTP nie jest bezpieczny?
Wikipedia podaje to wprost: FTP nie szyfruje ruchu. Nazwy użytkowników, hasła, polecenia i dane są przesyłane jawnym tekstem, więc każdy, kto przechwytuje ruch w sieci, może je odczytać. Dlatego do niczego poza testami w zamkniętej sieci zwykłego FTP nie używa się dziś na serwerach, na których coś zależy.
FTP, FTPS i SFTP: czym się różnią?
Nazwy są podobne, a protokoły różne:
| FTP | FTPS | SFTP | |
|---|---|---|---|
| Co to jest | podstawowy protokół (RFC 959) | FTP z dodanym szyfrowaniem TLS (RFC 4217) | inny protokół, działający przez SSH |
| Szyfrowanie | brak | tak (klient prosi o nie poleceniem AUTH TLS) | tak, przez SSH |
| Porty | 21 (sterowanie) i dane | jak FTP | jeden port, domyślnie 22 |
| Logowanie | login i hasło | login i hasło | hasło lub klucze SSH |
| Zgodność | punkt odniesienia | rozszerza FTP | niezgodny z FTP |
Najczęstszy błąd w nazewnictwie: SFTP to nie „FTP przez SSH”. Według opisu w Wikipedii to nowy protokół zaprojektowany od podstaw przez grupę IETF, który działa zwykle jako podsystem SSH i dzieli z nim port 22. Nigdy nie stał się oficjalnym standardem, a mimo to jest powszechnie obsługiwany. Skoro i tak łączysz się z serwerem przez SSH, SFTP nie wymaga osobnej usługi.
Uwaga mentora: jeśli możesz, zamiast zwykłego FTP używaj SFTP z kluczami SSH. Skoro i tak masz dostęp przez SSH, nie musisz stawiać osobnego serwera plików.
Czy FTP jest obecnie często wykorzystywany?
Nie znalazłem wiarygodnych danych o skali użycia FTP, więc nie podaję liczb. Wiadomo natomiast, że:
- Przeglądarki wycofały obsługę FTP. Według Wikipedii Chrome usunął ją w wersji 88 (to samo dotyczy przeglądarek opartych na Chromium, np. Edge), Firefox wyłączył ją domyślnie w wersji 88 i usunął w 90 (2021).
- LibreOffice usunął FTP w wersji 24.2.
- Polecenia FTP nadal są w konsoli większości systemów Windows i Unix-like, a popularne klienty graficzne, takie jak FileZilla i WinSCP, wciąż działają.
- W nowoczesnych projektach wdrożenia coraz częściej idą przez Git i CI/CD albo przez SSH. To obserwacja, a nie statystyka.
Wniosek ostrożny: FTP nie zniknął, ale poza starymi systemami i niektórymi hostingami jest wypierany przez SFTP i inne metody. Jeśli masz wybór, wybierz SFTP.
Jak wysłać pliki na serwer przez SFTP?
Program sftp jest dołączony do OpenSSH. Według jego podręcznika wykonuje on wszystkie operacje przez szyfrowany transport SSH. Łączysz się tak samo jak przez SSH:
sftp ania@203.0.113.10
Po połączeniu pracujesz w interaktywnej sesji. Według podręcznika najważniejsze polecenia to:
| Polecenie | Co robi |
|---|---|
put plik | wysyła plik na serwer |
get plik | pobiera plik z serwera |
ls | pokazuje zawartość zdalnego katalogu |
cd katalog | zmienia zdalny katalog |
mkdir katalog | tworzy zdalny katalog |
rm plik | usuwa zdalny plik |
Użyteczne opcje: -P port wskazuje port serwera, a -r kopiuje katalogi rekurencyjnie. Adres można też podać jako URI: sftp://ania@203.0.113.10/sciezka. Jeśli masz skonfigurowane klucze SSH, nie musisz wpisywać hasła. Opisuje to artykuł o SSH i kluczach. Tego polecenia nie uruchamiałem na prawdziwym serwerze, więc opieram się na podręczniku.
Dlaczego warto spakować pliki przed wysłaniem na serwer?
Najczęstszy powód, dla którego wysyłanie projektu na serwer trwa w nieskończoność, nie leży w łączu, tylko w liczbie plików. Przy wysyłaniu katalogu z tysiącami małych plików klient musi dla każdego osobno otworzyć plik, przesłać go i zamknąć, a więc wymienić z serwerem dodatkowe komunikaty. Przy małych plikach te narzuty potrafią zająć więcej czasu niż samo przesyłanie danych. Jedno archiwum to jeden transfer.
Dobra praktyka wygląda więc tak:
- Spakuj katalog do jednego archiwum na swoim komputerze.
- Wyślij archiwum (jeden plik).
- Rozpakuj je na serwerze.
# 1. lokalnie: spakuj katalog projekt/ do jednego pliku
tar -czf projekt.tar.gz projekt
# 2. wyślij jeden plik na serwer
sftp ania@203.0.113.10
sftp> put projekt.tar.gz
# 3. na serwerze (po zalogowaniu przez ssh): rozpakuj
tar -xzf projekt.tar.gz
Sprawdziłem lokalnie na macOS, jak to wygląda dla syntetycznych danych: 2000 małych plików tekstowych w 20 katalogach spakowałem poleceniem tar -czf do jednego archiwum o rozmiarze około 46 KB, po rozpakowaniu wróciło 2000 plików, a diff -r pokazał identyczną zawartość. Ten sam zestaw spakowany zip dał archiwum około 432 KB, czyli wielokrotnie większe. To były powtarzalne dane testowe, więc nie traktuj liczb jako reguły dla swojego projektu, a czasu wysyłania przez sieć nie mierzyłem. Wniosek, który zostaje: jedno archiwum to jeden transfer, a kompresja dodatkowo zmniejsza rozmiar.
Dwie uwagi praktyczne: nie pakuj do archiwum katalogów, których nie musisz wysyłać (np. node_modules albo .git), i po rozpakowaniu sprawdź uprawnienia plików na serwerze. Uprawnienia opisuje artykuł o chmod w Linuksie.
Jakich klientów FTP i SFTP używać?
| Klient | System | Uwagi |
|---|---|---|
Polecenie sftp | macOS, Linux, Windows (z OpenSSH) | wbudowane, praca w terminalu |
| FileZilla | Windows, macOS, Linux | popularny klient graficzny (FTP, FTPS i SFTP) |
| WinSCP | Windows | popularny klient graficzny |
| Dolphin, Konqueror | Linux (KDE) | obsługują FTP i SFTP bezpośrednio w menedżerze plików |
| Eksplorator Windows | Windows | obsługuje FTP tylko do małych transferów i nie obsługuje SFTP |
Informacje o klientach pochodzą z Wikipedii, a ich szczegółowej dokumentacji nie sprawdzałem. Do pracy z serwerem przez SSH wystarczy sftp w terminalu, a klient graficzny przydaje się wtedy, gdy wolisz przeciągać pliki myszą. Pracę w terminalu opisuje artykuł o terminalu i wierszu poleceń.
Jakie błędy zdarzają się przy FTP i SFTP?
| Problem | Co zwykle znaczy | Co zrobić |
|---|---|---|
| Połączenie odrzucone lub brak odpowiedzi | zły port, usługa nie działa albo zapora blokuje | SFTP używa portu SSH (22), a nie 21; sprawdź adres, port i zaporę |
| Logowanie działa, ale lista plików się nie ładuje (FTP) | problem z drugim połączeniem (dane) za zaporą | spróbuj trybu pasywnego |
Permission denied | brak uprawnień do katalogu lub zły użytkownik | sprawdź użytkownika i uprawnienia katalogu |
| Pomylenie SFTP z FTP | klient FTP nie połączy się z serwerem SFTP i odwrotnie | wybierz w kliencie właściwy protokół, bo to różne protokoły |
| Pliki binarne uszkodzone po transferze (zwykły FTP) | wybrany tryb tekstowy zamiast binarnego (z wiedzy ogólnej, nie testowałem) | używaj trybu binarnego dla archiwów i obrazów |
| Bardzo wolny transfer | tysiące małych plików | spakuj pliki w archiwum |
Przy Permission denied na SFTP zwykle działają te same zasady co w SSH: sprawdź użytkownika i klucze. Opisują je w artykule o SSH i najczęstszych błędach.
Co wybrać dziś do wysyłania plików na serwer i wdrażania aplikacji?
| Sytuacja | Co wybrać |
|---|---|
| Masz dostęp do serwera przez SSH | SFTP z kluczami SSH |
| Hosting daje tylko FTP | FTPS, jeśli dostępny; zwykły FTP w ostateczności |
| Wysyłasz cały projekt jednorazowo | jedno archiwum, a potem rozpakowanie na serwerze |
| Wysyłasz zmiany często i chcesz przesyłać tylko to, co się zmieniło | rsync przez SSH (z wiedzy ogólnej, nie testowałem) |
| Wdrażasz aplikację regularnie i pracujesz w zespole | repozytorium Git na serwerze albo CI/CD, czyli ciągła integracja i dostarczanie |
| Nie masz serwera | zwykły hosting z panelem lub chmura |
Kolejność, w jakiej zwykle dojrzewa sposób wdrażania, wygląda tak: ręczne wysyłanie plików przez SFTP, potem skrypt, a na końcu zautomatyzowany proces, który po każdej zmianie w repozytorium sam buduje, testuje i wdraża aplikację. Taki proces nazywa się CI/CD i unika błędów typu „zapomniałem wysłać jeden plik”. Opisujemy go w osobnym artykule o CI/CD w praktyce, a cały proces wdrożenia pokazujemy w module wdrożenie produkcyjne w chmurze w kursie AI Engineer.
Podsumowanie
- FTP to stary protokół przesyłania plików (RFC 959 z 1985), który nie szyfruje ruchu, więc hasła i dane lecą jawnym tekstem.
- FTPS to FTP z TLS, a SFTP to zupełnie inny protokół, który działa przez SSH na porcie 22 i jest niezgodny z FTP.
- Przeglądarki wycofały FTP w 2021 roku. Nie mam danych o skali jego użycia, ale na nowych serwerach wybierz SFTP.
- Spakuj pliki, wyślij archiwum i rozpakuj na serwerze, bo wysyłanie tysięcy małych plików osobno bywa bardzo wolne.
- Polecenia
tarsprawdziłem lokalnie na danych testowych, asftpopisałem według podręcznika, bez testu na prawdziwym serwerze.


