Weiterleiten von Port 3306 unter Mac OS X, um eine Verbindung zu einer Remote-MySQL-Datenbank herzustellen

7

Ich bin unter Mac OS X 10.6.2 und versuche, eine Verbindung zum Ubuntu-Server 8.04.1 unter Linode herzustellen.

ssh -L 127.0.0.1:3306:[[remote ip]]:3306 user@server -N

Ich möchte SSH-Tunneling einrichten, damit ich auf einen Remote-MySQL-Server zugreifen kann.

Zuallererst wurde mir gesagt bind: Address already in use. Dies ist erst, nachdem ich den Befehl zuvor ausprobiert habe. Wie schließe ich eine Portweiterleitungssitzung manuell?

Zweitens, wenn ich den Befehl in ändere ssh -L 127.0.0.1:3310:[[remote ip]]:3306 user@server -N(ich habe den lokalen Port geändert, um ihn abzuhören). Mir wird gesagt, channel 1: open failed: connect failed: Connection refusedwenn ich versuche, über MySQL Workbench oder Sequel Pro eine Verbindung zum MySQL-Server herzustellen.

Um eine Verbindung über die MySQL Workbench herzustellen, verwende ich die folgenden Einstellungen:

  • Host: 127.0.0.1 Port: 3310 (wenn 3306 verwendet wird)
  • Benutzername: MySQL-Benutzername
  • Passwort: MySQL-Passwort
  • Datenbank: Ich habe nichts eingegeben
Jonathan Mayhak
quelle
1
Beachten Sie, dass es einen bekannten Fehler / eine bekannte Funktion in Bezug auf einige MySQL-Bibliotheken und -Tools gibt, die sich weigern, eine TCP-Verbindung herzustellen, wenn Sie localhost verwenden. Wenn localhost zum Verbinden des Unix-Sockets verwendet wird, wird dieser verwendet. bugs.mysql.com/bug.php?id=31577 Ich bin nicht sicher, ob dies für MySQL Workbench gilt. Ihr Problem scheint jedoch eher darin zu bestehen, die Verbindung herzustellen.
Zoredache

Antworten:

13

Das sollte funktionieren:

ssh -L 3310:127.0.0.1:3306 user@server

Die erste Portnummer ist der lokale Port, der verwendet werden soll (darf nicht bereits verwendet werden). Die IP zwischen den Doppelpunkten ist die IP, zu der eine Verbindung hergestellt werden soll, aus Sicht des Hosts, in den Sie sshing. Die zweite Portnummer ist der Port, zu dem eine Verbindung hergestellt werden soll. Wenn Sie eine Verbindung zu einem anderen Server als dem herstellen, auf den Sie sshing, versuchen Sie Folgendes:

ssh -L 3310:<remote-IP>:3306 user@server

Wenn ich dies mehr als einmal tun möchte, erstelle ich normalerweise einen Eintrag in ~ / .ssh / config wie folgt, wobei sshhost.example.com der Server ist, an den ich sshing, der lokale Port, den ich öffnen möchte, ist 5910 Die IP-Adresse auf der anderen Seite, zu der ich eine Verbindung herstellen möchte, lautet 192.168.35.69, und der Port, zu dem ich eine Verbindung herstellen möchte, lautet 5900:

Host desk
    Hostname sshhost.example.com
    User jed
    Port 22
    LocalForward 5910 192.168.35.69:5900

Dann kann ich an einer Eingabeaufforderung einfach tun

jed@jed-mbp:~$ ssh desk

und einen Tunnel zu meinem Desktop im Büro bekommen.

Viel Glück,

--jed

Jed Daniels
quelle
Danke für die Antwort! Ich kann die Weiterleitung selbst zu einer Art Arbeit bringen. Nachdem ich den Befehl eingerichtet habe, alle Anforderungen von Port 3310 an die Remote-IP 3306 weiterzuleiten und dann zu versuchen, die MySQL-Workbench zu verwenden, schlägt dies fehl.
Jonathan Mayhak
Ist Ihr Remote-Host so konfiguriert, dass die Weiterleitung an andere Hosts möglich ist? Hat es eine Firewall? Wird 3310 auf dem lokalen System verwendet (Sie können dies überprüfen netstat -an |grep 3310)?
Jed Daniels
Jonathan, wenn Sie den Host für MySQL angeben, verwenden Sie nicht 'localhost'. Sie müssen die vollständige IP-Adresse 127.0.0.1 angeben. Wenn Ihr Tunnel beispielsweise geöffnet ist (wie -L 3310: 127.0.0.1: 3306) und dann den MySQL-Client verwendet, sieht er folgendermaßen aus: 'mysql -h 127.0.0.1 -P 3310 -u jonathan -p'
joe