我在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才能顺利运行。
答案 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确实提到它支持"端口转发"。看看使用它。
localhost:12345
作为目标服务器,而不是dbServer.rds.amazonaws.com:3306
MySqlConnection
。答案 2 :(得分:0)
通过SSH连接不是很好的。你想做什么是不可能完成的。您的代码存在的问题是AWS服务仅允许从Linux计算机连接到数据库。您正尝试从Windows计算机启动连接。执行此操作的唯一方法是在Linux计算机和Windows计算机之间创建某种API,否则您需要登录到您的AWS账户并授予对Windows计算机的数据库访问权限