Komunikat Błąd podczas wykonywania programu (kod błędu 29) w programie Total Commander pojawia się w momencie, gdy klient próbuje nawiązać połączenie transmisji danych w trybie aktywnym (polecenie PORT), a router z translacją adresów NAT lub zapora sieciowa blokuje przychodzący pakiet z serwera. Choć błąd ten towarzyszy administratorom od dekad, jego techniczna przyczyna jest bardzo precyzyjna i bezpośrednio związana z architekturą protokołu FTP.
Poniżej omawiam architekturę błędu 29, procedurę szybkiej naprawy w Total Commanderze, konfigurację zapory oraz niezbędną migrację na bezpieczny protokół SFTP z kluczami SSH.
Dlaczego Total Commander zgłasza błąd 29: tryb aktywny (PORT) vs pasywny (PASV)
Klasyczny protokół FTP (RFC 959) wykorzystuje dwa oddzielne kanały komunikacyjne:
- Kanał kontrolny (Control Connection): Zwykle na porcie 21 serwera, służący do przesyłania poleceń (USER, PASS, LIST, RETR, STOR) i odbierania kodów odpowiedzi.
- Kanał danych (Data Connection): Odrębne połączenie TCP, przez które przesyłany jest listing katalogów oraz sama zawartość plików.
Różnica między trybem aktywnym a pasywnym decyduje o tym, która strona inicjuje połączenie dla kanału danych:
TRYB AKTYWNY (PORT) - Podatny na błąd 29:
Klient:21 ---> Serwer:21 [Kanał poleceń]
Klient <--- Serwer:20 [Kanał danych: Serwer łączy się z portem Klienta]
^ Router NAT / Firewall blokuje pakiet przychodzący!
TRYB PASYWNY (PASV) - Prawidłowe rozwiązanie:
Klient:21 ---> Serwer:21 [Kanał poleceń]
Klient ---> Serwer:50234 [Kanał danych: Klient łączy się z portem Serwera]
^ Dozwolony ruch wychodzący przez NAT!Jak powstaje błąd 29
Gdy w Total Commanderze wyłączony jest tryb pasywny, program działa w trybie aktywnym. Po uwierzytelnieniu klient wysyła do serwera polecenie PORT h1,h2,h3,h4,p1,p2, podając swój lokalny adres IP oraz losowy port, na którym nasłuchuje na dane z serwera.
W nowoczesnych sieciach domowych i biurowych komputer znajduje się za routerem NAT. Klient podaje serwerowi swój prywatny adres IP (np. 192.168.1.50), do którego serwer internetowy nie ma bezpośredniego dostępu. Nawet jeśli router obsługuje algorytm FTP ALG (Application Layer Gateway) i podmieni adres na publiczny, lokalny firewall w systemie Windows lub filtr stanowy routera odrzuci niesprowokowane połączenie przychodzące z portu 20 serwera. Po przekroczeniu limitu czasu (timeout) na gnieździe danych Total Commander zwraca błąd 29.
Jak naprawić błąd 29 w Total Commanderze krok po kroku
W większości przypadków rozwiązaniem jest wymuszenie trybu pasywnego dla danego profilu połączenia.
Krok 1: Włączenie trybu pasywnego (PASV)
- Uruchom Total Commander i naciśnij skrót Ctrl+F (lub wybierz z menu głównego: Sieć > FTP Połączenie).
- Na liście zdefiniowanych połączeń wskaż serwer sprawiający problemy i kliknij przycisk Edytuj.
- W oknie konfiguracji odszukaj pole wyboru: Użyj trybu pasywnego do transferu (jak przeglądarka WWW) (ang. Use passive mode for transfers).
- Zaznacz tę opcję.
- Kliknij OK, a następnie połącz się ponownie z serwerem.
W trybie pasywnym klient wysyła do serwera polecenie PASV. W odpowiedzi serwer otwiera losowy port ze zdefiniowanej puli portów pasywnych i odsyła jego numer. Następnie Total Commander sam wykonuje połączenie wychodzące na ten port. Ponieważ ruch wychodzący jest standardowo przepuszczany przez routery i zapory stanowe, transfer danych dochodzi do skutku bez przeszkód.
Krok 2: Sprawdzenie zapory sieciowej Windows Defender
Jeśli błąd występuje nadal pomimo włączenia trybu pasywnego, zapora systemowa może blokować sam proces Total Commandera:
- Otwórz Panel sterowania > System i zabezpieczenia > Zapora Windows Defender.
- Wybierz Zezwalaj aplikacji lub funkcji na dostęp przez Zaporę Windows Defender.
- Sprawdź, czy na liście znajduje się plik
TOTALCMD.EXE(lubTOTALCMD64.EXE). - Upewnij się, że zaznaczone są flagi dla sieci Prywatnej oraz Publicznej.
- Jeśli programu nie ma na liście, kliknij Zezwalaj na dostęp innej aplikacji i wskaż ścieżkę instalacyjną Total Commandera (domyślnie
C:\totalcmd\totalcmd64.exe).
Krok 3: Konfiguracja serwera (dla administratorów VPS i dedyków)
Jeżeli zarządzasz własnym serwerem FTP (np. vsftpd lub ProFTPD pod Linuksem) i żaden klient nie może połączyć się w trybie PASV, problem leży w konfiguracji puli portów pasywnych na serwerze.
W pliku /etc/vsftpd.conf upewnij się, że zdefiniowano zakres portów oraz zewnętrzny adres IP:
pasv_enable=YES
pasv_min_port=50000
pasv_max_port=50100
pasv_address=TWÓJ_PUBLICZNY_IP_SERWERANastępnie otwórz ten zakres w zaporze sieciowej serwera (np. UFW):
sudo ufw allow 21/tcp
sudo ufw allow 50000:50100/tcp
sudo systemctl restart vsftpdJak sprawdzić w logu FTP Total Commandera przyczynę błędu 29
Zanim zmienisz ustawienia zapory, sprawdź w logu, na którym poleceniu sesja się zatrzymuje. Total Commander pokazuje przebieg sesji w oknie logu na pasku FTP, a do pliku zapisuje go klucz LogFile w sekcji [General] pliku wcx_ftp.ini, na przykład LogFile=c:\Path\Log.txt (TotalcmdWiki, wcx_ftp.ini). Zapis logu do pliku istnieje od wersji 3.51 z 1998 roku (historia zmian Total Commandera).
W logu szukaj dwóch wzorców opisanych w RFC 959:
- Po poleceniu
PORTserwer odpowiada kodem200, ale przyLISTlubRETRpojawia się425 Can't open data connectionalbo upływa limit czasu. To obraz trybu aktywnego zablokowanego przez NAT lub zaporę. - Po poleceniu
PASVserwer odpowiada227 Entering Passive Mode (h1,h2,h3,h4,p1,p2). Pierwsze cztery liczby to adres, pod który klient ma się połączyć. Jeśli stoi tam adres prywatny,127.0.0.1albo0.0.0.0, błąd leży po stronie serwera: brakuje mu ustawienia w rodzajupasv_addressz kroku 3.
Nowsze wersje Total Commandera omijają część takich błędów same. Według historii zmian program od lipca 2020 roku łączy się z serwerem, który w odpowiedzi na PASV podaje adres 0.0.0.0, a od marca 2025 roku obsługuje serwery zgłaszające 127.0.0.1 zamiast prawdziwego adresu. We wrześniu 2016 roku usunięto też nieskończone ponawianie prób, gdy zawodzą oba tryby, PASV i PORT, z powodu złej konfiguracji serwera. Jeśli log pokazuje dziwny adres w odpowiedzi 227, a zainstalowana wersja jest stara, aktualizacja programu bywa szybsza niż czekanie na administratora serwera.
Aby każde nowe połączenie od razu korzystało z trybu pasywnego, ustaw w sekcji [default] klucz pasvmode=1. Dla połączeń, które router często zrywa, wiki opisuje klucz TcpKeepAlive=1 w sekcji [General], włączający TCP keep-alive dla wszystkich połączeń.
Dlaczego klasyczny FTP to krytyczne ryzyko bezpieczeństwa
Naprawa błędu 29 pozwala odzyskać łączność, ale pozostawanie przy protokole FTP stwarza poważne zagrożenia dla integralności serwisów internetowych.
ZAGROŻENIA NIESZYFROWANEGO PROTOKOŁU FTP:
+-------------------------------------------------------------------+
| 1. Transmisja poświadczeń w plaintext (port 21) |
| - Login i hasło widoczne dla każdego węzła pośredniczącego |
+-------------------------------------------------------------------+
| 2. Podatność pliku wcx_ftp.ini na infostealery |
| - Słabe szyfrowanie lokalne Total Commandera |
+-------------------------------------------------------------------+
| 3. Brak atomowości transferu plików |
| - Zerwanie sesji niszczy pliki PHP i powoduje White Screen |
+-------------------------------------------------------------------+
| 4. Brak sum kontrolnych i weryfikacji integralności |
| - Ryzyko cichego uszkodzenia plików binarnych |
+-------------------------------------------------------------------+1. Przesyłanie haseł jawnym tekstem
Protokół FTP nie szyfruje ani kanału kontrolnego, ani kanału danych. Każdy pakiet przechodzący przez sieć lokalną, dostawcę internetu lub węzły tranzytowe może zostać przechwycony przez prosty sniffer sieciowy (np. Wireshark). Twoje hasło dostępowe do serwera produkcyjnego jest przekazywane jako otwarty tekst.
2. Kradzież poświadczeń z pliku wcx_ftp.ini
Total Commander przechowuje konfigurację sesji FTP w pliku wcx_ftp.ini. Bez hasła głównego hasła zapisywane w tym pliku są jedynie zamaskowane, a nie zaszyfrowane. Słabość jest udokumentowana jako CVE-2005-4066, a odczyt pliku jest zautomatyzowany: framework Metasploit zawiera moduł Windows Gather Total Commander Saved Password Extraction, który znajduje zapisane połączenia w wcx_ftp.ini i wyciąga z nich hasła (Rapid7).
3. Ryzyko awarii i błędu 500 (White Screen of Death)
Gdy wgrywasz na serwer zaktualizowany plik motywu lub wtyczki (functions.php, class-core.php), transfer FTP nadpisuje plik blok po bloku. Jeśli połączenie zostanie zerwane w połowie transferu, na serwerze pozostaje niekompletny, uszkodzony kod PHP, co natychmiast unieruchamia całą witrynę z błędem krytycznym 500.
Jak zabezpieczyć hasła FTP w Total Commanderze hasłem głównym
TotalcmdWiki opisuje pole password w sekcjach połączeń pliku wcx_ftp.ini jako hasło zamaskowane, nie zaszyfrowane (TotalcmdWiki). Baza NVD opisuje ten sam problem jako CVE-2005-4066: Total Commander 6.53 zapisywał loginy i hasła FTP ze słabym szyfrowaniem, które lokalny użytkownik może odwrócić.
Odpowiedzią producenta jest hasło główne (master password). Prace nad nim odnotowano w historii zmian w lutym 2008 roku, a funkcja trafiła do wersji 7.50, wydanej we wrześniu 2009 roku. Historia zmian nazywa ten mechanizm wprost szyfrowaniem AES z hasłem głównym (historia zmian).
Włączenie zajmuje minutę:
- Naciśnij Ctrl+F, wybierz połączenie i kliknij Edytuj.
- Zaznacz pole Encrypt with master password (w polskiej wersji interfejsu: szyfrowanie hasłem głównym).
- Ustal hasło główne. Program poprosi o nie raz w sesji, przy pierwszym połączeniu z serwerem, którego hasło jest nim chronione.
Kilka zachowań warto znać przed wdrożeniem w zespole. Od czerwca 2022 roku Total Commander czyści hasła aktywnych połączeń FTP po zminimalizowaniu okna lub uruchomieniu wygaszacza ekranu, tak samo jak hasło główne. Klucz KeepMasterPassword w sekcji [General] pozwala zachować hasło główne po minimalizacji (1), przy wygaszaczu (2) lub w obu sytuacjach (3). Od czerwca 2020 roku program może przechować hasło główne za pomocą Windows Hello do zamknięcia Total Commandera, więc ponowne połączenie wymaga odcisku palca, twarzy lub PIN-u.
Hasło główne chroni plik na dysku, ale nie zmienia protokołu. Login i hasło nadal płyną jawnym tekstem przez port 21, jeśli połączenie używa zwykłego FTP.
Jak połączyć się przez FTPS w Total Commanderze
Wbudowany klient FTP Total Commandera obsługuje FTPS, czyli FTP przez SSL/TLS. To krok pośredni dla serwerów, które nie udostępniają SSH, a oferują FTP z szyfrowaniem.
Od września 2016 roku program nawiązuje połączenia FTPS bez bibliotek OpenSSL, przez systemowe funkcje sChannel z Secur32.dll. Ta sama zmiana dodała obsługę TLS 1.1 i TLS 1.2 oraz zapis wynegocjowanej wersji protokołu w logu połączenia. Gdy w oknie połączenia zaznaczysz opcję SSL/TLS, program sam zaznacza tryb pasywny, bo FTPS nie działa w trybie aktywnym (historia zmian). Po stronie klienta błąd 29 znika więc razem z przejściem na FTPS. Po stronie serwera pula portów pasywnych nadal musi być otwarta w zaporze, tak jak w kroku 3.
Dwie opcje dla bardziej wymagających środowisk:
- Certyfikat klienta: od kwietnia 2018 roku Total Commander używa przy FTPS certyfikatów klienta z magazynu certyfikatów Windows. Działa to tylko przez sChannel, nie przez OpenSSL.
- OpenSSL 3: od marca 2022 roku można użyć bibliotek OpenSSL 3.0 z curl.se. Pliki
libssl-3.dllilibcrypto-3.dll(dla wersji 64-bitowejlibssl-3-x64.dllilibcrypto-3-x64.dll) trafiają do katalogu programu, a nie do podkatalogu 64. Gdy dostępne są obie metody, kluczPreferOpenSSLwwcx_ftp.iniwybiera między sChannel a OpenSSL.
FTPS zachowuje dwa kanały i pulę portów pasywnych na zaporze. SFTP z następnej sekcji używa jednego połączenia na porcie 22, dlatego przy serwerach z dostępem SSH jest prostszy w utrzymaniu.
Jak użyć wtyczki SFTP w Total Commanderze
Jeśli interfejs dwupanelowy Total Commandera jest Twoim podstawowym narzędziem pracy, nie musisz z niego rezygnować. Wystarczy zamienić niebezpieczny FTP na w pełni szyfrowany protokół SFTP (SSH File Transfer Protocol).
Jak zainstalować i skonfigurować wtyczkę SFTP
- Pobierz oficjalną wtyczkę SFTP plugin for Total Commander ze strony
ghisler.com(autor: Christian Ghisler). - Otwórz pobrane archiwum
.zipbezpośrednio w Total Commanderze. Program rozpozna wtyczkę i zapyta: Czy chcesz zainstalować tę wtyczkę? Wybierz Tak. - Wejdź w Otoczenie sieciowe (przycisk wyboru dysków:
\). - Otwórz folder Secure FTP.
- Naciśnij klawisz F7, aby utworzyć nowe połączenie.
- Wprowadź nazwę serwera, nazwę hosta (adres IP lub domenę), port (standardowo 22) oraz nazwę użytkownika.
Jak skonfigurować logowanie kluczem SSH
Zamiast wpisywać hasło, skonfiguruj uwierzytelnianie kluczem kryptograficznym:
- W ustawieniach połączenia wskaż plik klucza prywatnego w formacie OpenSSH. Plik readme wtyczki zaznacza, że klucze podawane bezpośrednio muszą być w tym formacie (readme wtyczki SFTP).
- Klucz w formacie PuTTY (
.ppk) wtyczka przyjmuje przez program Pageant. Pageant może uruchamiać się automatycznie, jeśli w katalogu wtyczki umieścisz skrótpageant.lnkwskazujący napageant.exez nazwą pliku klucza jako parametrem. - Klucz
.ppkmożna też przekonwertować w puttygen: wczytaj klucz, a następnie wybierz Conversions > Export OpenSSH key. Readme ostrzega przed przyciskiem Save public key, bo tworzy on klucz publiczny w formacie niezgodnym z OpenSSH. Klucz publiczny skopiuj z pola Public key for pasting into OpenSSH authorized_keys file. - Połączenie SFTP szyfruje zarówno logowanie, jak i przesyłane pliki, więc hasło nie płynie przez sieć jawnym tekstem.
Wtyczka w wersji 3.10 z lipca 2026 roku działa na Windows od Vista do 11 z systemową biblioteką sChannel, bez dodatkowych DLL. Obsługuje też serwery tylko z SCP, połączenia przez proxy HTTP z poleceniem CONNECT oraz keep-alive. Preferowane algorytmy (wymiana kluczy, klucz hosta, szyfr, MAC, kompresja) ustawisz dla każdego połączenia w pliku sftpplug.ini kluczami prefmethod0 do prefmethod7, na przykład prefmethod0=curve25519-sha256.
Jak porównać protokoły transferu plików FTP i SFTP
Poniższa tabela przedstawia zestawienie parametrów technicznych i poziomu bezpieczeństwa dla poszczególnych metod przesyłania plików na serwer:
| Parametr | FTP (Aktywny) | FTP (Pasywny) | FTPS (FTP over TLS) | SFTP (SSH) | Git + CI/CD |
|---|---|---|---|---|---|
| Port domyślny | 21 + 20 | 21 + pula PASV | 21 + pula PASV | 22 | 443 / 22 |
| Szyfrowanie poświadczeń | Brak (jawny tekst) | Brak (jawny tekst) | Tak (TLS 1.2/1.3) | Tak (SSHv2) | Tak (HTTPS/SSH) |
| Szyfrowanie danych | Brak | Brak | Tak | Tak | Tak |
| Zgodność z NAT / firewallem | Bardzo niska (Błąd 29) | Wysoka | Średnia (wymaga TLS reuse) | Bardzo wysoka | Najwyższa |
| Podatność na błąd 29 | Bardzo wysoka | Wyeliminowana | Wyeliminowana | Wyeliminowana | Nie dotyczy |
| Atomowość wdrożenia | Brak | Brak | Brak | Opcjonalnie (symlinki) | Pełna (Zero-Downtime) |
| Zalecane do produkcji | Nie (przestarzały) | Nie (przestarzały) | Dozwolone tymczasowo | Tak (do zarządzania) | Standard inżynieryjny |
Jak przejść z FTP na wdrożenia CI/CD
W nowoczesnych środowiskach produkcyjnych ręczne wgrywanie plików przez menedżer plików jest zastępowane zautomatyzowanym procesem wdrożeniowym.
Jak działa wdrożenie atomowe bez przestoju
Zamiast modyfikować pliki bezpośrednio w katalogu public_html, wdrożenie atomowe przygotowuje nową wersję w osobnym katalogu wydań, a następnie błyskawicznie przepina dowiązanie symboliczne:
/var/www/mojastrona/
|-- current -> /var/www/mojastrona/releases/2026-09-21-1200/ [Dowiązanie symboliczne]
|-- releases/
| |-- 2026-09-20-0930/ [Poprzednie wydanie]
| `-- 2026-09-21-1200/ [Nowe, w pełni zbudowane wydanie]
`-- shared/
|-- wp-config.php [Współdzielona konfiguracja]
`-- wp-content/uploads/ [Współdzielone media]Zalety tego rozwiązania:
- Brak przestoju: Przełączenie dowiązania symbolicznego
ln -nfszajmuje kilka milisekund. - Bezpieczeństwo: Jeśli instalacja zależności Composer lub budowanie assetów nie powiedzie się, symlink nie zostanie przełączony, a strona pozostaje w pełni sprawna na poprzednim wydaniu.
- Błyskawiczny rollback: Powrót do poprzedniej wersji w razie wykrycia błędu wymaga jedynie jednej komendy przepinającej symlink wstecz.
Automatyzacja wdrożeń z użyciem Gita eliminuje potrzebę otwierania portów FTP, chroni kod źródłowy przed przypadkowym nadpisaniem i zapewnia pełną historię każdej wprowadzonej zmiany.
Jakie pytania o błąd 29 FTP pojawiają się najczęściej
Czym jest błąd 29 w Total Commanderze
Błąd 29 oznacza niepowodzenie otwarcia gniazda transmisji danych w trybie aktywnym (polecenie PORT). Występuje wtedy, gdy serwer FTP próbuje nawiązać połączenie zwrotne z komputerem użytkownika, ale router z NAT lub zapora sieciowa blokuje ten przychodzący pakiet.
Czy tryb pasywny spowalnia transfer plików
Nie. Tryb pasywny zmienia jedynie stronę inicjującą połączenie TCP dla kanału danych (inicjuje je klient, a nie serwer). Po ustanowieniu sesji prędkość przesyłania danych jest identyczna jak w trybie aktywnym.
Total Commander nie łączy się przez SFTP na porcie 22 w oknie FTP
Wbudowany moduł FTP w Total Commanderze obsługuje wyłącznie protokoły FTP oraz FTPS (FTP over TLS). SFTP to zupełnie inny protokół oparty na podsystemie SSH. Aby połączyć się przez port 22, należy zainstalować dodatkową wtyczkę SFTP ze strony producenta.
Gdzie Total Commander przechowuje hasła FTP
Domyślnie Total Commander przechowuje definicje połączeń i zakodowane hasła w pliku wcx_ftp.ini, zlokalizowanym w katalogu %APPDATA%\GHISLER\ lub w folderze instalacyjnym programu. Bez hasła głównego hasła te są tylko zamaskowane i narzędzia takie jak moduł Metasploit odczytują je automatycznie. Z hasłem głównym są szyfrowane AES.
FileZilla czy Total Commander do FTP
FileZilla domyślnie wymusza tryb pasywny i posiada natywną obsługę SFTP bez konieczności instalowania wtyczek. Jeśli jednak wolisz dwupanelowy interfejs Total Commandera, wystarczy zainstalować wtyczkę SFTP i korzystać z kluczy SSH.
Rozwiązanie problemów z transferem plików i porzucenie przestarzałego protokołu FTP na rzecz bezpiecznych procedur wdrożeniowych to elementarne zadanie w utrzymaniu stabilnej infrastruktury. Jeśli planujesz uporządkować środowisko serwerowe lub wdrożyć bezpieczny potok CI/CD, sprawdź moją ofertę programisty WordPress.







