# Verbinding maken met je database via een SSH-tunnel

Source: https://support.kapsulehost.com/nl-nl/database-ssh-tunnel

De database van je site luistert alleen op het loopback-adres van de server, zodat een desktoptool zoals TablePlus, Sequel Ace, DBeaver of MySQL Workbench er niet rechtstreeks mee kan verbinden. Een SSH-tunnel geeft die tools een lokale poort die wordt doorgestuurd naar de database, en zo krijg je een echte GUI op je gegevens zonder MySQL open te zetten voor het internet.

## Waarom een Tunnel Nodig Is

Open **Websites**, klik op de site en dan op **Database**. De kaart **Verbindingsgegevens** toont de host als `127.0.0.1` en de poort als `3306`. Dat is geen tijdelijke aanduiding: de database accepteert echt alleen verbindingen vanaf de machine waarop hij draait. Niets op het openbare internet kan poort 3306 bereiken, wat een hele categorie aanvallen uitsluit.

Een SSH-tunnel dicht dat gat op een veilige manier. Je SSH-client opent een poort op je laptop, versleutelt alles wat je ernaartoe stuurt, en geeft het door aan de database vanaf binnen de server, precies alsof een lokaal proces verbinding had gemaakt.

![Database-tab met verbindingsgegevens in KPanel](https://support.kapsulehost.com/help/screenshots/database-ssh-tunnel.84df4ba6.webp)

## Wat Je Eerst Nodig Hebt

> **Note:** Een tunnel is een SSH-verbinding, dus je hebt een SSH-sleutel nodig die geregistreerd is bij de site voordat dit werkt. Volg eerst [SSH-sleutels toevoegen aan een site](https://support.kapsulehost.com/nl-nl/adding-ssh-keys) en kom daarna hierop terug.

Verzamel vier zaken:

- **SSH-host, poort en gebruikersnaam**, via **Instellingen**, dan **SSH-sleutels**, in de kaart **Verbindingsgegevens**.
- **Databasenaam, gebruikersnaam en wachtwoord**, via **Database**. Klik op het oogicoon om het wachtwoord te tonen en op het kopieericoon om het naar je klembord te zetten.

Als op de Database-tab staat **No database provisioned for this site type**, dan heeft deze site geen database. Statische sites en sommige Node.js-sites worden aangemaakt zonder database.

## De Tunnel Openen Vanuit een Terminal

Het algemene patroon is: stuur een lokale poort door naar `127.0.0.1:3306` aan de andere kant van de SSH-verbinding.

```sh
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 die door naar poort 3306 op de loopback-interface van de server.
- `-N` betekent: start geen shell, houd alleen de tunnel open.
- Voeg `-i /path/to/key` toe als de sleutel voor deze site niet je standaardsleutel is.

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

> **Tip:** Gebruik lokaal 3307 in plaats van 3306. Als je zelf MySQL of MariaDB geïnstalleerd hebt op je eigen machine, gebruikt die al 3306, en zal de tunnel niet kunnen binden met een foutmelding "address already in use". Elke vrije lokale poort werkt.

## Je Databaseclient Op de Tunnel Richten

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

| Veld | Waarde |
|---|---|
| Host | `127.0.0.1` |
| Poort | `3307` (welke lokale poort je ook hebt doorgestuurd) |
| Gebruiker | De **Gebruikersnaam** van de Database-tab |
| Wachtwoord | Het **Wachtwoord** van de Database-tab |
| Database | De **Databasenaam** van de Database-tab |

Zet de SSH-host niet in het Host-veld. Voor de client lijkt het alsof hij praat met een database op je eigen machine.

### Clients Met een Ingebouwde SSH-tab

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

- **SSH-sectie**: host, poort, gebruikersnaam en privésleutelbestand van de pagina SSH-sleutels.
- **Database-sectie**: host `127.0.0.1`, poort `3306`, plus de databasenaam, gebruiker en wachtwoord van de Database-tab.

Wanneer de client de tunnel opzet, gebruik je `3306` in de database-sectie in plaats van je lokale doorgestuurde poort. De client maakt verbinding vanuit het perspectief van de server, dus die ziet de echte poort.

## phpMyAdmin Gebruiken In Plaats Daarvan

Als je alleen snel naar een tabel wilt kijken, heb je helemaal geen tunnel nodig. De Database-tab heeft een kaart **phpMyAdmin** met een knop **phpMyAdmin openen**. Je wordt ingelogd via KPanel, dus er is geen apart wachtwoord om te onthouden, en het opent in een nieuw tabblad dat al gericht is op de database van deze site.

phpMyAdmin is de snellere optie om te bladeren, een eenmalige query uit te voeren of een waarde te controleren. Een desktopclient via een tunnel is beter voor grote exports, schemawerk en alles wat je wilt scripten. Zie [phpMyAdmin gebruiken](https://support.kapsulehost.com/nl-nl/sites-phpmyadmin) voor de browseroptie.

## Query's en Dumps Uitvoeren Via de Tunnel

Met de tunnel geopend werken de standaard commandoregeltools gewoon, gericht op je lokale doorgestuurde poort:

```sh
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
```

> **Warning:** Een handmatige dump is een handig extra exemplaar, geen back-upstrategie. Hij is alleen zo actueel als het moment waarop je hem maakte, en staat op welke laptop je ook gebruikte om hem te maken. KapsuleHost maakt al automatisch dagelijkse back-ups van de site, die 30 dagen bewaard blijven. Zie [Een back-up maken](https://support.kapsulehost.com/nl-nl/taking-a-backup) voordat je vertrouwt op een lokaal `.sql`-bestand.

## Probleemoplossing

**"Address already in use" bij het openen van de tunnel.** Er draait al iets op je machine op die lokale poort. Kies een andere, bijvoorbeeld `-L 3399:127.0.0.1:3306`, en pas de poort in je client aan.

**"Connection refused" vanuit de databaseclient.** De tunnel staat niet open. Controleer of de SSH-terminal nog actief is en geen foutmelding heeft getoond, en of de poort in je client overeenkomt met de lokale poort in het `-L`-argument.

**SSH maakt verbinding, maar de client loopt nog steeds vast op een time-out.** Controleer of je hebt doorgestuurd naar `127.0.0.1:3306` en niet naar de publieke hostnaam. Doorsturen naar de publieke naam vraagt de server om de database via het internet te bereiken, en dat is precies wat geblokkeerd is.

**"Access denied for user".** De SSH-login is gelukt, maar de MySQL-inloggegevens kloppen niet. Kopieer de gebruikersnaam en het wachtwoord opnieuw van de Database-tab met de kopieericonen in plaats van ze over te typen, en controleer of je verbinding maakt met de juiste databasenaam.

**Permission denied (publickey) nog voordat je bij MySQL komt.** Dat is de SSH-laag, niet de database. Werk de probleemoplossingssectie door in [SSH-sleutels toevoegen aan een site](https://support.kapsulehost.com/nl-nl/adding-ssh-keys).

## Waar Je Verder Kunt Kijken

- [Bestanden uploaden met SFTP](https://support.kapsulehost.com/nl-nl/sftp-access) gebruikt dezelfde SSH-inloggegevens voor bestandsoverdracht.
- [phpMyAdmin gebruiken](https://support.kapsulehost.com/nl-nl/sites-phpmyadmin) voor databasewerk via de browser.
- [Herstellen vanaf een back-up](https://support.kapsulehost.com/nl-nl/restoring-from-backup) als een query verder is gegaan dan de bedoeling.
