niedziela, 25 listopada 2012

Łączenie się z bazą po SSH

Problem:
Baza danych (MySql) stoi na maszynie Unixowej, połączenie do niej możliwe tylko po SSH.

Problem niby prosty, tworzymy aplikację kliencką, która ma na celu prezentację wyników zapytań z bazy dnaych:



SSH służy tutaj jako zabezpieczenie przed dostępem do poufnych danych przez niepożądane osoby.

Problem więc należy rozwiązać w następujący sposób:
  • stworzyć bezpieczne połączenie SSH
  • przeforwardować nasz port lokalny na port zdalny gdzie pracuje baza danych
  • stworzyć połączenie do bazy danych - tutaj postępujemy tak jak zwykle, z tą różnicą iż teraz musimy połączyć się z naszym lokalnym komputerem, poprzez skonfigurowany w poprzednim punkcie port
Połączenie SSH możemy stworzyć na dwa sposoby:
  • skorzystać z aplikacji, którą uruchomimy jako osobny proces w tle np. PLINK
  • wykorzystać jedną z dostępnych bibliotek SSH
Pierwszy sposób jest dosyć łatwy w implementacji, jednak uruchamia w tle dodatkowy proces, który może nie być mile widziany.
Bibliotek do SSH dla .NET nie brakuje w sieci. Ja wybrałem SharpSSH, które można pobrać ze strony http://www.tamirgal.com/blog/page/SharpSSH.aspx (dział Download).
Do projektu należy dodać następujące DLL:
  • Tamir.SharpSSH.dll
  • Org.Mentalis.Security.dll
  • DiffieHellman.dll
Kod przykładowego połączenia:

Code:
            var client = new JSch();
            Session session = client.getSession("user_login", "host", 22);
            session.setHost("host");
            session.setPassword("password");
            var sshConfig = new Hashtable();
            sshConfig.put("StrictHostKeyChecking", "no");
            session.setConfig(sshConfig);
            session.connect();
            session.setPortForwardingL(3307, "localhost", 3306);

Następnie w połączeniu z bazą danych skorzystamy z portu 3307, oraz servera - localhost.

Brak komentarzy:

Prześlij komentarz