2012-05-30 12 views
5

Dostałem link do korzystania z tej biblioteki do połączenia przez połączenie SSH z bazą danych MySQL za pomocą C#.Połączenie SSH z MySQL przy użyciu biblioteki SSH.NET

Oto biblioteka LINK, ponieważ wiele z nich okaże się interesująca, ponieważ nie trzeba ręcznie otwierać kanału SSH.

To jest bardzo szczegółowa biblioteka i ma wiele funkcji, ale to, co chcę zrobić, jest całkiem proste. Chcę tylko otworzyć kanał SSH za każdym razem, gdy chcę pisać do bazy danych.

Podczas gdy szukałem przez źródło, które jest przewidziane wpadłem do tej części kodu, które można znaleźć w TestSshCommand.cs i myślę, że mogę wykorzystać tę część moich połączeń, ale potrzebuję twojej pomocy działaj tak, jak mam ciąg połączenia, nie wiem jak to wszystko połączyć.

Kod:

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); 
      } 

Mój kod connectiong nieprzestrzegania kanału ssh:

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

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

Więc jak mogę połączyć ten kod do powyższego więc może najpierw otworzyć kanał SSH i następnie wykonać moje zapytanie?

Czy muszę umieścić mój kod wewnątrz połączyć i rozłączyć funkcje?

Jeszcze jedno myślę, że dodałem wewnątrz pliku referencje .dll i muszę powiedzieć, że żaden z importów nie działa. Czy ktoś może pobrać bibliotekę i wypróbować ten prosty kod, aby sprawdzić, czy referencje pracują nad twoim projektem i aby każdy (który ma dużo) mógł mieć działające rozwiązanie dla swoich przyszłych projektów?

EDIT:

To jest mój kod, który starałem się zrobić później. Moje połączenie SSH działa teraz tylko połączyć te dwa, aby to działało.

Problem polega na tym, że potrzebuję mieć lokalnie jedną bazę danych na moim komputerze i muszę połączyć się z serwerem. Tak więc port forwarding nie będzie działać jak ktoś napisał na forum mówi, że nie mogę portu przodu podczas mysql już port działa

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

Prawdopodobnie powinieneś użyć biblioteki do przekazania zdalnego do lokalnego portu i użyć tego w swoim tekście połączenia. – user629926

Odpowiedz

4

Musisz konfiguracji przekierowania portów z połączenia SSH ...

Zasadniczo nawiązać połączenie SSH, który nasłuchuje na porcie 3306 na localhost i przekazuje, że do serwera MySQL DB ...

w ciągu połączenia do MySQL DB trzeba zmienić część server=... do server=localhost natomiast połączenie SSH musi przejść do twojego IP serwera MySQL DB.

JEŚLI nie możesz przekazać portu 3306 możesz użyć dowolnego portu, ALE potrzebujesz zmienić dodatkowo część port= ciągu połączenia ... zobacz here, aby zobaczyć przykłady na połączeniach z innym portem ... Połączenie SSH wciąż jest celem 3306, ale w tym przypadku nasłuchuje na innym porcie na localhost ...

Oto kilka przykładów pracy z kodem źródłowym (choć nie z SSH.NET odkąd nie używać SSH.NET ale mimo to powinno Ci zacząć IMO):

+0

Cześć, dziękuję za próbę, ale już wypróbowałem to wszystko. Proszę przeczytać moje pytanie przez całą drogę. Napisałem o przekierowaniu portów –

+0

Po prostu muszę połączyć SSH.NET, gdy przekazuję połączenie SSH –

+0

@ten nie możesz użyć żadnego połączenia SSH ... połączenie SSH MUSI być ustawione jako połączenie przekierowania portu I musisz zmień ciąg połączenia MySQL - w przeciwnym razie nie zadziała. – Yahia

6

Po prostu trzeba użyć innego lokalnego portu dla tunelu niż 3306, który jest używany przez twoją instancję MySQL.

Przykład poniżej z portem 8001 używany zamiast:

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(); 
} 

a następnie upewnij się w ciągu połączenia masz serwera 127.0.0.1 i port 8001

server=127.0.0.1;port=8001 

To będzie łączyć wszystko przejście do 127.0.0.1:8001 na ssh_hostname: 3306.

+0

To działa idealnie, bardzo dobrze.Chociaż, czy konieczne jest otwieranie go za każdym razem? Czy mogę otworzyć tylko raz? – DanielGatti

Powiązane problemy