C#编程远程连接到Linux服务器连接到Amazon RDS数据库

问题描述:

我在C#中,需要远程连接到一台Linux服务器,以便连接到一个Amazon RDS数据库的可执行文件。C#编程远程连接到Linux服务器连接到Amazon RDS数据库

在Windows服务器上可执行的生活。由于权限,只有Linux服务器才能连接到RDS数据库。由于C#可执行文件需要来自数据库的信息,因此我发现自己需要先连接到Linux服务器,然后再从那里连接到数据库。

// include files 
using MySql.Data; 
using MySql.Data.MySqlClient; 
using Renci.SshNet;  
//... 
    using (var client = new SshClient("server.amazonaws.com", "serverUser", privateKeyFile)) 
    { 
      client.Connect(); 

      MySqlConnection databaseConnection = null; 
      string connString = "Server=dbServer.rds.amazonaws.com; database=database " +    
           "UID=databaseUser password=databasePassword"; 
      databaseConnection = new MySqlConnection(connString); 
      databaseConnection.Open(); 

      string queryString = "SELECT * FROM tbl_table;"; // errors here 


      // ..... } 

我分配,上面写着查询字符串时,得到一个错误“MySql.Data.MySqlClient.MySqlException:‘无法连接任何指定的MySQL主机’”

我使用SSH.Net形成连接到Linux服务器。我正在使用MySQL Connector来连接和检索数据库中的信息。

如果有什么错我的代码,我会非常感激它被指出,但我敢肯定,我错过了一些必要的步骤,以便正确地连接到数据库。我注意到其他问题提出类似的问题,但他们要么没有使用RDS DB,要么不需要通过C#进行SSH登录。

编辑:自从发布这个,我执行此代码的服务器已被授予访问RDS数据库。我目前没有时间尝试发布解决方案。我可以说的是,在获得访问权限后,只有使用MySql连接器才能顺利运行。

+0

你究竟想做什么。打开一个ssh会话到一台机器,然后试图从Windows机器打开一个sql连接没有做任何事情。您可以使用ssh会话执行sql命令行操作。或者你需要在linux系统上有一个服务器,你可以与之交谈以转发请求。 – pm100

+0

对不起,我知道这是一个很大的混乱。 C#可执行文件需要来自数据库的信息,因为它使用SqlDataReader对象来获取某些方法的行信息。我不反对在Linux上有一个服务,但是我没有看到自己能够使用这些对象。我继承了这个项目并且时间有限,所以我不想尝试改变使用该对象的所有任务与使用其他任务。 会使用SSH会话来执行SQL命令行动作仍然允许我这样做吗?我不确定你的意思。 – r19996

+0

这是糟糕的设计。您应该在Linux机器上创建一个暴露API的Web应用程序,然后从Windows机器使用该API访问数据库。你正在为自己解决各种安全问题。 – Icemanind

通过SSH连接不是enoguh。你想做的事不能做。您的代码存在的问题是AWS服务仅允许从Linux机器连接到数据库。您正尝试从Windows机器启动连接。要做到这一点的唯一方法是创建某种Linux机器与Windows机器,否则你需要登录您的AWS帐户并授予你的Windows机器

+1

可以完成,但有正确的工具。 –

你快到了。我对SSH.NET不熟悉,但在使用Putty(SSH终端)时,您可以配置SSH“端口隧道”或“端口转发”,它将在本地计算机上设置监听端口。到本地端口的任何连接都会通过SSH连接转发到远程计算机,然后转发到最终目标。

https://github.com/sshnet/SSH.NET确实提到它支持“端口转发”。看看使用它。

  1. 连接到你的Linux机器使用SSH.NET
  2. 配置从本地主机前一个端口:12345 dbServer.rds.amazonaws.com:3306
  3. 使用localhost:12345连接字符串为目标服务器中,而比dbServer.rds.amazonaws.com:3306对于MySqlConnection