SSH-Tunnel über MySQL Workbench

SSH-Tunnel über MySQL Workbench

mein neuer Produktionsserver ist nur über SSH-Doppeltunnel sichtbar. Ich kann erreichenZielhostüber die Ubuntu 14.04-Konsole einfach den Befehl ausführen ssh targetHostund 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 PasswordAuthenticationdie Richtlinie auf dem SSH-Server aktiviert haben, hat sie den Wert no).

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_adressMySQL-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, firewallhostdass 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, firewallhostder 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 auffirewallhost
  • 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 auf firewallhostdem lokalen Host geöffnet haben)

  • MySQL-Server-Port: 33060
  • MySQL-Benutzername: Ihr MySQL-Benutzer

Um den SSH-Tunnel firewallhostdauerhaft 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 firewallhostzum 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. firewallhostSie 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.

verwandte Informationen