C#以编程方式远程连接到Linux服务器以连接到Amazon RDS DB

时间:2017-06-14 16:40:52

标签: c# amazon-web-services amazon-rds-aurora

我在C#中有一个可执行文件,需要远程连接到Linux服务器才能连接到Amazon RDS数据库。

可执行文件存在于Windows Server上。由于权限,只有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 Connector才能顺利运行。

3 个答案:

答案 0 :(得分:2)

跳过SSH。在Linux机器上,将IPtables配置为端口转发到AWS。选择任意端口号,例如12345。

到端口12345的任何传入TCP连接都会将流量转发到AWS上的给定主机名和端口。

随后,您的MySQL连接字符串将连接到您的Linux机器上的端口12345,但转发将把流量发送到AWS。

以下是一些示例文章:

由于后台手动配置IPtables可能会很麻烦,因此请首先考虑安装Webmin作为易于使用的Web界面来配置iptables。

答案 1 :(得分:1)

你几乎就在那里。我不熟悉SSH.NET,但是当使用Putty(一个SSH终端)时,你会配置SSH"端口隧道"或者"端口转发"这将在您的本地计算机上设置一个侦听端口。与本地端口的任何连接都将通过SSH连接转发到远程计算机,然后转发到最终目标。

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

  1. 使用SSH.NET连接到Linux机箱
  2. 配置从localhost:12345转发到dbServer.rds.amazonaws.com:3306的端口
  3. 使用连接字符串中的localhost:12345作为目标服务器,而不是dbServer.rds.amazonaws.com:3306 MySqlConnection

答案 2 :(得分:0)

通过SSH连接不是很好的。你想做什么是不可能完成的。您的代码存在的问题是AWS服务仅允许从Linux计算机连接到数据库。您正尝试从Windows计算机启动连接。执行此操作的唯一方法是在Linux计算机和Windows计算机之间创建某种API,否则您需要登录到您的AWS账户并授予对Windows计算机的数据库访问权限