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 targetHost
und 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
ssh
mysql
ssh-tunneling
mysql-connection
Michal_Szulc
quelle
quelle
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.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 Computerdatabasehost
) verbunden ist, da dieser verbunden ist als someshelluser aufdatabasehost
.Und jetzt können Sie sich mit der Workbench verbinden:
firewallhost
firewallhost
SSH-Schlüsseldatei: Alternativ eine Schlüsseldatei
MySQL-Hostname:
localhost
(als wir einen Tunnel auffirewallhost
dem lokalen Host geöffnet haben )Um den SSH-Tunnel
firewallhost
dauerhaft zu aktivieren, können Sie ihn dort wie folgt mit einer Schlüsseldatei (für den Zugriffdatabasehost
) und einem getrennten Prozess über den Bildschirm starten . Dies kann in Ihre rc.local oder was auch immer Sie verwendenfirewallhost
.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 erfolgenfirewallhost
, 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:
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.
quelle
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.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.Failed to Connect to MySQL at localhost:3306 through SSH tunnel at username@-o proxycommand="ssh -W %h:%p firewallhost" targethost with user root