PuTTY to bezpłatny, wieloplatformowy klient terminalowy (TELNET, SSH, rlogin) rozwijany przez Simona Tathama na licencji MIT. Program emuluje terminal tekstowy i umożliwia łatwe łączenie z serwerami zdalnymi przez szyfrowane i nieszyfrowane protokoły, oferując wygodny interfejs do administracji hostami.

Dzięki prostocie, bezpieczeństwu i wszechstronności PuTTY stał się standardowym narzędziem dla administratorów systemów, programistów i inżynierów sieci. Artykuł wyjaśnia historię, funkcjonalność, konfigurację oraz praktyczne zastosowania PuTTY, ze szczególnym naciskiem na bezpieczne połączenia SSH.

Definicja, historia i geneza PuTTY

PuTTY to klient terminala pozwalający nawiązywać zdalne połączenia z urządzeniami sieciowymi przez wiersz poleceń, co umożliwia wykonywanie komend na serwerach. Projekt stworzył Simon Tatham, brytyjski programista (ur. 1977), absolwent Uniwersytetu Cambridge, związany m.in. z ARM Holdings.

Tatham jest także autorem oryginalnego asemblera Netwide Assembler (NASM) i kolekcji gier logicznych dla jednego gracza (Nintendo DS, Symbian S60, Unix/GTK, Android, macOS, Windows). Pierwsze wydanie PuTTY ukazało się 22 stycznia 1999 r., a od tego czasu program stał się jednym z najpopularniejszych klientów SSH dla Windows oraz Linux/UNIX.

PuTTY obsługuje m.in. TELNET, rlogin, SSH-1 oraz SSH-2. SSH (Secure Shell) to protokół zdalnej administracji w sieciach TCP/IP, domyślnie używający portu 22. Z uwagi na luki bezpieczeństwa w SSH-1, w praktyce stosuje się wyłącznie SSH-2. Program oferuje szyfrowanie m.in. AES, 3DES, Blowfish, DES, zwiększając poufność i integralność transmisji.

PuTTY jest darmowy, open source, dostępny dla Windows i Linux/UNIX. Co istotne, nie wymaga instalacji w tradycyjnym sensie — po pobraniu można go uruchomić i od razu konfigurować połączenie, co świetnie sprawdza się w szybkim dostępie do hostów w heterogenicznych środowiskach IT.

Instalacja i konfiguracja podstawowa PuTTY

Najszybszą i najbezpieczniejszą metodą jest pobranie instalatora z oficjalnej strony producenta. Wejdź na adres https://www.putty.org/ i pobierz wydanie zgodne z Twoim systemem (EXE lub MSI dla Windows).

Przykładowa instalacja w systemie Windows przebiega następująco:

  1. uruchom instalator i kliknij „Next”,
  2. wybierz folder docelowy instalacji lub pozostaw domyślny,
  3. zaznacz komponenty (opcjonalnie „Add shortcut to PuTTY on the Desktop”),
  4. rozpocznij instalację i potwierdź uprawnienia,
  5. po zakończeniu kliknij „Finish”.

PuTTY występuje także w wersji portable, którą można uruchomić bezpośrednio z nośnika USB — to wygodna opcja, gdy łączysz się z różnych komputerów. Po starcie programu zobaczysz okno „PuTTY Configuration”, w którym ustawisz parametry sesji.

Podstawowe protokoły komunikacyjne wspierane przez PuTTY

Poniższa tabela podsumowuje kluczowe protokoły obsługiwane przez PuTTY:

Protokół Szyfrowanie Domyślny port Typowe zastosowanie
SSH (SSH-2) Tak (np. AES) 22 bezpieczna administracja, tunelowanie, SFTP
Telnet Nie 23 starsze systemy, testy, nienależy stosować w Internecie
rlogin Nie 513 zdalne logowanie do systemów Unix/Linux (dziedzictwo)
Raw Nie dowolny debugowanie/testy innych usług (SMTP, HTTP, NNTP)

W nowoczesnych środowiskach standardem jest wyłącznie SSH-2. Pozostałe protokoły są niezabezpieczone i stosuje się je incydentalnie (np. w sieciach odizolowanych).

Konfiguracja połączenia SSH w PuTTY

Podstawową sesję SSH skonfigurujesz w kilku krokach:

  1. przejdź do „Session” i w „Host Name (or IP address)” wpisz domenę lub adres IP serwera,
  2. w polu „Port” ustaw numer portu (domyślnie 22),
  3. zaznacz protokół „SSH”,
  4. w „SSH” ustaw „Preferred SSH Protocol version: 2 only”,
  5. wróć do „Session”, wpisz nazwę w „Saved Sessions” i kliknij „Save”.

Wymuszenie SSH-2 eliminuje słabości legacy SSH-1 i podnosi poziom bezpieczeństwa.

Uwierzytelnianie za pomocą nazwy użytkownika i hasła

Po połączeniu zobaczysz monit „Login”. Podaj nazwę użytkownika (np. „admin”, „root”), a następnie hasło. Wpisywane znaki hasła nie są wyświetlane w terminalu — to celowy mechanizm ochrony. Hasło możesz wkleić prawym przyciskiem myszy.

Po udanym logowaniu otrzymasz prompt, np. user@hostname:~$, i możesz wykonywać komendy. Metoda hasłowa jest prosta, ale mniej bezpieczna w środowiskach produkcyjnych (ryzyko podsłuchu, ataków siłowych).

Zaawansowane uwierzytelnianie za pomocą kluczy SSH (RSA)

Uwierzytelnianie kluczami SSH jest znacząco bezpieczniejsze niż hasłem. Para kluczy składa się z klucza prywatnego (pozostaje u Ciebie) oraz klucza publicznego (umieszczanego na serwerze). Autoryzacja działa asymetrycznie — odszyfrowanie możliwe jest wyłącznie kluczem prywatnym.

Klucza prywatnego nie wolno nikomu udostępniać. Dodatkowo zabezpiecz go hasłem (passphrase), aby chronić go w razie wycieku pliku.

Generowanie i konfiguracja kluczy w Windows z użyciem PuTTYgen wygląda następująco:

  1. uruchom puttygen.exe (np. w C:\Program Files\PuTTY),
  2. wybierz typ klucza „SSH-2 RSA” i długość 2048 lub 4096 bitów,
  3. kliknij „Generate” i poruszaj myszą w polu entropii,
  4. (opcjonalnie) ustaw „Key passphrase” i „Confirm passphrase”,
  5. zapisz klucz publiczny („Save public key”) oraz prywatny w formacie .ppk („Save private key”).

Następnie dodaj klucz publiczny na serwerze do pliku ~/.ssh/authorized_keys. Możesz użyć poniższych poleceń na serwerze (po pierwszym logowaniu hasłem):

mkdir -p ~/.ssh
chmod 700 ~/.ssh
nano ~/.ssh/authorized_keys # wklej tu zawartość klucza publicznego
chmod 600 ~/.ssh/authorized_keys

Aby wskazać klucz prywatny w PuTTY, przejdź do Connection → SSH → Auth i wskaż plik .ppk w „Private key file for authentication”, a następnie zapisz sesję.

Po poprawnym wdrożeniu kluczy logowanie jest wygodniejsze i znacznie trudniejsze do złamania niż w przypadku samych haseł.

Zaawansowana konfiguracja i funkcje PuTTY

PuTTY oferuje szereg funkcji zwiększających bezpieczeństwo, wygodę i elastyczność pracy:

  • Port Forwarding – bezpieczne tunelowanie ruchu przez SSH (ochrona usług dostępnych tylko lokalnie);
  • X11 Forwarding – uruchamianie aplikacji graficznych z serwera i wyświetlanie ich lokalnie;
  • Proxy Support – łączenie przez proxy/ SOCKS w środowiskach korporacyjnych lub z ograniczonym dostępem;
  • Pageant (agent kluczy) – przechowywanie kluczy w pamięci i automatyczne uwierzytelnianie bez podawania passphrase za każdym razem;
  • Session Logging – rejestrowanie przebiegu sesji do pliku (audyt, debugowanie, dokumentacja).

Tunelowanie SSH szyfruje ruch między hostami i pozwala bezpiecznie korzystać z usług niedostępnych publicznie.

Transfer plików przy użyciu PuTTY

Narzędzia dostępne z PuTTY do bezpiecznego transferu plików to:

  • PSCP – narzędzie CLI do kopiowania plików (odpowiednik scp);
  • PSFTP – interaktywny klient SFTP, wygodny do nawigacji po katalogach i zarządzania plikami;
  • WinSCP – graficzny klient SFTP/SCP dla Windows z obsługą drag and drop i integracją sesji PuTTY.

Przykład wysyłki pliku komendą PSCP (z kluczem prywatnym):

pscp -i D:\secure\myprivatekey.ppk C:\web\publish.zip username@server:/home/username/

Jeśli potrzebujesz wskazać port, użyj parametru -P:

pscp -P 22 -i D:\secure\myprivatekey.ppk C:\web\publish.zip username@server:/home/username/

Ważne: wywołanie pscp bez jawnie wskazanego portu w specyficznych konfiguracjach może skutkować próbą połączenia z portem 0. Dodanie -P 22 rozwiązuje problem.

Przykład pobierania pliku z serwera na komputer lokalny:

pscp -i D:\secure\myprivatekey.ppk username@server:/home/username/report.log C:\Users\Me\Desktop\report.log

Praktyczne polecenia systemu Linux dostępne poprzez PuTTY

Poniższa tabela prezentuje najczęściej używane polecenia i ich zastosowanie:

Polecenie Opis Przykład
ls, ls -al lista plików (także ukrytych) z detalami ls -al
cd, cd .. zmiana katalogu / przejście poziom wyżej cd /var/www
pwd wyświetla bieżącą ścieżkę pwd
mkdir, rmdir tworzenie/usuwanie (pustych) katalogów mkdir logs
rm, rm -r usuwanie plików/katalogów rekurencyjnie rm -r backup_old
cp kopiowanie plików/katalogów cp /src/a.txt /dst/a.txt
mv przenoszenie/zmiana nazwy mv stary.txt nowy.txt
touch utworzenie pustego pliku touch ala.txt
cat wyświetlenie zawartości pliku cat /etc/hosts
nano, vi edycja plików w terminalu nano config.php
grep wyszukiwanie wzorca w plikach grep "error" /var/log/syslog
mc (Midnight Commander) tekstowy menedżer plików mc

W terminalu działa autouzupełnianie poleceń klawiszem Tab, co przyspiesza pracę i redukuje literówki.

Utrzymanie aktywności połączenia SSH

Gdy serwer zrywa bezczynne sesje, włącz mechanizm keepalive. W PuTTY ustaw w „Connection” wartość „Seconds between keepalives” (np. 30), a następnie zapisz sesję.

W natywnym kliencie OpenSSH (Linux/macOS) podobny efekt osiągniesz w pliku ~/.ssh/config:

ServerAliveInterval 30
ServerAliveCountMax 2

Zabezpieczenie i wygodne logowanie bez hasła

Pageant (agent kluczy PuTTY) przechowuje klucze prywatne w pamięci i automatycznie je podaje przy połączeniach, eliminując konieczność każdorazowego wpisywania passphrase.

Możesz przygotować prosty skrypt wsadowy Windows, który uruchomi Pageant z kluczem i otworzy PuTTY:

@echo off
cd "C:\Program Files\PuTTY"
start pageant.exe klucz.ppk
start putty.exe
exit

Dostosuj ścieżki do własnej instalacji oraz nazwę pliku klucza.

Zagrożenia bezpieczeństwa i ataki man-in-the-middle (MITM)

Przy pierwszym połączeniu PuTTY poprosi o weryfikację klucza hosta (fingerprint). Zweryfikuj go z administratorem lub w innym zaufanym źródle — to minimalizuje ryzyko MITM.

Komunikat może wyglądać następująco:

The server’s host key is not cached in the registry. You have no guarantee that the server is the computer you think it is. The server’s rsa2 key fingerprint is: ssh-rsa 1024 52:2a:b3:92:a6:88:ca:c0:ff:c2:1b:d1:53:11:fc:4e

Jeśli odcisk się zgadza, kliknij „Yes”, aby zapisać klucz w rejestrze. Zmiana klucza przy kolejnych połączeniach generuje ostrzeżenie — sprawdź ją, bo może oznaczać atak lub zmianę konfiguracji serwera.

Rozwiązywanie problemów i debugowanie połączeń SSH

Najczęstsze kłopoty z połączeniem i ich przyczyny obejmują:

  • Connection refused – na porcie nie nasłuchuje usługa SSH (sprawdź uruchomienie i port, domyślnie 22);
  • Timeout – filtracja w zaporze, błędne trasy lub problemy sieciowe (zweryfikuj firewall/ACL/VPN);
  • Authentication failed – błędne dane logowania lub brak klucza w authorized_keys (sprawdź uprawnienia plików i poprawność klucza).

Do diagnozy włącz logowanie/verbose w ustawieniach SSH w PuTTY, aby zobaczyć szczegółowy przebieg wymiany i ustalić etap, na którym występuje błąd.

Porównanie PuTTY z innymi narzędziami i protokołami

SSH z PuTTY to złoty standard bezpiecznego dostępu zdalnego. Telnet i rlogin nie szyfrują ruchu, dlatego nie powinny być używane w niezaufanych sieciach. SFTP (w ramach SSH) zastępuje niezabezpieczony FTP.

W Windows dostępny jest również OpenSSH (PowerShell/CMD). Popularne alternatywy to KiTTY (fork PuTTY z dodatkami) czy MobaXterm (rozbudowany emulator terminala). PuTTY pozostaje jednak wyborem domyślnym dzięki prostocie, bezpłatności i stabilności.

Zaawansowana konfiguracja tunelowania SSH

Lokalne tunelowanie (Local Port Forwarding) mapuje lokalny port na usługę po stronie zdalnej. Konfiguracja w PuTTY przebiega tak:

  1. załaduj sesję i przejdź do Connection → SSH → Tunnels,
  2. w „Source port” wpisz port lokalny (np. 8080),
  3. w „Destination” podaj host:port po stronie zdalnej (np. localhost:8080),
  4. zaznacz „Local” i kliknij „Add”,
  5. połącz się i używaj lokalnego portu (np. http://localhost:8080).

Zdalne tunelowanie (Remote Port Forwarding) udostępnia usługę lokalną przez serwer zdalny, co bywa przydatne przy ekspozycji lokalnego środowiska przez publiczny punkt dostępu.

Stosowanie PuTTY w praktyce

PuTTY sprawdza się w administracji serwerami WWW, zarządzaniu systemami Linux, pracy deweloperskiej i debugowaniu usług działających na hostach zdalnych. Administratorzy instalują oprogramowanie, edytują konfiguracje i automatyzują zadania. Programiści testują i diagnozują aplikacje na serwerach. Inżynierowie sieci konfigurują urządzenia przez SSH.

W projektach WordPress i e‑commerce SSH zapewnia bezpieczny dostęp do plików (np. wp-content), automatyzację wdrożeń oraz szybkie operacje na serwerze bezpośrednio z terminala lub poprzez powiązane narzędzia.