C#通過ssh連接Mysql數據庫


 

開始

最近在做一個項目需要用到ssh去連接mysql數據庫,踩了不少坑,今日發博記錄下。

正文

直接上代碼。

 //ssh配置
            var sshHost = "sshhost";
            var sshUser = "root";
            var sshPwd = "sshPassword";
            var sshPort = 22;

            //數據庫連接
            var server = "數據庫server";
            var database = "數據庫名稱";
            var user = "數據庫用戶名";
            uint dbPort = 33306;
            var dbPwd = "密碼";

            //mysqlbuilder方式便於后續參數變更
            MySqlConnectionStringBuilder connBuilder = new MySqlConnectionStringBuilder();
            connBuilder.AllowBatch = true;
            connBuilder.Server = server;
            connBuilder.Port = 3306;//初始化默認
            connBuilder.UserID = user;
            connBuilder.Password = dbPwd;
            connBuilder.Database = database;

            //ssh連接信息
            var auth =
                new PasswordAuthenticationMethod(sshUser, sshPwd);
            ConnectionInfo conInfo =
                new ConnectionInfo(sshHost, sshPort, sshUser, auth);
            try
            {
                //ssh客戶端,用using便於資源釋放
                using (SshClient client = new SshClient(conInfo))
                {
                    //獲取本機ip環回地址 一般是127.0.0.1
                    var local = IPAddress.Loopback.ToString();
                    //端口轉發
                    /*
                     *lcoal 本地綁定ip
                     *dbPort 本地綁定端口
                     *server 數據庫server
                     *3306 服務器上數據庫的端口可能不是3306
                     *
                     */
                    ForwardedPortLocal port = new ForwardedPortLocal(local, dbPort, server, 3306);
                    client.Connect();
                    if (!client.IsConnected)
                    {
                        Console.WriteLine("ssh連接失敗");
                    }
                    //給客戶端追加需要轉發的端口信息
                    client.AddForwardedPort(port);
                    //啟動
                    port.Start();
                    /*
                     * 重點,當我們轉發端口之后一定需要將我們轉發之后的host和port把MysqlBuilder中的Server和Port替換掉。
                     * 否則會報Unable to connect to any of the specified MySQL hosts.
                     */
                    connBuilder.Port = port.BoundPort;//本地綁定ip
                    connBuilder.Server = port.BoundHost;//本地綁定ip
                    //連接字符串
                    MySqlConnection conn = new MySqlConnection(connBuilder.ConnectionString);
                    conn.Open();
                }
            }
            catch (Exception ex)
            {

                Console.WriteLine(ex.Message);
            }

結語

這個還是需要細心去注意每個參數的賦值,要不然錯誤很難找出來,特別是轉發端口的那段代碼真的需要好好研究。

參考連接:

https://www.cnblogs.com/sunyj/p/6070206.html

https://stackoverflow.com/questions/32603982/connection-to-mysql-from-net-using-ssh-net-library#32605335


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM