SSH-Tunnel über MySQL Workbench

8

Mein neuer Produktionsserver ist nur über den SSH-Doppeltunnel sichtbar. Ich kann targetHost über die 14.04-Konsole von Ubuntu erreichen, indem ich einfach einen Befehl ausführe ssh targetHostund dann mysql cli auf einem Remotecomputer ausführe, aber ich möchte über gui Workbench zu MySQL db gelangen. Wie konfiguriere ich die Verbindung in Workbench, um dies zu erreichen?

Meine .ssh / config :

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
Michal_Szulc
quelle

Antworten:

4

Der Prozess 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 auf dem SSH-Server.
  • SSH-Passwort: Benutzerkennwort auf dem SSH-Server (falls im Modus Kennwortauthentifizierung konfiguriert).
  • SSH-Schlüsseldatei: Eine Datei, die den privaten Schlüssel zur Authentifizierung auf dem Server enthält, wenn Sie die PasswordAuthenticationRichtlinie auf dem SSH-Server aktiviert haben, hat den Wert no.

Werte für die Verbindung zu 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 der MySQL-Dienst auf demselben Host ausgeführt werden, lautet der Wert in Richtung Osten localhost oder 127.0.0.1, da der MySQL-Dienst nach dem Herstellen der Verbindung über den Tunnel auf Anforderungen von localhost wartet (abhängig von dem in der Anweisung festgelegten Wert bind_adressMySQL).
  • MySQL Server Port: Verbindungsport MySQL, generalemente ist 3306.
  • MySQL-Benutzername: Benutzername, über den eine Verbindung zu MySQL hergestellt wird, dh es muss ein gültiger Benutzer von MySQL sein und für die Verbindung aus dem Tunnel autorisiert sein.
  • Standardschema: Entspricht der SQL-Verwendung.
Juan Antonio Clavero Garcia
quelle
Ich stecke immer noch fest. Zum Beispiel: Mein Tunnelserver ist firewallhostund Host mit Datenbank ist targethost. db ist nur von localhost ab verfügbar targethost(sollte zuerst eine ssh-Verbindung mit herstellen targethost). Mit Ihrer Konfiguration wird versucht, eine Verbindung mit eingeschalteter Datenbank herzustellen, firewallhostund dies ist eindeutig nicht in Ordnung.
Michal_Szulc
versuchen: ssh -L 33000: targethost: 3306 user @ targethost
malyy
1

Nicht zu klären, ob wir Ihr Setup korrekt bekommen. Ich gehe firewallhostalso 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 firewallhostdem 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:

  • SSH-Hostname: firewallhost
  • SSH-Benutzername: Ein gültiger Benutzer ist aktiviert firewallhost
  • SSH-Passwort: Ihr Pass für einen gültigen Benutzer
  • SSH-Schlüsseldatei: Alternativ eine Schlüsseldatei

  • MySQL-Hostname: localhost(als 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 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 firewallhostErstellen 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 firewallhostkann. 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.

Jimmy Koerting
quelle
Ich kann nichts ändern firewallhost. Aus diesem Grund habe ich einen Beispiel-Proxy-Befehl bereitgestellt, den ich von sysadmin erhalten habe. Ich suche nach einer Lösung von meinem lokalen Host, ohne den Proxy und den Zielhost zu stören.
Michal_Szulc
Ok, dann geben Sie bitte weitere Infos an: - Ist nc installiert firewallhost? - Da '-o ProxyCommand' eine ssh-Option und kein echter Befehl ist, geben Sie bitte genau an, wie Sie Ihre MySQL über die Ubuntu-Konsole erreichen, wie Sie angegeben haben. Dann können wir Ihnen vielleicht sagen, wie Sie dies in die WorkBench einfügen können. Natürlich werden keine echten IPs / Hostnamen benötigt, aber zeigen Sie es wie [email protected], um sicherzustellen, dass wir verstehen, was ein echter Befehl ist, was für ein Alias ​​usw.
Jimmy Koerting
@Michal_Szulc Hast du versucht, was ich in meinem Update geschrieben habe? Funktioniert es für dich?
Jimmy Koerting
Ja, ich habe es versucht. Leider bekam ich eine Nachricht:Failed to Connect to MySQL at localhost:3306 through SSH tunnel at username@-o proxycommand="ssh -W %h:%p firewallhost" targethost with user root
Michal_Szulc
ok, als Workbench macht es mit der user @ -Syntax, die es unmöglich macht, ssh-Parameter hinzuzufügen. Ist es eine Linux Box, an der Sie arbeiten, oder Windows? Wenn es Linux ist - machen Sie Ihren SSH-Tunnel auf Ihrer lokalen Box und tunneln Sie durch 2 Computer (Ihre Box tunnelt in den Firewallhost in den MySQL-Server). Das ist das gleiche. Wenn Sie eine Linux-Box verwenden, lassen Sie es mich wissen. Dann werde ich Ihnen einige Zeilen geben, was zu tun ist.
Jimmy Koerting