c# - 如何在 AWS 上获得与 MySQL 的 C# 连接
问题描述
我正在尝试打开与 SSH 后面的 AWS 上的 MySql 数据库的连接,但存在重大问题。
static void Main(string[] args)
{
try
{
var sshServer = "11.111.11.11";
var sshUserName = "shane";
var sshPassword = "";
var databaseServer = @"hello202006662000000666.abcdefghijk.ap - southeast - 2.rds.amazonaws.com";
var databaseUserName = "shane";
var databasePassword = "password";
var SSHPrivateKeyFile = @"C:\Users\sshane\myprivatekey.ppk";
var SSHPassPhrase = "sdkypfihsblkdcbsadl;kvgsiudgf";
var databasename = "production";
var (sshClient, localPort) = ConnectSsh(sshServer, sshUserName, sshPassword, SSHPrivateKeyFile, SSHPassPhrase, 22, databaseServer, 3306);
using (sshClient)
{
Console.WriteLine(sshClient);
Console.WriteLine(localPort);
MySqlConnectionStringBuilder csb = new MySqlConnectionStringBuilder
{
Server = "localhost",
Port = localPort,
Database = "production",
UserID = "shane",
Password = "Jopassword"
};
using (var connection = new MySqlConnection(csb.ConnectionString))
{
Console.WriteLine(connection.Ping());
connection.Open();
}
}
}
catch (Exception e)
{
Console.WriteLine(e);
}
}
public static (SshClient SshClient, uint Port) ConnectSsh(string sshHostName, string sshUserName, string sshPassword = null,
string sshKeyFile = null, string sshPassPhrase = null, int sshPort = 22, string databaseServer = "localhost", int databasePort = 3306)
{
// check arguments
if (string.IsNullOrEmpty(sshHostName))
throw new ArgumentException($"{nameof(sshHostName)} must be specified.", nameof(sshHostName));
if (string.IsNullOrEmpty(sshHostName))
throw new ArgumentException($"{nameof(sshUserName)} must be specified.", nameof(sshUserName));
if (string.IsNullOrEmpty(sshPassword) && string.IsNullOrEmpty(sshKeyFile))
throw new ArgumentException($"One of {nameof(sshPassword)} and {nameof(sshKeyFile)} must be specified.");
if (string.IsNullOrEmpty(databaseServer))
throw new ArgumentException($"{nameof(databaseServer)} must be specified.", nameof(databaseServer));
// define the authentication methods to use (in order)
var authenticationMethods = new List<AuthenticationMethod>();
if (!string.IsNullOrEmpty(sshKeyFile))
{
authenticationMethods.Add(new PrivateKeyAuthenticationMethod(sshUserName,
new PrivateKeyFile(sshKeyFile, string.IsNullOrEmpty(sshPassPhrase) ? null : sshPassPhrase)));
}
// connect to the SSH server
var sshClient = new SshClient(new ConnectionInfo(sshHostName, sshPort, sshUserName, authenticationMethods.ToArray()));
sshClient.Connect();
// forward a local port to the database server and port, using the SSH server
var forwardedPort = new ForwardedPortLocal("127.0.0.1", databaseServer, (uint)databasePort);
sshClient.AddForwardedPort(forwardedPort);
forwardedPort.Start();
return (sshClient, forwardedPort.BoundPort);
}
我得到的错误是“从流中读取失败”。
SSH似乎没问题,但我无法建立与 MySql 数据库的连接。现在已经尝试了几天,我很茫然。任何帮助,将不胜感激。
解决方案
推荐阅读
- python - 如何在 pandas 中读取 .json 文件以将其导出为可读的 .csv 文件
- typescript - 当方法按预期工作时,为什么不能推断出正确的类型?
- python - 是否可以使用分数拉伸 numpy 数组
- google-sheets - 在 Google 表格中,我如何计算超过 24 小时的持续时间(每小时价值)?
- reactjs - 集成 React 和 Springboot
- reactjs - React 应用程序与 Firebase 在路由更改时闪烁
- python - ValueError:在给定的容差范围内找不到根
- amazon-web-services - MySQL Workbench 连接到 AWS,收到错误“无法连接到本地主机”
- javascript - 在 NextJS 中,如何将 server.js 中的数据传递给 _app.js?
- html-lists - ol 6.9.0,无法创建生产包