2016-11-14 2 views
1

Der Versuch, mit der Renci-Host-SSH-Bibliothek auf einen MySQL-Server zuzugreifen.SSH-Zugriff mit Renci.SSH auf MySQL-Server

Ich habe arbeiten sie, indem Sie das Info Creating a forwarded port within an SSH tunnel

Insbesondere diese Linie hätte meine lokal Port erfolgreich so eingerichtet, dass sie gebunden werden könnten:

ForwardedPortLocal port = new ForwardedPortLocal("localhost", 3306, "localhost", 3306)); 

Das ist in Ordnung, aber wie ich es verstehe Der SSH-Client ist an 3306 gebunden, um Daten vom Server zu empfangen. Dies ist ein Problem, wenn der Benutzer MySQL bereits installiert hat, da er diesen Port verwenden wird, so dass mein Dienst dies nicht kann. Natürlich kann der Service gestoppt werden, aber das ist kein sehr freundlicher Prozess. Ich hatte erwartet, in der Lage zu sein, einen Hoch - Ephemeren - Port zu passieren, um für die Dauer meiner Verbindung zu hören.

Ich habe ein wenig verwirrt, welchen Parameter ich übergeben sollte, ursprünglich gedacht, der zweite Port wäre der lokale Port, an den ich mich binden muss. Nach umfangreichen Experimenten zu Port-Konfigurationen weiß ich nicht, wie ich damit umgehen soll.

Zusätzlich versuchte ich verschiedene Überladungen, aber keine der 3 anderen Überladungen schien zu produzieren, was ich wollte.

Irgendwelche Tipps?

Danke,

Andy

Antwort

1

Ok ich das jetzt behoben haben.

Die Lösung besteht darin, die MySQL-Connector-Zeichenfolge so zu ändern, dass ein Ephemeral-Port verwendet wird. Hat zufällig gewählt.

server = localhost; uid =; pwd =; Datenbank =; port = 14324

Dann ändern Sie den ForwardedLocalPort, um an diesen Port zu binden.

ForwardedPortLocal port = new ForwardedPortLocal("localhost", 14324, "localhost", 3306); 

wir die Weiterleitung der Verbindung So 14324 localhost 3306 auf dem Remote-Server auf localhost.

Nächste Herausforderung, wie sicherzustellen, dass der Port, den ich verwende, nicht bereits gebunden ist !!

so dass diese Anwendung zu tun, um die Überlastung, die keine Portnummer benötigt also

ForwardedPortLocal("localhost", "localhost", 3306) 

Dies eine verfügbar kurzlebig Port an Ihren Prozess wird vergeben, die unter Verwendung fand:

port.Start(); 
var portNumber = port.BoundPort; 

Diese kann dann zu Ihrer MySQL-Verbindungszeichenfolge hinzugefügt werden.