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 |