Rozdział 12 · 12.6
Łączenie się z bazą danych z zewnątrz (tunel SSH)
Zazwyczaj z bazą danych komunikuje się wyłącznie Państwa własna strona internetowa. Działa ona na tym samym serwerze i łączy się przez localhost. Chcą Państwo uzyskać dostęp do bazy danych z własnego komputera, na przykład za pomocą HeidiSQL, DBeaver, MySQL Workbench lub TablePlus? W WebOké robi się to przez tunel SSH. Potrzebny jest do tego pakiet z dostępem SSH: Power Webhost Three, Power Webhost Four, AI Wordpress Three lub Power Reseller.
Dlaczego nie bezpośrednio przez port 3306?
Port bazy danych 3306 jest na naszych serwerach zamknięty dla internetu. Robimy to celowo:
- Otwarty port bazy danych jest nieustannie atakowany. Roboty przez cały dzień próbują odgadnąć nazwy użytkowników i hasła. Na jednym serwerze notujemy tysiące nieudanych prób dziennie. Wystarczy wtedy jedno słabe lub ujawnione hasło, aby ktoś mógł odczytać lub usunąć całą Państwa bazę danych.
- Zwykłe połączenie z bazą danych często nie jest szyfrowane. Hasła i dane mogą wtedy zostać przechwycone po drodze, na przykład w publicznej sieci Wi-Fi.
- Dostęp na podstawie adresu IP jest słabym zabezpieczeniem. W domu i w biurze adres IP od czasu do czasu się zmienia, a każdy, kto korzysta z tego samego adresu (sieć firmowa, hotspot), wchodzi tymi samymi drzwiami. W praktyce często kończy się to wpisaniem % (wszyscy), a wtedy baza danych jest otwarta dla całego świata.
- Luka w samym oprogramowaniu bazy danych dotyczy tylko serwerów, których port jest osiągalny. Przy zamkniętym porcie nikt z zewnątrz nie ma do niej dostępu.
Tunel SSH rozwiązuje wszystkie te problemy. Logują się Państwo za pomocą klucza SSH (a nie hasła, które można odgadnąć), cała komunikacja jest szyfrowana, a baza danych traktuje połączenie jak połączenie z samego serwera. Nie trzeba dodawać żadnego adresu IP i działa to z każdego miejsca.
Czego Państwo potrzebują?
- Pakietu z dostępem SSH (zob. Klucze SSH i logowanie przez SSH). Jeśli w DirectAdmin nie widzą Państwo opcji Klucze SSH, Państwa pakiet nie obejmuje SSH. Mogą Państwo zmienić pakiet w Moje WebOké przy swoim pakiecie, na karcie Zmień pakiet hostingowy.
- Klucza SSH dodanego w DirectAdmin w sekcji Klucze SSH (krok 1 i 2 z Klucze SSH i logowanie przez SSH).
- Użytkownika bazy danych z hasłem. Najlepiej utworzyć osobnego użytkownika dla własnego programu, a nie korzystać z użytkownika strony internetowej.
Łączenie za pomocą programu do baz danych
Większość programów ma wbudowaną obsługę tunelu. Należy wtedy podać dwa zestawy danych: dane SSH i dane bazy danych.
| Ustawienie | Co należy wpisać? |
|---|---|
| Typ połączenia | HeidiSQL: MariaDB or MySQL (SSH tunnel). DBeaver: karta SSH, zaznaczyć Use SSH Tunnel. MySQL Workbench: Standard TCP/IP over SSH. TablePlus i Navicat: Over SSH. |
| Host SSH | Nazwa serwera Państwa pakietu, na przykład linux2023.webawere.nl (zob. Znajdowanie nazwy serwera i nazwy użytkownika DA) |
| Port SSH | 1967 |
| Użytkownik SSH | Państwa nazwa użytkownika DA, na przykład wtsilefl |
| Klucz SSH | Państwa klucz prywatny (plik id_ed25519, bez .pub). HeidiSQL korzysta z PuTTY i wymaga pliku .ppk: należy przekonwertować klucz za pomocą PuTTYgen. |
| Host bazy danych | 127.0.0.1 (z perspektywy serwera) |
| Port bazy danych | 3306 |
| Użytkownik | Pełna nazwa użytkownika bazy danych, np. wtsilefl_extern |
| Hasło | Hasło tego użytkownika bazy danych |
| Baza danych | Pełna nazwa bazy danych, np. wtsilefl_shop |
Tunel z wiersza poleceń
Jeśli Państwa program nie potrafi samodzielnie utworzyć tunelu SSH lub wolą Państwo pracować w wierszu poleceń (Mac, Linux lub Windows Terminal), można uruchomić tunel samodzielnie:
ssh -p 1967 -N -L 3307:127.0.0.1:3306 wtsilefl@linux2023.webawere.nl
Prosimy pozostawić to okno otwarte przez cały czas pracy z bazą danych. W programie należy połączyć się z hostem 127.0.0.1, portem 3307, podając użytkownika bazy danych i hasło. Tunel zatrzymuje się skrótem Ctrl+C.
Nie udaje się nawiązać połączenia
- „Permission denied (publickey)”: problem występuje na etapie SSH. Prosimy sprawdzić port 1967, czy Państwa klucz publiczny znajduje się w sekcji Klucze autoryzujące oraz czy program używa odpowiadającego mu klucza prywatnego (zob. Klucze SSH i logowanie przez SSH).
- „Access denied”: etap SSH się powiódł, ale nazwa użytkownika lub hasło bazy danych są nieprawidłowe. Prosimy użyć pełnej nazwy, poprzedzonej nazwą użytkownika DA i podkreślnikiem.
- „Access denied for user ...@127.0.0.1”, mimo że hasło jest prawidłowe: w DirectAdmin w sekcji Access Hosts tego użytkownika bazy danych należy dodać 127.0.0.1. Ten adres oznacza wyłącznie sam serwer, więc niczego nie otwiera na zewnątrz.
- Przekroczenie czasu (time-out) przy SSH: po kilku nieudanych próbach Państwa adres IP może zostać zablokowany. Prosimy sprawdzić w Moje WebOké w sekcji Czy jestem zablokowany? (zob. Problemen z logowaniem, rozwiązywanie).
Wskazówka: W sekcji Access Hosts użytkownika bazy danych zazwyczaj nie trzeba niczego dodawać na potrzeby tunelu SSH: localhost wystarczy. Jeśli znajdują się tam jeszcze stare adresy IP lub %, można je usunąć. Nie dają już one dostępu, ponieważ port 3306 jest z zewnątrz zamknięty.
