mySQL connection-string über den SSH-tunnel ohne Passwort
Bekommen habe SSH-Zugriff auf einen server mit mySQL. Mein Zugang authentifiziert sich über meinen öffentlichen Schlüssel, mit dem kein weiteres Kennwort erforderlich.
Mit Putty, ich bin in der Lage per SSH auf den server mit meinem privaten Schlüssel, melden Sie sich direkt in die mySQL-Datenbank über das command-line-tools und ausführen von SQL-direkt. Ich bin auf der Suche zu emulieren, dies durch ein C# - Dienst (Weiterleitung von port 3306 über die SSH-Verbindung), leider alle Verbindungszeichenfolgen, die in http://www.connectionstrings.com/mysql/ benötigen Sie ein Kennwort.
Mein rough-and-ready code, so weit, mit MySql.Data
und SSH.NET
:
PrivateKeyFile file = new PrivateKeyFile(@" [ path to private key ]");
using (var client = new SshClient(" [ server ] ", "ubuntu", file))
{
var port = new ForwardedPortLocal(3306, "localhost", 3306);
client.AddForwardedPort (port);
client.Connect();
var connection = new MySqlConnection(
"server=localhost;database=[database];uid=ubuntu;"
);
MySqlCommand command = connection.CreateCommand();
MySqlDataReader Reader;
command.CommandText = "select * from sample";
connection.Open();
Reader = command.ExecuteReader();
while (Reader.Read())
{
string thisrow = "";
for (int i = 0; i < Reader.FieldCount; i++)
thisrow += Reader.GetValue(i).ToString() + ",";
Console.Write(thisrow);
}
connection.Close();
client.Disconnect();
}
Läuft der code ohne die SshClient
Abschnitt, zu reden, um eine Datenbank auf dem lokalen Netzwerk (mit einem bekannten Benutzernamen und Passwort), funktioniert perfekt. Mit der SshClient
Abschnitt in, und mit einem Haltepunkt sobald der tunnel eingerichtet wurde, kann ich mit telnet auf localhost:3306
- und bekommen eine Antwort von mySQL.
Jedoch der folgende Fehler wird geworfen auf die connection.Open()
Linie:
Authentifizierung, host 'localhost' für den Benutzer 'ubuntu' mit der Methode 'mysql_native_password' ist fehlgeschlagen mit der Meldung: Access denied for user 'ubuntu'@'localhost' (using password: YES)
Also ... was Verbindungszeichenfolge brauche ich? Oder habe ich etwas verpasst subtile anderswo?
Du musst angemeldet sein, um einen Kommentar abzugeben.
MySQL ist in der Lage zu leugnen, Anmeldungen, wenn Sie eine Verbindung aus dem falschen host. Vielleicht haben Sie nicht zulassen, dass ubuntu eine Verbindung von localhost?
https://dev.mysql.com/doc/refman/5.1/en/connection-access.html
Das problem stellte sich heraus, dass in Bezug auf den SSH-tunnel an sich, die Erstellung der tunnel mit Putty statt und entfernen Sie den code, der ausgeführt wird, bevor die Zeile:
nun gelingt.
Zwei Lektionen gelernt: