Eine MySQL-Datenbank, die von innen (Host oder lokalem Netzwerk),
jedoch nicht von außen (Internet) per TCP/IP erreichbar ist, kann von
einem entfernten Rechner über einen SSH-Tunnel erreicht werden, wenn
man einen SSH-Zugang zu dem Datenbank-Host oder einem Host des
Netzwerks besitzt.
1 - SSH-Tunnel zum MySQL Port 3306 aufsetzen:
$ ssh <user>@<host> -L <port>:localhost:3306 -f -N
-L <port>:localhost:3306 : Verbinde lokalen Port <port> remote mit MySQL Port 3306
-f : Lege den ssh-Prozess in den Hintergrund
-N : Führe remote nichts aus (kein Login, kein Kommando)
2 - Mit der Datenbank verbinden:
$ mysql --host=localhost --port=<port> --protocol=tcp ...
oder
$ mysql --host=127.0.0.1 --port=<port> ...
Dieser spezielle Fall von SSH-Tunneling kann natürlich auch auf andere
Dienste (Ports) übertragen werden.
Ein weiterer Artikel zu dem Thema:
http://www.revsys.com/writings/quicktips/ssh-tunnel.html
phpMyAdmin
Um mit einer lokalen phpMyAdmin-Applikation über den Tunnel
auf die Remote-Datenbank zugreifen zu können, wird eine
entsprechende Server-Definition in der phpMyAdmin-Konfiguration
vereinbart, z.B. in /etc/phpmyadmin/conf.d/<Server-Name>.php:
<?php
$cfg['Servers'][$i]['verbose'] = '<Server-Name>';
$cfg['Servers'][$i]['host'] = '127.0.0.1';
$cfg['Servers'][$i]['port'] = '3305';
$cfg['Servers'][$i]['connect_type'] = 'tcp';
$i++;
Das Timeout hochsetzen:
$cfg['LoginCookieValidity'] = <Wert in Sekunden>;
Z.B. ein Tag:
$cfg['LoginCookieValidity'] = 86400;
0 bedeutet nicht unendlich, sondern sofortiges Logout!