使用SSH.NET库与MySQL建立SSH连接

use*_*456 5 c# mysql database ssh connection-string

通过使用C#与MySQL数据库的SSH连接,我获得了使用此库进行连接的链接.

这是图书馆的链接,因为你不需要手动打开SSH频道,很多人会觉得这很有趣.

这是一个非常详细的库,有很多功能,但我想要做的很简单.我只想在每次要写入数据库时​​打开SSH通道.

虽然我是通过提供的源搜索我走到它可以发现在这部分代码TestSshCommand.cs,我想我可以用这部分我的连接,但我需要你们的帮助让我有它的工作我的连接字符串我不知道如何连接所有它.

码:

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);
            }
Run Code Online (Sandbox Code Playgroud)

我连接到非SSH通道的代码是:

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

     //...... more of the code
Run Code Online (Sandbox Code Playgroud)

那么如何将此代码与上面的代码结合起来,以便它可以先打开一个SSH通道然后执行我的查询?

我需要将我的代码放入连接断开连接功能吗?

还有一个想法我在引用中添加.dll文件,我必须说没有任何导入工作.那么有人可以下载库并尝试这个简单的代码来查看引用是否适用于您的项目,以便每个人(很多)可以为他们未来的项目提供有效的解决方案?

编辑:

这是我以后尝试做的代码.我的SSH连接现在只需将两者结合起来就可以了.

问题是我需要在我的电脑上本地拥有一个数据库,并且需要连接到服务器.因此,端口转发将不起作用,因为somone在论坛上说我无法移植,而mysql已经有端口用于运行

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();
           }
Run Code Online (Sandbox Code Playgroud)

Sti*_*igM 6

您只需要为隧道使用不同的本地端口,而不是由MySQL实例使用的3306.

改为使用端口8001的示例如下:

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();
}
Run Code Online (Sandbox Code Playgroud)

然后确保在连接字符串中有服务器127.0.0.1和端口8001

server=127.0.0.1;port=8001
Run Code Online (Sandbox Code Playgroud)

这将连接到127.0.0.1:8001的任何内容连接到ssh_hostname:3306.


Yah*_*hia 5

您需要使用 SSH 连接设置端口转发...

基本上建立一个 SSH 连接,在 localhost 上侦听端口 3306 并将其转发到您的 MySQL 数据库服务器...

在连接字符串您的MySQL数据库,您需要将部分改变server=...server=localhost当你的SSH连接需要去您的MySQL数据库服务器的IP。

如果您无法转发端口 3306,您可以使用任何您想要的端口,但您需要另外更改port=连接字符串的一部分...有关具有不同端口的连接字符串的示例,请参见此处...SSH 连接仍以 3306 为目标但在这种情况下在本地主机上侦听不同的端口......

以下是一些带有源代码的工作示例(虽然不是使用 SSH.NET,因为我不使用 SSH.NET 但这仍然应该让您开始 IMO):