Aller au contenu

MariaDB tunnel serveur distant

De Marmits Wiki

Un service systemd pour créer un tunnel SSH persistant vers MariaDB sur Ubuntu 24.04. Il inclut la reconnexion automatique et vérifie que le port local n’est pas déjà utilisé.



1️⃣ Créer le script de lancement du tunnel

  1. Crée un script dans ton home (ou /usr/local/bin) :
nano /home/john/start-mariadb-tunnel.sh
  1. Contenu du script :
#!/bin/bash
# Script pour créer un tunnel SSH vers MariaDB
LOCAL_PORT=33007
REMOTE_HOST=127.0.0.1
REMOTE_PORT=3306
SSH_USER=user
SSH_HOST=12.12.12.12
SSH_KEY=/home/john/.ssh/id_ed25519_test
SSH_PORT=666

# Vérifie si le port local est déjà utilisé
if ss -tlnp | grep ":$LOCAL_PORT " > /dev/null; then
    echo "Port $LOCAL_PORT déjà utilisé, tunnel existant ?"
    exit 0
fi

# Lancement du tunnel
exec /usr/bin/ssh -i "$SSH_KEY" -p "$SSH_PORT" -o "ExitOnForwardFailure yes" -N -L "$LOCAL_PORT:$REMOTE_HOST:$REMOTE_PORT" "$SSH_USER@$SSH_HOST"
  1. Rends le script exécutable :
chmod +x /home/john/start-mariadb-tunnel.sh

2️⃣ Créer le service systemd

  1. Crée le fichier de service :
sudo nano /etc/systemd/system/mariadb-tunnel.service
  1. Contenu du service :
[Unit]
Description=Tunnel SSH persistant vers MariaDB
After=network.target
Wants=network-online.target
StartLimitIntervalSec=0

[Service]
Type=simple
User=geo
ExecStart=/home/geo/bash/start-mariadb-tunnel.sh
Restart=always
RestartSec=10
ExecStartPre=/bin/sleep 10

[Install]
WantedBy=multi-user.target
  • Restart=always → relance automatiquement si le tunnel tombe.
  • RestartSec=10 → délai avant de relancer.
  • User=john → exécute le tunnel avec ton utilisateur Ubuntu pour utiliser la clé privée.



3️⃣ Activer et démarrer le service

sudo systemctl daemon-reload
sudo systemctl enable mariadb-tunnel.service
sudo systemctl start mariadb-tunnel.service

4️⃣ Vérification

  • Statut du service :
sudo systemctl status mariadb-tunnel.service
  • Vérifie que le port local est ouvert :
ss -tlnp | grep 33007
  • Teste la connexion MariaDB via le tunnel :
mysql -h 127.0.0.1 -P 33007 -u vpsmarmits -p

Avantages de cette méthode :

  1. Tunnel SSH persistant et automatique au démarrage
  2. Vérifie que le port local n’est pas déjà occupé
  3. Relance le tunnel en cas de coupure
  4. Trafic MariaDB sécurisé sans exposer le port 3306 sur Internet
  5. Pas besoin de SSL MariaDB côté client (le tunnel SSH chiffre déjà)



Exemple phpMyAdmin :

$i++;
$cfg['Servers'][$i]['verbose'] = 'VPS via SSH';
$cfg['Servers'][$i]['host'] = '127.0.0.1';   // localhost du tunnel
$cfg['Servers'][$i]['port'] = 33007;          // port local du tunnel
$cfg['Servers'][$i]['socket'] = '';
$cfg['Servers'][$i]['auth_type'] = 'cookie';
$cfg['Servers'][$i]['user'] = 'johnsql';
$cfg['Servers'][$i]['password'] = 'passjohnsql';
$cfg['Servers'][$i]['connect_type'] = 'tcp';


# Non obligatoire car déja protégé par tunnel
$cfg['Servers'][$i]['ssl'] = true;
$cfg['Servers'][$i]['ssl_ca'] = '/home/john/ca-cert_serverMaria.pem';
$cfg['Servers'][$i]['ssl_cert'] = '/home/john/client-cert_serverMaria.pem';
$cfg['Servers'][$i]['ssl_key'] = '/home/john/client-key_serverMaria.pem';
$cfg['Servers'][$i]['ssl_verify'] = false; // ou true si tu veux vérifier le certificat