/ / "Keine Verbindung zu einem der angegebenen MySQL-Hosts möglich", wenn eine Verbindung zur MySQL-Datenbank über SSH.NET-Tunnel in C # - c #, mysql, .net, ssh, ssh.net hergestellt wird

"Verbindung zu keinem der angegebenen MySQL-Hosts möglich", wenn eine Verbindung zur MySQL-Datenbank über SSH.NET-Tunnel in C # - c #, mysql, .net, ssh, ssh.net hergestellt wird

Ich versuche mit C # und SSH.Net eine Verbindung zu einer MySQL Datenbank herzustellen, die auf Ubuntu läuft.

Unsere MySQL DB erlaubt nur Verbindungen von einemWebserver und gehe durch das, was ich aus dem Code unten sehen kann, das Client-Objekt verbindet sich mit dem Webserver und dann öffne ich einen Port, um 3306 auf dem DB-Server zuzuordnen. Endlich, das MySQLConnection Objekt öffnet eine Verbindung zur MySQL DB.

Allerdings komme ich mit Ausnahme in sql.Open() Erklärung:

Es konnte keine Verbindung zu einem der angegebenen MySQL-Hosts hergestellt werden

Ich habe andere Themen zum selben Thema überprüft und ihre Vorschläge versucht, aber keine davon scheint mir zu helfen.

und viele mehr.

Hier ist ein Testcode, den ich verwende -

var ci =
new ConnectionInfo(
"server", "userid", new PasswordAuthenticationMethod("userid", "userpwd"));
using (var client = new SshClient(ci))
{
client.Connect();
if (client.IsConnected) //This part works fine - I can connect to my Webserver.
{
//not sure if this is correct in our context.
var local = new ForwardedPortDynamic("127.0.0.1",3306);
client.AddForwardedPort(local);
try
{
local.Start();
}
catch (SocketException se)
{

}
string connStr =
"Server = dbserver;Port = 3306;Database = dbname;Uid = dbuserid;Pwd = dbpwd;";
MySqlConnection sql = new MySqlConnection(connStr);

try
{
sql.Open();
local.Stop();
}
catch (MySqlException se)
{
}
}
}

Alle Anmeldeinformationen, die ich in meinen Code eingegeben habe, wurden von einer funktionierenden MySQLWorkbench-Verbindung zur MySQL-DB entfernt.

Ich arbeite ausschließlich in einer Windows-Umgebung, also wenn Sie möchten, dass ich auf dem Ubuntu-Server nach etwas suche, sagen Sie mir bitte, wenn möglich, wie Sie danach suchen.

Antworten:

1 für die Antwort № 1

Sie verbinden sich über einen SSH-Tunnel.

Ihr Hauptproblem ist also, dass die Host in der Verbindungszeichenfolge muss sein localhost (das lokale Ende des SSH-Tunnels), nicht dbserver. Oder noch besser, benutzen ForwardedPort.boundHost (und ForwardedPort.boundPort).


Das zweite Problem ist, dass Sie nicht verwenden können ForwardedPortDynamic, aber ForwardedPortLocal.


var forwardedPort = new ForwardedPortLocal("127.0.0.1", "127.0.0.1", 3306);

client.AddForwardedPort(forwardedPort);
forwardedPort.Start();

string connStr =
string.Format(
"Server = {0};Port = {1};Database = dbname;Uid = dbuserid;Pwd = dbpwd;",
forwardedPort.BoundHost, forwardedPort.BoundPort);

Siehe auch Verbindung zu MySQL von .NET mit SSH.NET-Bibliothek.


Wenn Ihre Datenbank nicht auf dem Webserver läuft, sondern auf dbhost, du musst das in der benutzen ForwardedPortLocal Konstrukteur:

var forwardedPort = new ForwardedPortLocal("127.0.0.1", "dbhost", 3306);