 Autor: [Monika Wojciechowska](/autorzy/monika-wojciechowska) Specjalistka SEO i treści webowych · Zweryfikowano Kwiecień 2026

1.  [Strona główna](/) ›
2.  [Baza wiedzy](/baza-wiedzy/) ›
3.  SSH tunneling i port forwarding

# SSH tunneling i port forwarding — przewodnik praktyczny

Opublikowano: 9 kwietnia 2026 · Kategoria: VPS / Bezpieczeństwo

SSH to nie tylko narzędzie do logowania na serwer — to potężny system tunelowania, który pozwala bezpiecznie uzyskać dostęp do baz danych, ekspozować lokalne aplikacje przez publiczny serwer, tworzyć prywatne proxy SOCKS i przeskakiwać przez serwery pośrednie (bastion). Wszystko za pomocą jednej komendy.

## Czym jest SSH tunnel?

SSH tunnel (port forwarding) to mechanizm przekierowania ruchu TCP przez zaszyfrowane połączenie SSH. Zamiast otwierać port w firewallu, tworzysz "prywatny kanał" przez SSH — dostępny tylko dla uwierzytelnionego użytkownika. Trzy główne rodzaje:

-   **Local (-L)** — lokalny port → zdalny zasób. Ty korzystasz z czegoś na serwerze.
-   **Remote (-R)** — port serwera → Twój lokalny zasób. Serwer udostępnia Twój zasób światu.
-   **Dynamic (-D)** — lokalny proxy SOCKS5. Wszystkie żądania przez proxy wychodzą z serwera.

## Local port forwarding (-L) — dostęp do bazy danych przez tunel

Najczęstszy przypadek użycia: bezpieczny dostęp do MySQL lub PostgreSQL na VPS bez otwierania portu 3306/5432 w firewallu.

\# Składnia: ssh -L \[lokalny\_port\]:\[host\_docelowy\]:\[port\_docelowy\] \[user@serwer\]

# Dostęp do MySQL na VPS — tunel na localhost:3306
ssh -L 3306:localhost:3306 -N user@twoj-vps.pl
# -N = nie uruchamiaj powłoki, tylko tunel

# Teraz w nowym terminalu:
mysql -h 127.0.0.1 -P 3306 -u root -p
# Łączysz się z MySQL na VPS przez zaszyfrowany tunel SSH!

# Dostęp do PostgreSQL
ssh -L 5432:localhost:5432 -N user@twoj-vps.pl
psql -h 127.0.0.1 -p 5432 -U postgres

# Dostęp do panelu adminer na porcie 8080 VPS
ssh -L 8080:localhost:8080 -N user@twoj-vps.pl
# Otwórz http://localhost:8080 w przeglądarce

# Dostęp do usługi w sieci prywatnej VPS (nie na samym serwerze)
# np. Redis na 10.0.0.5:6379 dostępnym tylko z VPS
ssh -L 6379:10.0.0.5:6379 -N user@twoj-vps.pl

**Tip bezpieczeństwa:** Zamiast otwierać port 3306 w firewallu (i narażać bazę na internet), zablokuj port i używaj tunelu SSH. MySQL Workbench, DBeaver i pgAdmin mają wbudowaną opcję "SSH tunnel" — automatycznie tworzą tunel przy połączeniu.

## Remote port forwarding (-R) — ekspozycja lokalnej aplikacji

Remote forwarding działa odwrotnie: udostępnia Twoją lokalną aplikację przez publiczny serwer. Użyteczne gdy Twój komputer jest za NATem (router domowy bez publicznego IP) i chcesz pokazać działającą aplikację klientowi lub współpracownikom.

\# Składnia: ssh -R \[port\_na\_serwerze\]:\[lokalny\_host\]:\[lokalny\_port\] \[user@serwer\]

# Udostępnij lokalną aplikację na porcie 3000 przez serwer na porcie 8080
ssh -R 8080:localhost:3000 -N user@twoj-vps.pl
# Teraz ktoś wchodząc na http://twoj-vps.pl:8080 widzi Twoją lokalną aplikację!

# Aplikacja na localhost:5000 dostępna przez serwer na porcie 9090
ssh -R 9090:localhost:5000 -N user@twoj-vps.pl

# WAŻNE: domyślnie -R binduje na 127.0.0.1 serwera (tylko loopback)
# Aby zezwolić na połączenia z zewnątrz, wymagane jest w /etc/ssh/sshd\_config na serwerze:
# GatewayPorts yes
# Po zmianie: sudo systemctl reload sshd

## Dynamic SOCKS proxy (-D) — prywatny VPN przez SSH

Opcja `-D` tworzy dynamiczny proxy SOCKS5 na lokalnym porcie. Wszystkie połączenia kierowane przez ten proxy wychodzą z adresu IP serwera SSH — idealne do bezpiecznego przeglądania przez niezaufaną sieć (kawiarnia, hotel):

\# Utwórz lokalny proxy SOCKS5 na porcie 1080
ssh -D 1080 -N user@twoj-vps.pl

# W Chrome/Firefox:
# Ustawienia → Proxy → SOCKS Host: 127.0.0.1, Port: 1080, SOCKS5
# Lub uruchom Chrome z argumentem:
google-chrome --proxy-server="socks5://127.0.0.1:1080"

# curl przez SOCKS proxy
curl --socks5 127.0.0.1:1080 https://api.example.com/

# Sprawdź swoje zewnętrzne IP (powinien pokazać IP serwera, nie Twoje)
curl --socks5 127.0.0.1:1080 https://api.ipify.org

## ProxyJump (-J) — przeskakiwanie przez bastion host

Bastion host (jump server) to pośredni serwer przez który łączysz się z serwerami w prywatnej sieci. ProxyJump upraszcza to do jednej komendy:

\# Połącz się z prywatnym serwerem (10.0.0.20) przez bastion (bastion.example.com)
ssh -J user@bastion.example.com user@10.0.0.20

# Wielostopniowy (przez dwa bastion hosty)
ssh -J user@bastion1.example.com,user@bastion2.example.com user@10.0.0.20

# Kopiuj plik przez bastion na prywatny serwer
scp -J user@bastion.example.com plik.tar.gz user@10.0.0.20:/tmp/

## ~/.ssh/config — skróty dla częstych tuneli

Zamiast wpisywać długie komendy, zapisz konfigurację w `~/.ssh/config`:

\# ~/.ssh/config

# Prosty alias dla VPS
Host myvps
    HostName twoj-vps.pl
    User ubuntu
    IdentityFile ~/.ssh/id\_rsa
    ServerAliveInterval 30
    ServerAliveCountMax 3

# VPS z automatycznym tunelem do MySQL
Host vps-db
    HostName twoj-vps.pl
    User ubuntu
    IdentityFile ~/.ssh/id\_rsa
    LocalForward 3306 localhost:3306
    LocalForward 6379 localhost:6379

# Połączenie przez bastion
Host backend-server
    HostName 10.0.0.20
    User ubuntu
    ProxyJump ubuntu@bastion.example.com
    IdentityFile ~/.ssh/id\_rsa

\# Teraz zamiast długiej komendy:
# ssh -L 3306:localhost:3306 -L 6379:localhost:6379 -N ubuntu@twoj-vps.pl

# Wystarczy:
ssh vps-db

# Połączenie z backend przez bastion:
ssh backend-server

## autossh — trwałe tunele, które się auto-restartują

Zwykłe tunele SSH zrywają się przy chwilowej utracie sieci. `autossh` monitoruje połączenie i automatycznie je restartuje:

\# Instalacja
sudo apt install autossh -y

# Trwały tunel do MySQL z auto-restartem
autossh \\
    -M 0 \\
    -o "ServerAliveInterval 30" \\
    -o "ServerAliveCountMax 3" \\
    -o "ExitOnForwardFailure yes" \\
    -L 3306:localhost:3306 \\
    -N ubuntu@twoj-vps.pl

# -M 0: wyłącz wbudowany monitoring autossh, używaj keepalive SSH

\# Utwórz usługę systemd dla autossh (startuje przy boot)
sudo tee /etc/systemd/system/ssh-tunnel-db.service <<'EOF'
\[Unit\]
Description=SSH Tunnel to VPS MySQL
After=network.target

\[Service\]
User=ubuntu
ExecStart=/usr/bin/autossh -M 0 \\
    -o "ServerAliveInterval 30" \\
    -o "ServerAliveCountMax 3" \\
    -o "ExitOnForwardFailure yes" \\
    -L 3306:localhost:3306 \\
    -N ubuntu@twoj-vps.pl
Restart=always
RestartSec=10

\[Install\]
WantedBy=multi-user.target
EOF

sudo systemctl enable --now ssh-tunnel-db
sudo systemctl status ssh-tunnel-db

## Podsumowanie — kiedy używać każdego rodzaju tunelu

Flaga

Kierunek

Przykład użycia

`-L`

Lokalny → Serwer

Dostęp do MySQL/PostgreSQL/Redis na VPS bez otwierania portu w firewallu

`-R`

Serwer → Lokalny

Pokazanie lokalnej aplikacji dev klientowi przez publiczny serwer

`-D`

Proxy SOCKS5

Bezpieczne przeglądanie przez niezaufaną sieć, obejście geoblokady

`-J`

ProxyJump

Dostęp do serwerów w sieci prywatnej przez bastion host

## Najczęstsze pytania

Do czego służy SSH local port forwarding (-L)? +

SSH local port forwarding (-L) tworzy tunel z lokalnego portu na Twoim komputerze do portu na zdalnym serwerze lub sieci dostępnej z tego serwera. Przykład: ssh -L 3306:localhost:3306 user@vps — po połączeniu możesz w MySQL Workbench podłączyć się do localhost:3306, a połączenie jest tunelowane przez SSH do MySQL na VPS. Serwer MySQL nie musi być dostępny z internetu (port 3306 może być zamknięty w firewallu) — wystarczy dostęp SSH.

Czym różni się -L od -R w SSH tunnelingu? +

\-L (local forwarding): lokalny port → port na zdalnym serwerze. Ty inicjujesz połączenie, dostęp do zasobu na serwerze. Przykład: dostęp do bazy danych na VPS z lokalnego komputera. -R (remote forwarding): port na zdalnym serwerze → port na Twoim komputerze. Serwer inicjuje połączenie z powrotem do Ciebie. Przykład: udostępnienie lokalnej aplikacji na porcie 3000 przez publiczny serwer — ktoś łączy się z vps:8080 i widzi Twoją lokalną aplikację. -R jest użyteczne gdy Twój komputer jest za NATem (router domowy) i nie ma publicznego IP.

Czy SSH SOCKS proxy (-D) to to samo co VPN? +

SSH SOCKS proxy (-D) działa podobnie do VPN ale nie jest tym samym. SSH -D 1080 tworzy lokalny proxy SOCKS5 — musisz skonfigurować aplikację (przeglądarkę, curl) aby korzystała z tego proxy. VPN przekierowuje CAŁY ruch systemowy automatycznie. SSH -D: mniejszy narzut, działa natychmiast, nie wymaga instalacji serwera VPN, ale tylko dla aplikacji obsługujących SOCKS5. VPN: automatyczny, systemowy, wymaga serwera (WireGuard, OpenVPN). Dla sporadycznego bezpiecznego przeglądania lub obejścia blokady geograficznej: SSH -D jest prostszy. Dla stałego szyfrowanego ruchu: VPN.

Jak utrzymać trwały tunel SSH (autossh)? +

Autossh monitoruje połączenie SSH i automatycznie je restartuje gdy zniknie. Instalacja: sudo apt install autossh. Użycie: autossh -M 0 -o "ServerAliveInterval 30" -o "ServerAliveCountMax 3" -L 3306:localhost:3306 -N user@vps. Opcja -M 0 wyłącza wbudowany monitoring autossh (zamiast tego używa ServerAliveInterval SSH). Aby tunel startował automatycznie po restarcie systemu: utwórz usługę systemd z ExecStart=autossh ... lub dodaj do ~/.ssh/config z odpowiednimi opcjami. Alternatywa: ratnika jak sshuttle lub narzędzia do tunelowania jak bore.pub dla jednorazowych sesji.

## Sprawdź oferty pasujące do tego scenariusza

Poniżej masz szybkie przejścia do ofert i stron z kodami rabatowymi tam, gdzie są dostępne.

Contabo

VPS jako bastion host — SSH gateway do bezpiecznego dostępu do infrastruktury

Bastion Host

[Aktywuj rabat →](/out/contabo)

#Reklama · link partnerski

[Zobacz kod rabatowy →](/kody-rabatowe/contabo)

Mikrus

Najtańszy VPS do testowania konfiguracji SSH tunnel i ProxyJump

Dev/Test

[Aktywuj rabat →](/out/mikrus)

#Reklama · link partnerski

[Zobacz kod rabatowy →](/kody-rabatowe/mikrus)

LH.pl

Hosting z SSH i dostępem do bazy MySQL przez bezpieczny tunel

SSH dostęp

[Aktywuj rabat →](/out/lh-pl)

#Reklama · link partnerski

[Zobacz kod rabatowy →](/kody-rabatowe/lh-pl)

## Powiązane strony

-   [Postfix — konfiguracja SMTP na VPS](/baza-wiedzy/postfix-konfiguracja-vps)
-   [Bezpieczeństwo WordPress na hostingu](/baza-wiedzy/bezpieczenstwo-wordpress-hosting)
-   [MySQL backup — automatyzacja i rotacja](/baza-wiedzy/mysql-backup-automatyzacja)
-   [Docker na VPS — instalacja i konfiguracja](/baza-wiedzy/docker-na-vps)
-   [Wszystkie artykuły](/baza-wiedzy/)