Mit Workbench kann keine Verbindung zur MySQL-Datenbank über SSH hergestellt werden

10

Ich versuche, über SSH-Tunneling von einem unserer Web-App-Server mit MySQL Workbench eine Verbindung zu meiner Datenbank herzustellen. Hier ist die Grundkonfiguration; Beachten Sie, dass ich aus Sicherheitsgründen einige Werte im Screenshot geändert habe.

Workbench-Screenshot

Das Problem ist, dass jedes Mal, wenn ich versuche, eine Verbindung über einen SSH-Tunnel von einem unserer App-Server herzustellen, die folgende Fehlermeldung angezeigt wird:

Verbindung zu us-east-1.amazonaws.com über den SSH-Tunnel unter computer.amazonaws.com mit dem Benutzer social_shop_prod fehlgeschlagen. Es kann keine Verbindung zum MySQL-Server unter 127.0.0.1 hergestellt werden.

Wenn ich jedoch dieselben Anmeldeinformationen über SSH über die folgende Befehlszeile verwende:

mysql -u social_shop_prod -h us-east-1.amazonaws.com -p

Ich kann erfolgreich eine Verbindung herstellen und die interaktive MySQL-Eingabeaufforderung erhalten.

Ich habe hier mit dem Rest meines Entwicklungsteams gesprochen und keiner von uns kann herausfinden, warum ich mit Workbench nicht über SSH von unseren App-Servern tunneln kann. aber wenn ich SSH zu einem unserer App-Server und Verbindung zu MySQL über die Befehlszeile; Ich kann mich erfolgreich verbinden.

Und warum wird versucht, eine Verbindung über 127.0.0.1 herzustellen? Das habe ich in der Konfiguration nicht angegeben; Meine Hosts-Datei leitet die unten gezeigten Domains auch nicht auf diese IP um.

Jede konstruktive Eingabe wird sehr geschätzt.

Frank Rosario
quelle

Antworten:

5

Da Sie eine Verbindung über einen SSH-Tunnel herstellen, bedeutet dies, dass der MySQL-Port 3306 von us-east-1.amazonaws.com lokal auf Ihrem Computer geöffnet wird. Die IP-Adresse Ihres Computers lautet 127.0.0.1 oder localhost. Wenn Sie eine Verbindung zum MySQL-Server unter us-east-1.amazonaws.com herstellen, greifen Sie tatsächlich über 127.0.0.1, dh Ihren Computer, darauf zu. Wenn Sie einen anderen Tunnel geöffnet hatten oder MySQL lokal auf Ihrem Computer ausgeführt wurde, kann es sein, dass ein anderer MySQL-Server Ihre Authentifizierungsversuche ablehnt

Es gibt einige Tests, die Sie ausprobieren können:

1. Welche Ports überwacht Ihr Windows-Computer?

An einer Eingabeaufforderung: netstat -a (listet alle offenen Ports auf)

Unter Linux wäre es: netstat -tlpn

2. Grundlegender Konnektivitätstest

Über eine DOS-Eingabeaufforderung oder eine Linux-Konsole: Telnet 127.0.0.1 3306

Wenn Sie eine Auszeit bekommen oder ein anderes Programm antwortet, ist Ihr Tunnel nicht richtig eingerichtet.

3. Ändern Sie die Portnummer, die MySQL Workbench lokal öffnet

Wir gehen davon aus, dass die MySQL-Workbench den Tunnel auf Ihrem Computer erstellt. Wenn ja, versuchen Sie in der MySQL-Workbench, durch eine andere Portnummer wie 9000 zu tunneln.

Stellen Sie sicher, dass 9000 nicht als offener Port von netstat -a aufgeführt ist

Wenn Sie SSH-Zugriff auf us-east-1.amazonaws.com haben

4. Versuchen Sie, über us-east-1.amazonaws.com eine Verbindung zu MySQL herzustellen

mysql -u myuser -h 127.0.0.1 -p

Und wie Rolando sagte, möchten Sie überprüfen, ob Sie mit den richtigen Anmeldeinformationen verbunden sind. Wenn Sie beispielsweise eine Verbindung als [email protected] herstellen und einen Benutzer myuser ohne Host haben, können Sie wahrscheinlich keine Verbindung über [email protected] herstellen.

Craig Efrein
quelle
2

Der Grund für die Kontaktaufnahme mit 127.0.0.1 liegt darin, dass der Tunnel einen Port auf Ihrem lokalen Computer mit dem Remote-Host verbindet. Die Nachricht scheint darauf hinzudeuten, dass keine SSH-Verbindung hergestellt wird.

Versuchen Sie dies über die Befehlszeile:

ssh -L 33000:remotehost:3306 user@remotehost

Stellen Sie sicher, dass SSH weitergeleitete Ports zulässt. Wenn Sie eine Nachricht erhalten, die besagt, dass die Weiterleitung nicht zulässig war oder abgelehnt wurde, ist dies der Grund.

Um dies zu beheben, müssten Sie die Serverkonfiguration ändern. Fügen Sie diese Konfiguration dem SSH-Server hinzu:

AllowTcpForwarding yes

Vergessen Sie nicht, den Server neu zu starten, um diese Konfiguration zu aktivieren.

Mei
quelle
Kannst du diesen Befehl ein bisschen erklären? Sie binden die Adresse? Kann das mit MySQL-Befehlen kombiniert werden?
Thufir
Mit SSH bauen Sie hier einen Tunnel auf, sonst nichts. Es verbindet einen Remote-Port mit einem lokalen Port. In diesem Fall binden Sie einen lokalen Port an den Remote-MySQL-Port.
Mei
1

Ich habe mich fast 2 Wochen lang mit diesem Problem beschäftigt, jetzt habe ich es geschafft, es zu beheben. Ich werde es hier posten, damit mehr Leute es versuchen können.

Ok, ich verwende OpenSSH (Win10 native) und Workbench 8.

Schritt für Schritt:
1. Fügen Sie dem Agenten Ihre SSH-Hostschlüssel mit ssh-add hinzu.
2. Generieren Sie die Schlüsselpaare mit ssh-keygen. In meinem Fall werden diese Dateien automatisch Users/myUser/.sshgemäß den Installationskonfigurationen aufgerufen.
3. Fügen Sie den öffentlichen Schlüssel ohne Erweiterungen zur Datei authorized_keys hinzu (die sich in meinem Fall in Ihrem Serverinstallationspfad befinden muss Windows/System32/OpenSSH/.ssh).
4. Fügen Sie die generierten Schlüssel, die Sie gerade erstellt haben, mit ssh-add zum Agenten hinzu.

Die obigen Schritte sind so ziemlich die Konfiguration eines Befehlszeilen-SSH-Servers, von dem ich herausfinde, dass das OP, das bereits für seine Verbindung ausgeführt wurde, über das Terminal funktioniert. Um MySQL Workbench 8 zu konfigurieren, machen Sie genau das Gleiche, außer dass Sie die Datei private_key.pem in ein OpenSSH-Format konvertieren müssen, bevor Sie sie nach Users/myUser/.sshund verschiebenOpenSSH_instalation_path/.ssh

  1. Konvertieren Sie private_key.pem mit PUTTYgen in das OpenSSH-Format.
  2. Kopieren Sie das Feld "Öffentlicher Schlüssel zum Einfügen in OpenSSH Authorized_keys" .
  3. Speichern Sie den öffentlichen Schlüssel in den Ordnern User/myUser/.sshundOpenSSH_instalation_path/.ssh
  4. Fügen Sie den von PUTTY kopierten Schlüssel in die Datei authorized_keys im OpenSSH_instalation_path/.sshOrdner ein.
  5. Exportieren Sie den OpenSSH-Formatschlüssel in das User/myUser/.ssh.
  6. Starten Sie die Dienste sshd und mysql neu
  7. Konfigurieren Sie die Workbench so, dass mit dem konvertierten privaten Schlüssel eine Verbindung zum SSH-Server hergestellt wird.

UPDATE: In Ihrer Datei sshd_config müssen Sie Folgendes festlegen:

PermitRootLogin ohne Passwort
PubkeyAuthentication ja
PasswordAuthentication nein
PermitEmptyPasswords nein
AllowTcpForwarding ja

LESEN SIE BITTE:

Ich bin ein unerfahrener Analyst. Wenn also ein fortgeschrittener Benutzer weiß, welcher der beiden .ssh-Ordner der richtige ist, teilen Sie uns dies bitte mit. Ich finde das OpenSSH diesbezüglich etwas mehrdeutig.
Dies hat bei mir funktioniert, als eine lokale Entwicklungsumgebung nur mit localhost eingerichtet wurde. Nur zu Lernzwecken.
Möglicherweise möchten Sie MySQL Workbench-Benutzern myUser @ localhost hinzufügen, bevor Sie die Verbindung testen.
Wenn es wirklich gebraucht wird, kann ich Bilder hinzufügen.

Rafael Corrêa
quelle
0

In meinem Fall musste das Problem behoben werden , dass ich zu einem gültigen Domänennamen oder einer gültigen IP anstelle eines benutzerdefinierten Hosts zurückkehren musste.

Benutzerdefinierte Hostauflösung fehlgeschlagen ( /etc/hosts)

Ich arbeite mit einem lokalen Host-Auflösungsmechanismus, der Folgendes definiert:

#.#.#.#    my-vm

Aus irgendeinem Grund mit MySQL 5.2.47auf Linux Mint 14 (Nadia)dem ähnelt Ubuntu 12.10 (Quantal)dem Bewältigungsmechanismus nicht funktioniert .

Lösung

Wechseln Sie einfach zu einem gemeinfreien Namen , my-website.comum das Problem zu beheben.

Édouard Lopez
quelle
@ Mat behoben, thanj = ks
Édouard Lopez
0

Ich hatte ein ähnliches Problem, und dies mag offensichtlich sein, aber überprüfen Sie Ihre Firewall-Regeln in AWS. Ich habe einen IP-Bereich festgelegt, um Verbindungen von außen einzuschränken. Und die IP in meinem Büro hat sich geändert, sodass sie außerhalb des IP-Bereichs lag. Mein Kollege in einem anderen Büro konnte immer noch eine Verbindung herstellen, daher dachte ich, das Problem liegt auf meinem PC, aber das Problem lag bei den Firewall-Regeln in AWS. Hoffe das hilft jemandem :)

Asped
quelle