MySQL dazu bringen, den weitergeleiteten TCP-Port zu verwenden
Vermeiden Sie die Auswahl eines lokalen Unix-Sockets, wenn ein MySQL-Client über eine SSH-TCP-Weiterleitung verbinden soll.
Die SSH-Weiterleitung lauscht auf dem lokalen Port 13306, aber mysql verbindet sich weiterhin mit der lokalen Datenbank—oder meldet, dass sein lokaler Socket fehlt. Unter Unix kann ein MySQL-Client, dem localhost übergeben wird, einen Unix-Socket statt TCP wählen. Die Angabe eines Ports ändert diese Wahl nicht zwangsläufig.
Machen Sie bei einer bestehenden genehmigten TCP-Weiterleitung das Protokoll explizit:
mysql --protocol=TCP --host=127.0.0.1 --port=13306 \
--user=dbuser --password
Der Benutzername ist nur illustrativ; die Passwortoption fordert eine interaktive Eingabe an. Der Befehl verbindet sich mit dem lokalen TCP-Listener statt mit einem Unix-Socket.
Die beiden Anmeldungen getrennt halten
Eine feste SSH-Route kann diese Form haben:
ssh -N -L 127.0.0.1:13306:db.internal:3306 [email protected]
Der SSH-Server des Gateways erreicht db.internal:3306. MySQL authentifiziert dann das Datenbankkonto über diesen Bytestrom. Ein akzeptierter SSH-Schlüssel gewährt keine Datenbankanmeldung, und Quellenbeschränkungen der Datenbank sehen die Verbindung von dieser Seite der Route eintreffen.
Dies ist ein fester TCP-Adapter, keine von mysql genutzte SOCKS-Einstellung. Die Anwendung benötigt keine SOCKS-Aushandlung, weil der Weiterleitungsendpunkt ein vordefiniertes Ziel hat.
Behalten Sie die beabsichtigte TLS-Identität der Datenbank und die Zertifikatsrichtlinie bei, wo sie verwendet werden. Den Socket mit Loopback zu verbinden macht ein Datenbankzertifikat nicht für einen anderen Dienstnamen gültig. Eine erfolgreiche lokale TCP-Verbindung entscheidet über die Transportwahl, nicht über die spätere Datenbankauthentifizierung oder TLS-Prüfungen.