Der Versuch, MySQL Workbench mit TCP / IP über SSH zu verwenden, schlug fehl


41

Ich kann in MySQL Workbench keine Verbindung über TCP / IP über SSH von einem PC aus herstellen. Was ist los?

Ich habe eine MySQL 5.1-Datenbank auf einem Ubuntu-Server namens mysql.myhost.com erstellt . Ich kann lokal darauf zugreifen. MySQL Workbench (PC) bietet die Möglichkeit, eine Verbindung über TCP über ssh herzustellen. Es wird auf Port 3306 auf dem Remote-Server ausgeführt, auf dem Befehlszeilen-MySQL einwandfrei funktioniert.

Ich habe die folgenden Sitzungsdetails verwendet:

  • Verbindungsmethode: TCP / IP über SSH.
  • SSH-Hostname: mysql.myhost.com : 3306
  • SSH-Benutzername: Mein Linux-Login
  • Öffentliche SSH-Schlüsseldatei: Meine lokale öffentliche Schlüsseldatei
  • MySQL-Hostname: 127.0.0.1 MySQL
  • Server-Port: 3306
  • Benutzername: root

Ich erhalte eine Fehlermeldung, wenn ich versuche, eine Verbindung herzustellen: "Fehler beim Herstellen einer Verbindung zu MySQL um 127.0.0.1:3306 über den SSH-Tunnel bei mysql.myhost.com mit dem Benutzer root"

"Es kann keine Verbindung zum MySQL-Server unter '127.0.0.1' (10061) hergestellt werden."

Als weiteren Test habe ich mit Putty einen SSH-Tunnel mit Port 3306 eingerichtet und kann mit MySQL Workbench über diesen Tunnel eine Verbindung herstellen, die die Verbindungen zu meinem lokalen 3306 an den Remote-Server weiterleitet, wie oben beschrieben. In Workbench funktioniert "TCP / IP über SSH" jedoch nicht.

Sekundäre Frage: Wenn Workbench nach "Pfad zur öffentlichen SSH-Schlüsseldatei" fragt, wird meine private Schlüsseldatei nicht wirklich benötigt?


4
Guter Kummer. bugs.mysql.com/bug.php?id=61368 zeigt, dass es sich um eine PRIVATE-Key-Datei handelt, die im OpenSSH-Format benötigt wird. Ich habe mich darüber gewundert, war mir aber nicht sicher.
Dizzley

Antworten:


29

Ich bin auf diese Frage gestoßen, als ich selbst auf diesen Fehler gestoßen war. Ich konnte endlich die Konfiguration herausfinden.

  1. Ich habe nichts in /etc/mysql/my.cnf angefasst, das bereits bind_address = 127.0.0.1 hat. Nur localhost kann also eine Verbindung herstellen.
  2. Ich benutze OpenSSH Server. Also habe ich in der Konfigurationsdatei / etc / ssh / sshd_config den für die TCP-Weiterleitung verantwortlichen Parameter von no auf yes geändert, also AllowTcpForwarding yes .
  3. Zum Schluss habe ich folgendes in MySQL WorkBench eingetragen.

    • SSH-Hostname: 192.168.0.8:22 (mein SSH-Server hört Port 22 ab)
    • SSH-Benutzername: sshuser
    • SSH-Schlüsseldatei: * C: \ Users \ windowsuser \ .ssh \ id_rsa * (sollte ein privater Schlüssel sein, obwohl er öffentlich lautet)
    • MySQL-Hostname: 127.0.0.1 (sollte nicht geändert werden, da der MySQL-Server standardmäßig nur an localhost gebunden ist, was ich nicht geändert habe)
    • MySQL Server Port: 3306 (auch Standard)
    • Benutzername: root

Sie müssen den SSH-Server nur noch so konfigurieren, dass er mit Schlüsseln und nicht mit Kennwörtern arbeitet. Hoffe das wird jemandem helfen.


Auf der Serverseite musste ich sicherstellen, dass die / etc / ssh / sshd_config diese Zeile enthielt: AuthorizedKeysFile /home/root/.ssh/authorized_keysund dass die authorized_keys meinen PUBLIC-Schlüssel als Eintrag hatten.
RyanNerd

Bitte klären Sie, ob Schritt 2, welcher Satz AllowTcpForwarding yesauf den Remote-Server angewendet wird, dh auf den Host mit der MySQL-Instanz, zu der wir eine Verbindung herstellen möchten. oder die lokale Maschine mit MySQL Workbench installiert
Nam G VU

@NamGVU Schritt 2 gilt für den Remote-Server, auf dem MySQL installiert ist. Insbesondere an den OpenSSH-Server, der das Tunneln zu MySQL über SSH ermöglicht.
Auge

Ich habe versucht, aber immer noch nicht zu tunneln. MySQL Workbench fordert mich auf, weitere Fehlerdetails in der Protokolldatei zu lesen. Können Sie wissen, wo Sie lesen sollen?
Nam G VU

1
Ich habe es heute zum Laufen gebracht - brauche einen Neustart, nachdem ich den AllowTcpForwardingEintrag konfiguriert habe
Nam G VU

8

Ich denke, der TCP / IP-über-SSH-Ansatz funktioniert, indem eine "normale" SSH-Verbindung hergestellt wird, die der MySQL-Verbindung zugrunde liegt (auf die gleiche Weise, wie Sie sie -Lmit dem OpenSSH-Befehlszeilenclient tunneln würden ).

Daher müssen Sie eine Verbindung zu einem SSH-Server auf dem Server angeben, über den Sie den Tunnel herstellen. Hier scheinen Sie zu verwenden mysql.myhost.com:3306, was bedeuten würde, dass Sie diesen SSH-Server (nicht MySQL) auf Port 3306 ausführen.

Es ist möglich, einen MySQL-Server auf 127.0.0.1:3306 und einen SSH-Server auf Ihrer externen IP-Adresse für mysql.myhost.comPort 3306 zu binden , aber das ist sehr unwahrscheinlich. Ich vermute, Ihr SSH-Server lauscht auf Port 22 (Standardeinstellung).

Sie sollten wahrscheinlich verwenden mysql.myhost.com:22. (Überprüfen Sie, ob Sie eine Verbindung über einen normalen SSH-Client wie Putty herstellen können.)


8

Möglicherweise müssen Sie die Benutzer in der Tabelle mysql.user überprüfen.

Führen Sie diese Abfrage aus:

SELECT user,host FROM mysql.user;

Sie sollten so etwas sehen:

mysql> SELECT user,host,password FROM mysql.user;
+------------------+-------------+-------------------------------------------+
| user             | host        | password                                  |
+------------------+-------------+-------------------------------------------+
| root             | localhost   | *7A670E02260CDEEFF062DD08F3A6F6DA079998CB |
| ping             | %           | *124E1DB56CC8D6E2FEE8315BB2544BF04B980DB6 |
| admin            | 10.67.135.% | 1a6858054a41fede                          |
| icorbin          | 10.67.135.% | 366ed93a7396650e                          |
+------------------+-------------+-------------------------------------------+
4 rows in set (0.00 sec)

Bitte beachte das

  • root @ localhost kann sich nur von localhost aus anmelden.
  • ping @ '%' kann sich über TCP / IP anmelden
  • admin@10.67.135.% kann sich nur von diesem Netblock aus über TCP / IP anmelden
  • icorbin@10.67.135.% kann sich nur von diesem Netblock aus über TCP / IP anmelden

Wenn Sie möchten, dass Root eine Verbindung über TCP / IP herstellt, müssen Sie die IP-Adresse oder den Netzblock für einen Root-Benutzer angeben.

Etwas wie das:

GRANT ALL PRIVILEGES ON *.* TO root@'%' IDENTIFIED BY 'whateverpassword';

oder wenn das root-Passwort für root @ localhost identisch ist

GRANT ALL PRIVILEGES ON *.* TO root@'%' IDENTIFIED BY PASSWORD '*7A670E02260CDEEFF062DD08F3A6F6DA079998CB ';

CAVEAT: root @ '%' wird normalerweise nicht empfohlen. Versuchen Sie es mit root@'10.% 'oder einem anderen Netblock für root.

Versuche es !!!


3
Sollte nicht ...@localhostüber den SSH-Tunnel gearbeitet werden, da für den MySQL-Server die Verbindung vom Ende des Tunnels kommt?
Bruno

@Bruno: Eine sichere Möglichkeit, dies zu wissen, besteht darin, eine Verbindung herzustellen und SELECT USER (), CURRENT_USER () auszuführen. und sehen, was es ausgibt. Die Funktion USER () gibt an, als was Sie sich authentifizieren wollten, während CURRENT_USER () anzeigt, als was Sie sich mit MySQL authentifizieren konnten. Wenn CURRENT_USER () root @ localhost wiedergibt, lautet die Antwort auf Ihre Frage yes.
RolandoMySQLDBA



2

Mein Problem war auf die Tatsache zurückzuführen, dass ich versuchte, einen ed25519SSH-Schlüssel zu verwenden. Ich habe diesen Fehler auf dem SSH-Server festgestellt in auth.log:

sshd[25251]: Connection closed by 192.168.x.x [preauth]

Nachdem ich zu einem RSA-Schlüssel gewechselt war, funktionierte alles wie erwartet.


1

Sie versuchen, über ssh eine Verbindung zum Server herzustellen, verwenden jedoch den mysql-Port. Der gewünschte Port ist derjenige, den Ihr SSH-Server abhört, normalerweise 22, dann localhost und 3306 für mysql-Hostnamen und -Port.


1

Ich stand vor dem gleichen Problem. Ich überprüfte und versuchte, AllowTcpForwarding einzustellen Ja, aber es fehlte in meiner sshd_config, also keine Hilfe. Stellen Sie sicher, dass der ssh-Hostname NICHT mit dem mysql-Hostnamen identisch ist (verwenden Sie localhost).

Wählen Sie in der Workbench +, um eine neue Verbindung hinzuzufügen, und legen Sie Folgendes fest:

  • Verbindungsmethode: Standard TCP / IP über SSH
  • SSH-Hostname: 192.168.0.50:22 (Platzieren Sie die IP-Adresse und den Port des Remote-SSH-Servers (optional))
  • SSH-Benutzername: sshuser
  • Sie können ein Kennwort festlegen oder an der Eingabeaufforderung hinzufügen
  • MYSQL-Hostname: localhost oder 127.0.0.1
  • MYSQL Server-Port: 3306
  • Sie können ein Kennwort festlegen oder an der Eingabeaufforderung hinzufügen

Testverbindung. Es sollte erfolgreich sein, dann drücke OK.Viola!


1

Manchmal funktionieren mit PuTTY erstellte Schlüssel nicht. Verwenden Sie ssh-keygen auf der Linux-Box, um ein Schlüsselpaar zu erstellen. Kopieren Sie den Inhalt der neuen ID_RSA in eine Textdatei unter Windows. Stellen Sie sicher, dass Sie den Inhalt von id_rsa.pub zu authorized_keys auf der Linux-Box hinzufügen. Alle anderen Standardeinstellungen in Workbench sind in Ordnung, einschließlich 127.0.0.1 für MySQL Hostname. Natürlich muss es Standard TCP / IP über SSH sein.


1

Ich bin auf den gleichen Fehler gekommen. Das Problem ist "etwas" das Timeout. Ich drehte sogar den Wert auf 120 Sekunden hoch, was nicht half.

In meinem Fall könnte ich es lösen, indem ich einen nslookup myserver.com durchführe und die IP-Adresse anstelle des Hostnamens benutze. Meine Annahme ist ein Problem beim Versuch, eine Verbindung von IPv4 zu IPv6 herzustellen.


0

Hatte gerade das gleiche Problem auf Ubuntu-Rechnern, die sich mit einem Server verbinden, auf dem MySQL Version 5.5.29 und MySQL Workbench 5.2.40 ausgeführt werden. Der SSH-Server erfordert die Verwendung eines SSH-Schlüssels.

Ich konnte über den Root-Benutzer keine Verbindung zum MySQL-Server herstellen, sondern musste einen separaten Nicht-Root-Benutzer für die Anmeldung erstellen. Danach konnte ich mich ganz gut verbinden.

Hoffe das hilft.


0

OK, ich weiß, das ist eine alte Frage, aber ich habe mir stundenlang die Haare darüber gezogen. Ich habe alles überprüft, was von Bruno und Eye erwähnt wurde und alles schien gut zu sein. Dann wurde mir klar, dass es sich wirklich um eine private / öffentliche Schlüsselsache handelte. Also habe ich Pageant gestartet und meinen privaten Schlüssel hinzugefügt, damit er einen öffentlichen Schlüssel erzeugt, den MySQL Workbench lesen und voila, verbunden kann! (Als MySQL Workbench anfing zu arbeiten, war es eigentlich ein bisschen antiklimaktisch, aber auf eine glückliche Weise.)

TLDR: Verwenden Sie Pageant, um einen öffentlichen Schlüssel aus Ihrem privaten Schlüssel zu generieren.


Private Schlüssel sollten niemals als öffentliche Schlüssel verwendet werden, deshalb sind sie privat.
James Anderson

@JamesAnderson ist das nicht, worum es bei dem Fehler geht? Der Text fragt nach privat, es sollte öffentlich sein ... zumindest laut dem Buglink. Oder nicht?
Thufir

-1

Nur das, was ich gefunden habe ... oft erstelle ich Benutzer auf SSH-Servern ohne Shell (wie / sbin / nologin), um zu verhindern, dass sie sich bei einem Server anmelden und dort Dateien usw. erstellen können ... (für Produktionssysteme wir mache das auf firewalls).

In einer normalen Linux-Umgebung können Sie anschließend noch Ports weiterleiten, z.

ssh -Nf -L 3306:%mysql_ip%:%mysql_port% %ssh_host%

und danach stellen Sie eine Verbindung von der lokalen Workstation her als:

mysql -h localhost:3306 -u %mysql_user% -p

Aber Workbench gibt einen Fehler aus, der keine Verbindung zu MySQL herstellen kann ... Wenn Sie die Shell für diesen Benutzer in / bin / bash ändern, funktioniert danach alles einwandfrei.

Keine Ahnung, warum Workbench eine lokale Shell auf dem Remote-SSH-Server benötigt.


-1

Erstellen Sie einfach einen neuen RSA-Schlüssel mit dem für mysql workbench korrekten Format.

Zum Beispiel:

ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.