mein neuer Produktionsserver ist nur über SSH-Doppeltunnel sichtbar. Ich kann erreichenZielhostüber die Ubuntu 14.04-Konsole einfach den Befehl ausführen ssh targetHost
und dann die MySQL-CLI auf dem Remote-Rechner ausführen, aber ich möchte über die GUI-Workbench auf die MySQL-Datenbank zugreifen. Wie konfiguriere ich die Verbindung in Workbench, um dies zu erreichen?
Mein.ssh/konfiguration:
Host targetHost, firewallHost
User username
IdentityFile /home/michalszulc/.ssh/id_rsa
Host targetHost
proxycommand ssh -W %h:%p firewallHost
Host firewallHost
hostname firewallHost.example.com
port 2201
passwordauthentication no
controlmaster auto
controlpath ~/
Host targetHost
Hostname 123.123.123.123
Antwort1
Der Vorgang ist einfach. Erstellen Sie eine neue Verbindung und wählen Sie die Verbindungsmethode Standard TCP/IP über SSH. Werte für den SSH-Server, der den Tunnel bereitstellt:
- SSH-Hostname: die Adresse des Servers, der den SSH-Tunnel erstellt (SSH-Server und MySQL können derselbe Host oder dieselbe Netzwerkadresse sein, dies hängt von der Konfiguration ab).
- SSH-Benutzername: Benutzername im SSH-Server.
- SSH-Passwort: Benutzerpasswort im SSH-Server (sofern der Modus Kennwortauthentifizierung konfiguriert ist).
- SSH-Schlüsseldatei: Eine Datei, die den privaten Schlüssel für die Authentifizierung auf dem Server enthält (wenn Sie
PasswordAuthentication
die Richtlinie auf dem SSH-Server aktiviert haben, hat sie den Wertno
).
Werte zur Anbindung an DBMS MySQL.
- MySQL-Hostname: Die Adresse des Hosts, auf dem MySQL den Dienst ausführt, in Bezug auf den SSH-Server. Wenn der SSH- und MySQL-Dienst auf demselben Host ausgeführt werden, ist der Eastbound-Wert localhost oder 127.0.0.1, da der MySQL-Dienst nach dem Herstellen der Verbindung durch den Tunnel auf Anfragen von localhost wartet (je nach dem in der
bind_adress
MySQL-Direktive festgelegten Wert). - MySQL-Server-Port: Der MySQL-Verbindungsport ist im Allgemeinen 3306.
- MySQL-Benutzername: Benutzername, mit dem die Verbindung zu MySQL hergestellt wird. Dies bedeutet, dass es sich um einen gültigen MySQL-Benutzer handeln muss und dieser für die Verbindung vom Tunnel aus autorisiert ist.
- Standardschema: Entspricht SQL USE.
Antwort2
Es ist nicht klar, ob wir Ihr Setup richtig hinbekommen. Ich gehe also davon aus, firewallhost
dass der Host von Ihrer Workbench aus erreichbar ist. Daher muss auf diesem Server ein offener Port erstellt werden, der auf den „echten“ MySQL-Server hinter dieser Firewall zugreifen kann.
Das ist ganz ok, wenn Sie einen persistenten SSH-Tunnel auf dem einrichten firewallhost
. Das geschieht wie folgt auffirewallhost
ssh -L localhost:33060:localhost:3306 someshelluser@databasehost
Dadurch wird ein OpenSSH-Tunnel für den lokalen Host (auf keiner Netzwerkkarte öffentlich) auf Port 33060 (oder welchem Port auch immer Sie hier frei haben) erstellt, firewallhost
der wiederum über diesen Tunnel mit dem Port 3306 (wieder auf dem lokalen Host, aber auf dem Computer databasehost
) verbunden ist, da er als someshelluser auf verbunden ist databasehost
.
Und jetzt können Sie eine Verbindung mit Workbench herstellen:
- SSH-Hostname:
firewallhost
- SSH-Benutzername: ein gültiger Benutzer auf
firewallhost
- SSH-Passwort: Ihr Pass für einen gültigen Benutzer
SSH-Schlüsseldatei: Alternative zu einer Schlüsseldatei
MySQL-Hostname:
localhost
(da wir einen Tunnel auffirewallhost
dem lokalen Host geöffnet haben)- MySQL-Server-Port: 33060
- MySQL-Benutzername: Ihr MySQL-Benutzer
Um den SSH-Tunnel firewallhost
dauerhaft zu haben, 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 Ihr rc.local oder was auch immer Sie verwenden, eingefügt werden 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 einfach „vorstellen“, dass ein solcher SSH-Tunnel jeden Port-Stream von einer Maschine zur anderen „transportieren“ kann, indem er einen „neuen“ Port auf der Maschine öffnet, auf der Sie diesen SSH-Tunnel erstellen (hier firewallhost
). Dies kann sogar auf der öffentlichen Netzwerkkarte von erfolgen firewallhost
, aber Sie möchten es auf dem lokalen Host, da Sie Ihren MySQL-Port nicht der Öffentlichkeit preisgeben möchten ;)
AKTUALISIEREN:
Ok, da Sie keinen direkten Zugriff firewallhost
zum Erstellen eines persistenten Tunnels haben, versuchen Sie es anders. Sie sagten, Sie können eine Verbindung mit dem Proxy-Befehl herstellen. Da Sie es inline und nicht als Option „-o“ 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önnten Sie Folgendes versuchen:SSH-Hostname' in Workbench. Gegebenenfalls können Sie damit SSH-Parameter angeben. Ich habe es nicht getestet, aber es ist nicht ungewöhnlich, dass Anwendungen den Inhalt von Hostnamenfeldern direkt an den SSH-Aufruf übergeben.
SSH-Hostname:
-o ProxyCommand="ssh -W %h:%p firewallhost.example.org" mysqlserver.example.org
Dies sollte Sie über Ihren Firewall-Host auf Ihren MySQL-Server bringen. Von hier aus können Sie Ihre MySQL-Einstellungen verwenden, als ob Sie eine direkte Verbindung zum MySQL-Server herstellen würden, wie es die Workbench erwartet.
UPDATE2:
Wie Sie geschrieben haben, befinden Sie sich auf derselben Maschine (Ubuntu 14), die eine Verbindung zu Ihrer MySQL-Datenbank dahinter herstellen kann. firewallhost
Sie sollten in Workbench einfach die Werte verwenden, die Sie auf der Konsole verwenden. Die Workbench verwendet Ihre .ssh/config, wenn Sie Workbench mit demselben Benutzer aufrufen, für den die .ssh/config bestimmt ist.
Endlich:
Der SSH-Hostname wäre einfach „targetHost“, wobei der Proxy-Befehl aus Ihrer .ssh/config Sie über „firewallHost“ zum „targetHost“ tunnelt. Der SSH-Benutzername ist „username“ (wieder aus .ssh/config).
Der MySQL-Hostname sollte localhost und der Port 3306 sein – das sollte genau so sein, wie Sie es tun, wenn Sie per SSH auf den „targetHost“ zugreifen, wie Sie in Ihrer Frage geschrieben haben. Denn Workbench wird diese Werte verwenden, nachdem(!) es per SSH eine Verbindung hergestellt hat.