How to connect to mysql from C# over SSH
I don't think MySql and the MySqlClient support such a thing. The connection string is specifically for the database. You will need an SSH client to connect first to the SSH server and then find a way to route the Sql connection over that tunnel.
http://www.howtogeek.com/howto/ubuntu/access-your-mysql-server-remotely-over-ssh/
I don't think there is a Microsoft .Net library for handling SSH connections but there is an open source project on Code Plex that might help.
// using Renci.sshNet PasswordConnectionInfo connectionInfo = new PasswordConnectionInfo(hostAdres, hostNaam, wachtwoord); connectionInfo.Timeout = TimeSpan.FromSeconds(30); var client = new SshClient(connectionInfo); client.Connect(); ForwardedPortLocal portFwld = new ForwardedPortLocal("127.0.0.1", Convert.ToUInt32(hostpoort), DataBaseServer, Convert.ToUInt32(remotepoort)); client.AddForwardedPort(portFwld); portFwld.Start(); var connection = new MySqlConnection("server = " + "127.0.0.1" + "; Database = database; password = PWD; UID = yourname; Port = 22"); connection.Open();
I tried all the previous steps and it didn't work, the method that worked for me was the following:
try { using(var client = new SshClient("ssh server id", "sshuser", "sshpassword")) // establishing ssh connection to server where MySql is hosted { client.Connect(); if (client.IsConnected) { var portForwarded = new ForwardedPortLocal("127.0.0.1", 3306, "127.0.0.1", 3306); client.AddForwardedPort(portForwarded); portForwarded.Start(); using (MySqlConnection con = new MySqlConnection("SERVER=127.0.0.1;PORT=3306;UID=someuser;PASSWORD=somepassword;DATABASE=DbName")) { using (MySqlCommand com = new MySqlCommand("SELECT * FROM tableName", con)) { com.CommandType = CommandType.Text; DataSet ds = new DataSet(); MySqlDataAdapter da = new MySqlDataAdapter(com); da.Fill(ds); foreach (DataRow drow in ds.Tables[0].Rows) { Console.WriteLine("From MySql: " + drow[1].ToString()); } } } client.Disconnect(); } else { Console.WriteLine("Client cannot be reached..."); } } } catch (Exception e) { Console.WriteLine(e.Message); }