C# SSH隧道Postgres数据库连接

3

我正在尝试通过SSH隧道连接到远程Postgres数据库。我正在使用SSH.NET和Npgsql库。这是我的示例代码:

using (var client = new SshClient("210.130.90.110", "root", "pasword"))
{
    client.Connect();

    if (!client.IsConnected)
    {
        // Display error
        Console.WriteLine("Client not connected!");
    }
    else
    {
        Console.WriteLine("Client connected!");
    }

    var port = new ForwardedPortLocal("127.0.0.1", 15432, "210.130.90.110", 5432);
    client.AddForwardedPort(port);

    port.Start();

    using (var conn = new NpgsqlConnection("Server=127.0.0.1;Database=dbname;Port=15432;User Id=dbuser;Password=dbpassword;"))
    {
        conn.Open();
    }

    port.Stop();
    client.Disconnect();
}

代码执行后,我得到了以下结果:

Npgsql.NpgsqlException:
'从流中读取时出现异常'
EndOfStreamException:试图读取超出流的结尾。

我可以使用DBeaver连接到数据库。

1个回答

3
远程端口转发的远程端在服务器上解析。因此,您需要以与连接从服务器本身相同的方式设置IP地址/主机名。
数据库可能仅在localhost接口上侦听,并非公共IP地址(如果是,则可能根本不需要端口转发)。
此外,硬编码本地转发端口并不是一个好主意。你不能确定该端口是否已被另一个应用程序占用。让系统选择任何空闲的本地端口。
var port = new ForwardedPortLocal("127.0.0.1", "127.0.0.1", 5432);
client.AddForwardedPort(port);
port.Start();

string connString =
    $"Server={port.BoundHost};Database=dbname;Port={port.BoundPort};" +
     "User Id=dbuser;Password=dbpassword;";

using (var conn = new NpgsqlConnection(connString))
{
    conn.Open();
}

相关问题:在SSH.NET中进行MySQL端口转发 - 尝试访问受其访问权限限制的套接字


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接