Nicht zu klären, ob wir Ihr Setup korrekt bekommen. Ich gehe firewallhost
also davon aus, dass der Host von Ihrer Workbench aus erreichbar ist. Es ist also erforderlich, einen offenen Port auf diesem Server zu erstellen, der auf den "echten" MySQL-Server hinter dieser Firewall zugreifen kann.
Das ist ganz in Ordnung, wenn Sie einen dauerhaften SSH-Tunnel auf dem einrichten firewallhost
. Das geht so weiterfirewallhost
ssh -L localhost:33060:localhost:3306 someshelluser@databasehost
Dadurch wird ein OpenSH-Tunnel für localhost (auf keinem Netzwerk öffentlich) auf Port 33060 (oder auf firewallhost
dem hier verfügbaren Port) erstellt, der im Gegenzug über diesen Tunnel mit dem 3306-Port (erneut auf localhost, aber auf dem Computer databasehost
) verbunden ist, da dieser verbunden ist als someshelluser auf databasehost
.
Und jetzt können Sie sich mit der Workbench verbinden:
Um den SSH-Tunnel firewallhost
dauerhaft zu aktivieren, können Sie ihn dort wie folgt mit einer Schlüsseldatei (für den Zugriff databasehost
) und einem getrennten Prozess über den Bildschirm starten . Dies kann in Ihre rc.local oder was auch immer Sie verwenden firewallhost
.
screen -d -m /usr/bin/ssh -v -o "StrictHostKeyChecking=no" -o "UserKnownHostsFile=/dev/null" -o "BatchMode=yes" -i /your/.ssh/ssh_host_dsa_key -q -L locahost:33060:localhost:3306 someshelluser@databasehost
Sie müssen sich nur vorstellen, dass ein solcher SSH-Tunnel jeden Port-Stream von einem Computer zu einem anderen "transportieren" kann, indem Sie einen "neuen" Port auf dem Computer öffnen, auf dem Sie diesen SSH-Tunnel erstellen (hier firewallhost
). Dies kann sogar in der Öffentlichkeit erfolgen firewallhost
, aber Sie möchten es auf localhost, da Sie Ihren MySQL-Port nicht der Öffentlichkeit zugänglich machen möchten;)
AKTUALISIEREN:
Ok, da Sie keinen direkten Zugriff zum firewallhost
Erstellen eines dauerhaften Tunnels haben, versuchen Sie es auf eine andere Weise. Sie sagten, Sie können eine Verbindung mit dem Proxy-Befehl herstellen. Da Sie es inline und nicht als '-o'-Option geschrieben haben, gehe ich davon aus, dass Sie dies in Ihrer ssh_config haben.
Wenn Ihre ssh_config so aussieht:
Host server
Hostname mysqlserver.example.org
ProxyCommand ssh -W %h:%p firewallhost.example.org
Dann können Sie Folgendes als ' SSH-Hostname ' in der Workbench versuchen . Mit Zufall dürfen Sie damit ssh-Parameter geben. Ich habe es nicht getestet, aber es ist nicht ungewöhnlich, dass die Anwendung den Inhalt von Hostnamenfeldern direkt an den SSH-Aufruf übergibt.
SSH-Hostname:
-o ProxyCommand="ssh -W %h:%p firewallhost.example.org" mysqlserver.example.org
Dies sollte Sie über Ihren Firewallhost auf Ihren mysqlserver bringen. Von hier aus können Ihre MySQL-Einstellungen so verwendet werden, als würden Sie direkt eine Verbindung zu MySQL-Server herstellen, wie es die Workbench erwartet.
UPDATE2:
Wie Sie geschrieben haben, befinden Sie sich auf demselben Computer (Ubuntu 14), der eine Verbindung zu Ihrer MySQL-Datenbank herstellen firewallhost
kann. Sie sollten nur die Werte in der Workbench verwenden, die Sie auf der Konsole verwenden. Die Workbench verwendet Ihre .ssh / config, wenn Sie die Workbench mit demselben Benutzer aufrufen, für den die .ssh / config bestimmt ist.
Schließlich:
Der SSH-Hostname wäre nur "targetHost", wobei der Proxy-Befehl von Ihrer .ssh / config Sie über "firewallHost" zu "targetHost" tunnelt. SSH-Benutzername ist 'Benutzername' (wieder von .ssh / config).
Der MySQL-Hostname sollte localhost und Port 3306 sein - das sollte genau so sein, wie Sie es tun, wenn Sie mit ssh auf den 'targetHost' zugreifen, wie Sie in Ihrer Frage geschrieben haben. Da die Workbench diese Werte nach (!) Verwendet, stellt sie eine Verbindung über ssh her.
firewallhost
und Host mit Datenbank isttargethost
. db ist nur von localhost ab verfügbartargethost
(sollte zuerst eine ssh-Verbindung mit herstellentargethost
). Mit Ihrer Konfiguration wird versucht, eine Verbindung mit eingeschalteter Datenbank herzustellen,firewallhost
und dies ist eindeutig nicht in Ordnung.