Połączenie do bazy postgresql wykorzystując tunelowanie SSH.

0

Witam,

próbuję się połączyć do bazy postgresql przy pomocy tunelowania SSH.

dane, który używam są prawidłowe, ponieważ mogę się połączyć przez pgAdmin III.

Gdy łączę się z poziomu kodu otrzymuje informację ""Nie można nawiązać połączenia, ponieważ komputer docelowy aktywnie go odmawia".

Proszę o pomoc, poniżej mój kod.

 
        private static string Server = "localhost";
        private static string Port = "9999";
        private static string User = "user_name";
        private static string Password = "password";
        private static string Database = "database_name";

        private static void GetDataSSH()
        {

            PasswordConnectionInfo connectionInfo = new PasswordConnectionInfo("host_name", 7878, "user_name", "password");
            connectionInfo.Timeout = TimeSpan.FromSeconds(30);

            using (var client = new SshClient(connectionInfo))
            {
                try
                {
                    client.Connect();
                    client.RunCommand("ssh -L9999:localhost:5432 user_name@host_name -p 7878");

                    NpgsqlConnectionStringBuilder cs = new NpgsqlConnectionStringBuilder();
                    cs.Password = Password;
                    cs.Port = 9999;
                    cs.Host = Server;
                    cs.Database = Database;
                    cs.Username = User;

                    NpgsqlConnection conn = new NpgsqlConnection(cs);
                    conn.Open();
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.ToString());
                }
            }

            Console.Read();
        }
0

wgl to windows ma komende ssh? myślałam, że ma tylko putty. jak w cmd wpiszesz
ssh -L9999:localhost:5432 user_name@host_name -p 7878 to działą?

zresztą tutaj widzę tylko przekierowanie portów aa rozumiem, że połączenie robi NpgsqlConnection okey. spoko.

ten serwer postgres stoi na Linuxie? w sumie nie dziwie sie temu komputerowi docelowemu. też bym odmówiła połączenia z C#

0

Witam,

A nie możesz do SSH użyć biblioteki Renci.SshNet w moim przypadku logowanie za pomocą klucza?

var sshHostName = "IP Address";
var sshUserName = "User Name";
var sshTunnelPort = (uint)(new Random(1024).Next(35400, 35499));
var privateKeyFile = new PrivateKeyFile(new MemoryStream(this.GetSshKeyFromResources()));
var authenticationMethod = new PrivateKeyAuthenticationMethod(sshUserName, privateKeyFile);
var connectionInfo = new ConnectionInfo(sshHostName, 22, sshUserName, authenticationMethod);

using (var sshClient = new SshClient(connectionInfo))
{
    sshClient.Connect();
    var forwardedPortLocal = new ForwardedPortLocal(
        IPAddress.Loopback.ToString(),
        sshTunnelPort,
        IPAddress.Loopback.ToString(),
        5432);
    sshClient.AddForwardedPort(forwardedPortLocal);
    forwardedPortLocal.Start();
    //A tutaj już pracujesz jakbyś był podłączony do bazy działającej lokalnie na porcie ze zmiennej sshTunnelPort
}

Pozdrawiam,

mr-owl

1 użytkowników online, w tym zalogowanych: 0, gości: 1