Hi,
ich möchte zwei Lenny Server per SSH-Tunnel verbinden. Auf dem einen läuft MySQL auf dem anderen Apache. Bisher greife ich vom Apache-Server einfach per Hostname auf die Datenbank zu, nun möchte ich die Verbindung absichern. Kann mir jemand ein Howto aus dem Hut zaubern? Hab nicht wirklich was passendes gefunden.
Der Tunnel soll direkt beim Systemstart aufgebaut werden und den Port 3306 vom Webserver zum Datenbankserver tunneln.
Gruß Stephan
SSH Portforwarding
- herrchen
- Beiträge: 3257
- Registriert: 15.08.2005 20:45:28
- Lizenz eigener Beiträge: MIT Lizenz
- Wohnort: Berlin
Re: SSH Portforwarding
mopsy hat geschrieben:Der Tunnel soll direkt beim Systemstart aufgebaut werden und den Port 3306 vom Webserver zum Datenbankserver tunneln.
Code: Alles auswählen
ssh -l username -L 3306:127.0.0.1:3306 datenbank.server.ext
Eine weitere Möglichkeit ist natürlich ein Initscript.
herrchen
Re: SSH Portforwarding
Hi,
das werde ich direkt mal ausprobieren. Wie kann ich die Verbindung dann noch überwachen? Damit sie - falls getrennt - sofort wieder aufgebaut wird?
UPDATE: Meinen SSH-Zugang habe ich nach diesem Howto abgesichert http://wiki.debianforum.de/SshLoginInKaefig und folgendes init Script angelegt:
Dann das Script gespeichert unter /etc/init.d/web2mysql, ausführbar gemacht und mit update-rc.d web2mysql defaults angelegt.
Was passiert jetzt im laufenden Betrieb wenn die Verbindung getrennt wird?
Gruß Stephan
das werde ich direkt mal ausprobieren. Wie kann ich die Verbindung dann noch überwachen? Damit sie - falls getrennt - sofort wieder aufgebaut wird?
UPDATE: Meinen SSH-Zugang habe ich nach diesem Howto abgesichert http://wiki.debianforum.de/SshLoginInKaefig und folgendes init Script angelegt:
Code: Alles auswählen
#! /bin/sh
DAEMON=/usr/bin/ssh
[ -x "$DAEMON" ] || exit 0
case "$1" in
start)
ssh -L 3306:127.0.0.1:3306 -i ~/.ssh/web2mysql mysql@DATENBANKHOSTNAME -p 63742
;;
restart|force-reload)
# Disconnect SSH Connection and restore
;;
stop)
# Disconnect SSH Connection
;;
*)
echo "Usage: $NAME {start|stop|restart|force-reload}" >&2
exit 3
;;
esac
exit 0
Was passiert jetzt im laufenden Betrieb wenn die Verbindung getrennt wird?
Gruß Stephan
Re: SSH Portforwarding
So nach einigem rumprobieren klappt es immer noch nicht
Verstehe ich das schon richtig das das init Script auf dem Webserver gestartet wird und ich danach mit mysql -u root -pXXX direkt auf dem Datenbankserver rauskomme? Also das auch zB php Scripte mit Server=localhost zurechtkommen.
Selbst rausgefunden, wenn ich --protocol=TCP an mysql -u root -pXXX dranhänge klappt die Verbindung zu MySQL.
Beim init Script anlegen habe ich wohl einen Fehler gemacht, beim booten wird der Tunnel nicht automatisch aufgebaut und wenn ich das init Script mit /etc/init.d/web2mysql start aufrufe kann ich die Verbindung nur solange nutzen wie die Konsole geöffnet ist.
Gruß Stephan
Verstehe ich das schon richtig das das init Script auf dem Webserver gestartet wird und ich danach mit mysql -u root -pXXX direkt auf dem Datenbankserver rauskomme? Also das auch zB php Scripte mit Server=localhost zurechtkommen.
Selbst rausgefunden, wenn ich --protocol=TCP an mysql -u root -pXXX dranhänge klappt die Verbindung zu MySQL.
Beim init Script anlegen habe ich wohl einen Fehler gemacht, beim booten wird der Tunnel nicht automatisch aufgebaut und wenn ich das init Script mit /etc/init.d/web2mysql start aufrufe kann ich die Verbindung nur solange nutzen wie die Konsole geöffnet ist.
Gruß Stephan
Re: SSH Portforwarding
So, nach stundenlangen suchen und probieren klappt es nun endlich.
Falls es noch jemand brauchen kann hier mal ne Kurzanleitung.
Zuerst mal autossh installieren damit der Tunnel später überwacht werden kann.
aptitude -y install autossh
Jetzt das folgende Script nach /etc/init.d/sshportf speichern
Ausführbar machen
chmod a+x /etc/init.d/sshportf
Runlevel setzen
update-rc.d sshportf defaults
Script starten
/etc/init.d/sshportf start
Das war's, jetzt steht der Tunnel und auch nach jedem Systemstart steht der Tunnel sofort zur Verfügung und man kann sich mit mysql -u USER -pPASS --protocol=TCP oder alternativ mysql -u USER -pPASS -h 127.0.0.1 zur Datenbank verbinden.
Die Verbindung muss über PublicKeys hergestellt werden - ich habe mir hierzu einen eigenen Benutzer sshuser mit minimalen Rechten eingerichtet. Das ist hier http://wiki.debianforum.de/SshLoginInKaefig sehr gut beschrieben.
Damit auch in Scripten die Verbindung zur Datenbank klappt muss man statt wie meist localhost die IP-Adresse 127.0.0.1 eingeben und schon läuft alles bestens.
Gruß Stephan
Falls es noch jemand brauchen kann hier mal ne Kurzanleitung.
Zuerst mal autossh installieren damit der Tunnel später überwacht werden kann.
aptitude -y install autossh
Jetzt das folgende Script nach /etc/init.d/sshportf speichern
Code: Alles auswählen
#!/bin/sh
### BEGIN INIT INFO
# Provides: autossh
# Required-Start:
# Required-Stop:
# Default-Start: 2 3 4 5
# Default-Stop:
# Short-Description: autossh-tunnel
# Description: SSH-Portforwarding
### END INIT INFO
KEYFILE="~/.ssh/sshuser"
DBHOSTNAME="domain.tld"
SSHUSER="sshuser"
SSHPORT="22"
APP="/usr/bin/autossh"
APPARG="-M 20000 -fN -L 127.0.0.1:3306:127.0.0.1:3306 -i ${KEYFILE} ${SSHUSER}@${DBHOSTNAME} -p ${SSHPORT}"
export AUTOSSH_GATETIME=30
export AUTOSSH_POLL=15
[ -x "$APP" ] || exit 0
case "$1" in
start)
su ${SSHUSER} -c "${APP} ${APPARG}"
;;
*)
echo "Usage: $0 {start}" >&2
exit 3
;;
esac
exit 0
chmod a+x /etc/init.d/sshportf
Runlevel setzen
update-rc.d sshportf defaults
Script starten
/etc/init.d/sshportf start
Das war's, jetzt steht der Tunnel und auch nach jedem Systemstart steht der Tunnel sofort zur Verfügung und man kann sich mit mysql -u USER -pPASS --protocol=TCP oder alternativ mysql -u USER -pPASS -h 127.0.0.1 zur Datenbank verbinden.
Die Verbindung muss über PublicKeys hergestellt werden - ich habe mir hierzu einen eigenen Benutzer sshuser mit minimalen Rechten eingerichtet. Das ist hier http://wiki.debianforum.de/SshLoginInKaefig sehr gut beschrieben.
Damit auch in Scripten die Verbindung zur Datenbank klappt muss man statt wie meist localhost die IP-Adresse 127.0.0.1 eingeben und schon läuft alles bestens.
Gruß Stephan