# Connexion à votre base de données via un tunnel SSH

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

Le fait que la base de données de votre site n'écoute que sur l'adresse de bouclage du serveur empêche un outil de bureau tel que TablePlus, Sequel Ace, DBeaver ou MySQL Workbench de s'y connecter directement. Un tunnel SSH donne à ces outils un port local qui est redirigé vers la base de données, ce qui vous permet d'obtenir une interface graphique correcte sur vos données sans exposer MySQL à internet.

## Pourquoi un Tunnel Est Nécessaire

Ouvrez **Sites web**, cliquez sur le site, puis sur **Base de données**. La carte **Détails de connexion** affiche l'hôte sous la forme `127.0.0.1` et le port sous la forme `3306`. Ce n'est pas un espace réservé : la base de données n'accepte en réalité des connexions que depuis la machine sur laquelle elle s'exécute. Rien sur l'internet public ne peut atteindre le port 3306, ce qui élimine toute une catégorie d'attaques.

Un tunnel SSH comble cet écart en toute sécurité. Votre client SSH ouvre un port sur votre ordinateur portable, chiffre tout ce que vous lui envoyez, et le transmet à la base de données depuis l'intérieur du serveur, exactement comme si un processus local s'était connecté.

![Onglet Database montrant les détails de connexion dans KPanel](https://support.kapsulehost.com/help/screenshots/database-ssh-tunnel.84df4ba6.webp)

## Ce Dont Vous Avez Besoin D'abord

> **Note:** Un tunnel est une connexion SSH, vous avez donc besoin d'une clé SSH enregistrée pour ce site avant que tout ceci ne fonctionne. Suivez d'abord [Ajouter des Clés SSH à un Site](https://support.kapsulehost.com/fr-fr/adding-ssh-keys), puis revenez ici.

Rassemblez quatre éléments :

- **L'hôte SSH, le port et le nom d'utilisateur**, depuis **Paramètres**, puis **Clés SSH**, dans la carte **Détails de connexion**.
- **Le nom de la base de données, le nom d'utilisateur et le mot de passe**, depuis **Base de données**. Cliquez sur l'icône en forme d'œil pour révéler le mot de passe et sur l'icône de copie pour le mettre dans votre presse-papiers.

Si l'onglet Database indique **No database provisioned for this site type**, ce site n'en a pas. Les sites statiques et certains sites Node.js sont créés sans base de données.

## Ouvrir le Tunnel Depuis un Terminal

Le principe général est le suivant : rediriger un port local vers `127.0.0.1:3306` de l'autre côté de la connexion SSH.

```sh
ssh -N -L 3307:127.0.0.1:3306 <ssh-username>@<ssh-host> -p <ssh-port>
```

- `-L 3307:127.0.0.1:3306` ouvre le port 3307 sur votre machine et le redirige vers le port 3306 de l'interface de bouclage du serveur.
- `-N` signifie de ne pas lancer de shell, simplement de maintenir le tunnel ouvert.
- Ajoutez `-i /path/to/key` si la clé de ce site n'est pas votre clé par défaut.

Laissez cette fenêtre de terminal ouverte. Tant qu'elle est ouverte, `127.0.0.1:3307` sur votre ordinateur portable représente la base de données du site.

> **Tip:** Utilisez 3307 en local plutôt que 3306. Si MySQL ou MariaDB est installé sur votre propre machine, il utilise déjà le port 3306, et le tunnel échouera à se lier avec une erreur « address already in use ». N'importe quel port local libre fonctionne.

## Pointer Votre Client de Base de Données Vers le Tunnel

Dans votre client graphique, créez une connexion MySQL simple avec ces valeurs :

| Champ | Valeur |
|---|---|
| Hôte | `127.0.0.1` |
| Port | `3307` (le port local que vous avez redirigé) |
| Utilisateur | Le **Username** indiqué dans l'onglet Database |
| Mot de passe | Le **Password** indiqué dans l'onglet Database |
| Base de données | Le nom **Base de données** indiqué dans l'onglet Database |

Ne mettez pas l'hôte SSH dans le champ Hôte. Du point de vue du client, il communique avec une base de données sur votre propre machine.

### Clients Avec un Onglet SSH Intégré

TablePlus, Sequel Ace, DBeaver et MySQL Workbench peuvent tous gérer le tunnel eux-mêmes, ce qui évite de garder un terminal ouvert. Remplissez deux groupes de champs :

- **Section SSH** : hôte, port, nom d'utilisateur et fichier de clé privée depuis la page Clés SSH.
- **Section Database** : hôte `127.0.0.1`, port `3306`, plus le nom de la base de données, l'utilisateur et le mot de passe depuis l'onglet Database.

Lorsque le client établit le tunnel, utilisez `3306` dans la section Database plutôt que votre port local redirigé. Le client se connecte du point de vue du serveur, il voit donc le port réel.

## Utiliser phpMyAdmin à la Place

Si vous avez seulement besoin d'un coup d'œil rapide sur une table, vous n'avez pas besoin d'un tunnel du tout. L'onglet Database comporte une carte **phpMyAdmin** avec un bouton **Ouvrir phpMyAdmin**. Il vous connecte via KPanel, il n'y a donc pas de mot de passe séparé à retenir, et il s'ouvre dans un nouvel onglet déjà pointé vers la base de données de ce site.

phpMyAdmin est l'option la plus rapide pour parcourir des données, exécuter une requête ponctuelle ou vérifier une valeur. Un client de bureau via un tunnel est préférable pour les exports volumineux, le travail sur le schéma et tout ce que vous souhaitez scripter. Consultez [Utiliser phpMyAdmin](https://support.kapsulehost.com/fr-fr/sites-phpmyadmin) pour la méthode par navigateur.

## Exécuter des Requêtes et des Exports Via le Tunnel

Une fois le tunnel ouvert, les outils en ligne de commande standards fonctionnent normalement, pointés vers votre port local redirigé :

```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:** Un export manuel est une copie de confort, pas une stratégie de sauvegarde. Il n'est à jour qu'au moment où vous l'avez exécuté, et il réside sur l'ordinateur portable depuis lequel vous l'avez lancé. KapsuleHost effectue déjà des sauvegardes quotidiennes automatiques du site, conservées pendant 30 jours. Consultez [Effectuer une Sauvegarde](https://support.kapsulehost.com/fr-fr/taking-a-backup) avant de vous fier à un fichier `.sql` local.

## Dépannage

**« Address already in use » lors de l'ouverture du tunnel.** Quelque chose sur votre machine occupe déjà ce port local. Choisissez-en un autre, par exemple `-L 3399:127.0.0.1:3306`, et modifiez le port dans votre client en conséquence.

**« Connection refused » depuis le client de base de données.** Le tunnel n'est pas actif. Vérifiez que le terminal SSH fonctionne toujours et n'a pas affiché d'erreur, et que le port dans votre client correspond au port local de l'argument `-L`.

**SSH se connecte mais le client atteint quand même le délai d'attente.** Vérifiez que vous avez bien redirigé vers `127.0.0.1:3306` et non vers le nom d'hôte public. Rediriger vers le nom public demande au serveur d'atteindre la base de données via internet, ce qui est précisément ce qui est bloqué.

**« Access denied for user ».** La connexion SSH a réussi mais les identifiants MySQL sont incorrects. Copiez à nouveau le nom d'utilisateur et le mot de passe depuis l'onglet Database à l'aide des icônes de copie plutôt que de les retaper, et vérifiez que vous vous connectez au bon nom de base de données.

**Permission denied (publickey) avant même d'atteindre MySQL.** Cela relève de la couche SSH, pas de la base de données. Parcourez la section de dépannage dans [Ajouter des Clés SSH à un Site](https://support.kapsulehost.com/fr-fr/adding-ssh-keys).

## Et Ensuite

- [Téléverser des Fichiers Avec SFTP](https://support.kapsulehost.com/fr-fr/sftp-access) utilise les mêmes identifiants SSH pour le transfert de fichiers.
- [Utiliser phpMyAdmin](https://support.kapsulehost.com/fr-fr/sites-phpmyadmin) pour le travail sur la base de données via le navigateur.
- [Restaurer à Partir d'une Sauvegarde](https://support.kapsulehost.com/fr-fr/restoring-from-backup) si une requête est allée plus loin que prévu.
