首页 > 解决方案 > 如何在 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 数据库的连接。现在已经尝试了几天,我很茫然。任何帮助,将不胜感激。

标签: c#mysqlamazon-web-servicesssh

解决方案


推荐阅读