postgresql 如何在C#中为Postgres设置连接字符串

klsxnrf1  于 2023-01-12  发布在  PostgreSQL
关注(0)|答案(2)|浏览(589)

我的数据库是postgresql,它放在Linux服务器上,现在我想通过Windows操作系统上的C#程序与它通信。
要连接到这个数据库,服务器上有一个公共加密文件,我必须发送我的私人文件来建立连接。
也就是说,通信通过.ppk文件和SSH完成。
这是一个简单的连接字符串,没有使用ssh并发送一个私有文件:
public static NpgsqlConnection connOldSamin = new NpgsqlConnection("Host=192.168.0.16;Port=5432;Database=sale;Username=postgres;Password=123;SSL Mode=Require;Trust Server Certificate=true");
但我不知道如何发送我的ppk文件沿着此字符串!!

dgsult0t

dgsult0t1#

您需要使用一个可以处理SSH连接的库。其中有多个可用库,其中之一是Renci.SshNet。安装Nuget包,然后您可以使用它创建SSH客户端,使用.ppk文件和您的连接字符串连接到Linux服务器,然后使用该SSH客户端创建到PostgreSQL服务器的隧道。

using (var sclient = new SshClient("ssh.mydomain.com", 22, "user", new PrivateKeyFile("[path to your private key.ppk]")))
{
    sclient .Connect();

    using (var portForward = new ForwardedPortLocal("127.0.0.1", 5432, "192.168.0.22", 5432))
    {
        client.AddForwardedPort(portForward);
        portForward.Start();
        
        // use the localhost and port 5432 to connect to postgresql
        using (var conn = new NpgsqlConnection("Server=127.0.0.1;Port=5432;Database=sale;Username=[your userid];Password=[Your pass]"))
        {
            conn.Open();
            // your code here
            conn.Close();
        }

        portForward.Stop();
    }

    sclient .Disconnect();
}
vfhzx4xs

vfhzx4xs2#

您可以使用诸如SSH.NET之类的库

NuGet\Install-Package SSH.NET -Version 2020.0.2

以及

using (var client = new SshClient("hostname", "username", new PrivateKeyFile("path/to/privatekey.ppk")))
{
    client.Connect();
    using (var conn = new NpgsqlConnection("Host=192.168.0.16;Port=5432;Database=sale;Username=postgres;Password=123;SSL Mode=Require;Trust Server Certificate=true"))
    {
        conn.Open();
        // execute queries, etc.
    }
    client.Disconnect();
}

相关问题