Websites

Verbinding maken met uw database via een SSH-tunnel

Your site's MySQL server only listens on the server's own loopback address, so a desktop tool such as TablePlus, Sequel Ace, DBeaver or MySQL Workbench cannot dial it directly. An SSH tunnel gives…

Je website's MySQL-server luistert alleen naar het loopback-adres van de server zelf, dus een desktoptool zoals TablePlus, Sequel Ace, DBeaver of MySQL Workbench kan er niet rechtstreeks verbinding mee maken. Een SSH-tunnel geeft die tools een lokale poort die wordt doorgestuurd naar de database. Zo krijg je een goede GUI op je gegevens zonder MySQL op het internet open te zetten.

Waarom een tunnel nodig is

Open Websites, klik de site aan, dan Files, dan Database. De kaart Connection details toont de host als 127.0.0.1 en de poort als 3306. Dit is geen placeholder: de database accepteert werkelijk alleen verbindingen van de machine waarop deze draait. Niets op het openbare internet kan poort 3306 bereiken, wat een hele klasse aanvallen elimineert.

Een SSH-tunnel sluit die kloof veilig. Je SSH-client opent een poort op je laptop, versleutelt alles wat je ernaartoe stuurt en geeft het vanaf binnen de server aan de database, precies alsof een lokaal proces verbinding had gemaakt.

Tabblad Database met verbindingsgegevens in KPanel

Wat je eerst nodig hebt

Een tunnel is een SSH-verbinding, dus je hebt een SSH-sleutel nodig die bij de site is geregistreerd voordat dit werkt. Volg eerst SSH-sleutels aan een site toevoegen en kom dan hier terug.

Verzamel vier dingen:

  • SSH-host, poort en gebruikersnaam uit Files, dan SSH Keys, in de kaart Connection details.
  • Databasenaam, gebruikersnaam en wachtwoord uit Files, dan Database. Klik het oog-icoon om het wachtwoord zichtbaar te maken en het kopieerpictogram om het naar je klembord te kopiëren.

Als het tabblad Database No database provisioned for this site type zegt, heeft deze site er geen. Statische sites en sommige Node.js-sites worden zonder database aangemaakt.

De tunnel van een terminal openen

De algemene vorm is: een lokale poort doorsturen naar 127.0.0.1:3306 aan de andere kant van de SSH-verbinding.

ssh -N -L 3307:127.0.0.1:3306 <ssh-username>@<ssh-host> -p <ssh-port>
  • -L 3307:127.0.0.1:3306 opent poort 3307 op je machine en stuurt deze door naar poort 3306 op de loopback-interface van de server.
  • -N zegt dat je geen shell moet uitvoeren, houd de tunnel gewoon open.
  • Voeg -i /path/to/key toe als de sleutel voor deze site niet je standaardsleutel is.

Laat dat terminalvenster draaien. Zolang het open is, 127.0.0.1:3307 op je laptop is de database van de site.

Gebruik 3307 lokaal in plaats van 3306. Als je MySQL of MariaDB op je eigen machine hebt geïnstalleerd, gebruikt deze al 3306, en de tunnel kan niet worden gebonden met een fout "address already in use". Elke vrije lokale poort werkt.

Je databaseclient op de tunnel richten

Maak in je GUI-client een eenvoudige MySQL-verbinding met deze waarden:

VeldWaarde
Host127.0.0.1
Port3307 (welke lokale poort je ook hebt doorgestuurd)
UserDe Username uit het tabblad Database
PasswordHet Password uit het tabblad Database
DatabaseDe Database naam uit het tabblad Database

Zet de SSH-host niet in het veld Host. Voor zover de client weet spreekt het met een database op je eigen machine.

Clients met een ingebouwd SSH-tabblad

TablePlus, Sequel Ace, DBeaver en MySQL Workbench kunnen de tunnel allemaal zelf beheren, wat bespaard dat je een terminal open moet houden. Vul twee groepen velden in:

  • SSH-sectie: host, poort, gebruikersnaam en privésleutelbestand van de SSH Keys-pagina.
  • Database-sectie: host 127.0.0.1, poort 3306, plus de databasenaam, gebruiker en wachtwoord uit het tabblad Database.

Wanneer de client de tunnel maakt, gebruik 3306 in het databasegedeelte in plaats van je lokale doorgestuurde poort. De client maakt verbinding vanuit het standpunt van de server, dus ziet het de echte poort.

In plaats daarvan phpMyAdmin gebruiken

Als je alleen even naar een tabel wilt kijken, heb je helemaal geen tunnel nodig. Het tabblad Database heeft een kaart phpMyAdmin met een knop Open phpMyAdmin. Het meldt je aan via KPanel, dus er is geen apart wachtwoord om te onthouden, en het opent in een nieuw tabblad dat al naar de database van deze site wijst.

phpMyAdmin is de snellere optie voor bladeren, het uitvoeren van een eenmalige query of het controleren van een waarde. Een desktoplient via een tunnel is beter voor grote exporten, schemawerk en alles wat je wilt scripten. Zie Using phpMyAdmin voor de browserroute.

Query's en dumps via de tunnel uitvoeren

Als de tunnel open is, werken de standaardopdrachtregeltools normaal, gericht op je lokale doorgestuurde poort:

mysql -h 127.0.0.1 -P 3307 -u <db-user> -p <db-name>

mysqldump -h 127.0.0.1 -P 3307 -u <db-user> -p <db-name> > backup.sql

Een handmatige dump is een gemakskopiëring, geen back-upstrategie. Het is slechts zo vers als het moment waarop je het hebt uitgevoerd, en het leeft op welke laptop je het ook hebt uitgevoerd. Kapsule maakt al automatische dagelijkse back-ups van de site, behouden gedurende 30 dagen. Zie Taking a Backup voordat je op een lokaal .sql-bestand vertrouwt.

Probleemoplossing

"Address already in use" bij het openen van de tunnel. Iets op je machine staat al op die lokale poort. Kies een ander, bijvoorbeeld -L 3399:127.0.0.1:3306, en wijzig de poort in je client om overeen te stemmen.

"Connection refused" van de databaseclient. De tunnel is niet actief. Controleer of de SSH-terminal nog steeds wordt uitgevoerd en geen fout heeft afgedrukt, en of de poort in je client overeenkomt met de lokale poort in het argument -L.

SSH maakt verbinding maar de client loopt toch vast. Bevestig dat je naar 127.0.0.1:3306 hebt doorgestuurd en niet naar de openbare hostnaam. Doorsturen naar de openbare naam vraagt de server om de database via het internet te bereiken, wat precies wat is geblokkeerd.

"Access denied for user". De SSH-aanmelding is geslaagd maar de MySQL-inloggegevens zijn onjuist. Kopieer de gebruikersnaam en het wachtwoord opnieuw uit het tabblad Database met behulp van de kopieerpictogrammen in plaats van ze opnieuw in te typen, en controleer of je verbinding maakt met de juiste databasenaam.

Permission denied (publickey) voordat je MySQL bereikt. Dat is de SSH-laag, niet de database. Doorloop de probleemoplossingssectie in Adding SSH Keys To a Site.

Wat te doen vervolgens

Nog steeds hulp nodig?

Stuur ons een e-mail op support@kapsulehost.com of open een chat in KPanel.

KPanel openen
Verbinding maken met uw database via een SSH-tunnel