2012-05-30 39 views
5

Me dieron un enlace para usar esta biblioteca para la conexión a través de la conexión SSH a una base de datos MySQL con C#.Conexión SSH a MySQL usando la biblioteca SSH.NET

Aquí está el LINK a la biblioteca ya que muchos de ustedes encontrarán esto interesante ya que no necesitan abrir un canal SSH manualmente.

Esta es una biblioteca muy detallada y tiene muchas funciones, pero lo que quiero hacer es bastante simple. Solo quiero abrir un canal SSH cada vez que quiero escribir en la base de datos.

Mientras buscaba a través de la fuente que se proporciona vine hasta esta parte del código que se puede encontrar en TestSshCommand.cs y yo creo que pueda usar esta parte de mis conexiones pero necesito su ayuda para Haz que funcione ya que tengo mi cadena de conexión. No sé cómo conectarla por completo.

Código:

public void Test_Execute_SingleCommand() 
     { 
      using (var client = new SshClient(Resources.HOST, Resources.USERNAME, Resources.PASSWORD)) 
      { 
       client.Connect(); 
       var result = ExecuteTestCommand(client); 
       client.Disconnect(); 

       Assert.IsTrue(result); 
      } 

Mi código para connectiong al canal no SSH es:

con.ConnectionString = ConfigurationManager.ConnectionStrings["Con2"].ConnectionString; 
      con.Open(); 
      cmd = new MySqlCommand("SELECT COUNT(*) FROM " + ConfigSettings.ReadSetting("main"), con); 

    //...... more of the code 

Entonces, ¿cómo puedo combinar este código a la anterior por lo que primero se puede abrir un canal SSH y entonces ejecuta mi consulta?

¿Es necesario poner mi código dentro conectar y desconectar funciones?

Una más creo que he agregado .dll archivo dentro de las referencias y debo decir que ninguna de las importaciones está funcionando. Entonces, ¿alguien puede descargar la biblioteca y probar este código simple para ver si hay referencias trabajando en su proyecto y para que todos (que son muchos) puedan tener una solución de trabajo para sus proyectos futuros?

EDIT:

Este es mi código que yo estaba tratando de hacer más adelante. Mi conexión SSH funciona ahora solo necesita combinar esos dos para que funcione.

El problema es que necesito tener una base de datos localmente en mi pc y necesito conectarme al servidor. Así reenvío de puerto no funcionará como somone dice en el foro que no puedo puerto hacia adelante mientras MySQL ya tiene puerto para ejecutar

using (var client = new SshClient("cpanel****", "******", "******")) 
      { 
      client.Connect(); 
      con = new MySqlConnection(GetConnectionString()); 
      con.Open(); 
      cmd = new MySqlCommand(String.Format("insert into {0} values (null, ?Parname , ?Parname2, ?Parname3, ?Parname4, ?Parname5, ?Parname6, ?Parname7);", ConfigSettings.ReadSetting("main")), con); 
      cmd.Parameters.Add("?Parname", MySqlDbType.Double).Value = Math.Round(deciLat, 5); 
      // ... more parameters 
      cmd.ExecuteNonQuery(); 
      client.Disconnect(); 
      } 
+0

Probablemente deberías usar la biblioteca para reenviar el puerto remoto a local y usarlo en tu cadena de conexión. – user629926

Respuesta

4

Será necesario que el reenvío de puertos de configuración con su conexión SSH ...

Básicamente crea una conexión SSH que se escucha en el puerto 3306 en el servidor local y lo reenvía a que el servidor de base de datos MySQL ...

en la cadena de conexiones a su base de datos MySQL es necesario cambiar la parte server=... a server=localhost, mientras que su conexión SSH necesita ir a la IP de su servidor MySQL DB.

SI no puede reenviar el puerto 3306 puede utilizar cualquier puerto que desee PERO necesita cambiar la parte adicional port= de la cadena de conexión ... consulte here para ver ejemplos de cadenas de conexión con un puerto diferente ... el La conexión SSH todavía se dirige a 3306 pero escucha en un puerto diferente en localhost en este caso ...

Éstos son algunos ejemplos de trabajo con código fuente (aunque no con SSH.NET ya no uso SSH.NET pero esto no obstante, debería empezar OMI):

+0

hola, gracias por su intento, pero ya probé todo esto. Por favor, lea mi pregunta todo el camino. Escribí sobre el reenvío de puertos –

+0

Solo necesito combinar SSH.NET ya que estoy pasando una conexión SSH –

+0

@denonth no puedes usar ninguna conexión SSH ... la conexión SSH DEBE configurarse como una conexión de reenvío de puertos Y necesitas cambie su cadena de conexión MySQL; de lo contrario, no funcionará. – Yahia

6

Simplemente necesita usar un puerto local diferente para el túnel que 3306 que está siendo utilizado por su instancia de MySQL.

Ejemplo a continuación con el puerto 8001 se utiliza en su lugar:

using (var client = new SshClient("ssh_hostname", "ssh_username", "ssh_password")) 
{ 
    client.Connect(); 
    var tunnel = new ForwardedPortLocal("127.0.0.1", 8001, "127.0.0.1", 3306); 
    client.AddForwardedPort(tunnel); 
    tunnel.Start(); 
    using (var DB = new DBContext()) 
    { 
    //MySQL interaction here! 
    scores = DB.Table 
     .Where(x => !String.IsNullOrEmpty(x.SomeField)) 
     .ToList(); 
    } 
    tunnel.Stop(); 
} 

Y a continuación, asegúrese de que su cadena de conexión que tiene el servidor 127.0.0.1 y el puerto 8001

server=127.0.0.1;port=8001 

Esto conectará nada yendo a 127.0.0.1:8001 a ssh_hostname: 3306.

+0

Esto funciona perfectamente, mucho.Aunque, ¿es necesario abrirlo cada vez? ¿Puedo abrir solo una vez? – DanielGatti

Cuestiones relacionadas