본문 바로가기
IT/Programming

C#에서 SSH로 원격(Remote)에 있는 MySql 접속하기

by 여우요원 2018. 7. 26.
반응형


C#에서 원격에 있는 MySQL을 SSH를 통해서 접속하는 방법에 대해서 얘기하도록 하겠습니다.


SSH를 통해서 접속하는 것이 아니라면, 일반적인 MySQL의 원격 접속과 같습니다만, SSH를 통해서 접속하려면 두 가지를 더 추가해줘야 합니다.


  • SSH로 서버에 접속하기
  • 포트를 Local로 포워딩 하기


[준비]

  • SSH로 접속하려면, 우선 Nuget 패키지에서 Renci 님이 작성한 SSH.Net 패키지를 프로젝트에 설치하도록 한다.
  • 당연히 MySQL에 접속하기 위해서 MySQL Connector/Net 은 설치 되어있어야 한다. 없다면 여기서 다운받아서 설치하도록 한다. https://dev.mysql.com/downloads/connector/net/

준비가 되었으면 바로 코드를 보기로 한다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
using MySql.Data.MySqlClient;
using Renci.SshNet;
using System;
using System.Data;
using System.Windows.Forms;
 
namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
 
            PasswordConnectionInfo sshConnInfo = new PasswordConnectionInfo("111.222.333.444"22"server-id""server-pw");
            sshConnInfo.Timeout = TimeSpan.FromSeconds(30);
 
            SshClient sshClient = new SshClient(sshConnInfo);
 
            try
            {
                sshClient.Connect();
 
                if (sshClient.IsConnected)
                {
                    // tunnel Job
                    ForwardedPortLocal tunnel = new ForwardedPortLocal("127.0.0.1"8008"111.222.333.444"3306);
                    sshClient.AddForwardedPort(tunnel);
                    tunnel.Start();
 
                    // MySQL Job
                    MySqlConnection mycon = new MySqlConnection("Server=127.0.0.1;Database=db-name;Uid=db-id;Pwd=db-pw;SslMode=none;Port=8008;");
                    mycon.Open();
                    MySqlCommand mycmd = new MySqlCommand("Sql statement");
                    MySqlDataAdapter da = new MySqlDataAdapter();
                    mycmd.Connection = mycon;
                    da.SelectCommand = mycmd;
                    DataTable dt = new DataTable();
                    da.Fill(dt);
 
                }
                else
                {
                    this.textBox1.Text = "fail";
                }
            }catch(Exception ex)
            {
                this.textBox1.Text = ex.ToString();
            }
        }
    }
}
 
cs


SSH를 접속하는 코드에서 


- 111.222.333.444 는 임의로 설정한 원격 서버의 주소이므로, 실제 원격서버의 주소를 적어야한다.

- 포트번호 22는 SSH의 포트이므로 그대로 사용하여야 한다.

- server-id 와 server-pw 도 당연히 실제 서버 계정과 PW로 적어주어야 한다.


포트를 포워딩하는 부분에서


- "127.0.0.1"은 로컬머신을 뜻하므로 그대로 적어야하며, 8008이라는 포트번호는 사용하지 않는 임의의 포트번호를 사용하면 된다.

- db-name, db-id, db-pw 도 실제 MySQL의 계정정보를 적어주도록 한다.


마지막으로 "Sql statement" 부분도 실제로 해당 MySQL에서 실행이 되는 Select 쿼리문장으로 대치해준다.



이제 C#에서 원격에 있는 MySQL에 SSH tunnel을 통해서 접속할 수 있다. 

반응형

'IT > Programming' 카테고리의 다른 글

C# Postgresql Helper Class  (0) 2019.03.21
C# MySQL Helper Class  (0) 2018.07.26
C# SqlHelper Class  (0) 2016.05.27
ExtraGrid 컬럼 Merge하기  (0) 2016.02.03
GridControl에서 Cell에 테두리 그리는 방법  (0) 2016.01.21