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

⚡ W skrócie · 9 min czytania

-   SSH tunneling krok po kroku: local port forwarding (-L), remote port forwarding (-R), dynamic SOCKS proxy (-D), ProxyJump przez bastion, autossh dla trwałych tuneli.
-   Czym jest SSH tunnel?
-   Local port forwarding (-L) - dostęp do bazy danych przez ....
-   Remote port forwarding (-R) - ekspozycja lokalnej aplikacji.
-   Dynamic SOCKS proxy (-D) - prywatny VPN przez SSH.

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 "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 "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 "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/)
-   [Nextcloud na VPS - instalacja i konfiguracja z Nginx
    
    Nextcloud VPS: Nginx + PHP-FPM 8.2 + MariaDB + Redis, konfiguracja nginx.conf z CalDAV/CardDAV, Redis session cache…
    
    ](/baza-wiedzy/nextcloud-konfiguracja-vps/)
-   [PostgreSQL na hostingu i VPS - instalacja, konfiguracja i bezpieczeństwo
    
    Jak zainstalować PostgreSQL na VPS, skonfigurować bezpieczeństwo, połączyć przez SSH tunnel i czym różni się od MySQL…
    
    ](/baza-wiedzy/postgresql-hosting-konfiguracja/)
-   [Jaki VPS wybrać?](/jaki-vps-wybrac/)

Autor: [Redakcja HostGrade.pl](/autorzy/) Zespół redakcyjny · Aktualizacja: 9 kwietnia 2026

Artykuły HostGrade.pl przygotowuje i aktualizuje redakcja serwisu. Ceny startowe, ceny odnowienia i warunki planów sprawdzamy w cennikach i regulaminach dostawców, a potem liczymy całkowity koszt za 2 lata (cena startowa plus odnowienia). Zasady zbierania danych i liczenia kosztów opisujemy na stronie Metodologia. Linki partnerskie oznaczamy jako #reklama.

[O redakcji i metodologii →](/autorzy/)