如何在 ssh 隧道上搭建脚手架

How to do a scaffold over a ssh tunnel

我需要使用远程计算机上的 postgres 数据库

要登录那台计算机,我会像往常一样,

ssh <myuser>@<subdomain.domain.com> -p <custom port>

登录后,我必须再次登录

ssh <someServerName>

那我可以

psql -U postgres -W

并进入数据库

所以简而言之,我需要做 ssh something 两次

是否可以使用 entity framework 核心 连接到此数据库

额外问题:这可以称为 ssh 隧道吗?

解决方案

它叫做 Port Fowarding

using (var client = new SshClient("<public ip>", <port>, "<myuser>", "<mypassword>"))
{
    client.Connect();

    var port = new ForwardedPortLocal("localhost", 5432, "10.0.0.5", 5432);
    client.AddForwardedPort(port);

    port.Start();

    using (var conn = new NpgsqlConnection("Server=localhost;Database=<secret>;Port=5432;User Id=postgres;Password=<secret>;"))
    {
        conn.Open();
    }

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

假设你想从本地主机 运行 psql 命令,你可以这样做:

ssh -t <myuser>@<subdomain.domain.com> -p <custom port> ssh -t <someServerName> psql -U postgres -W

要进行端口转发(SSH 隧道),您可以在一个终端中进行:

ssh -L 5432:someServerName:5432 <myuser>@<subdomain.domain.com> -p <custom port>

-L 5432:someServerName:5432 表示现在本地主机上的端口 5432 被转发到 someServerName:5432(postgres 使用的端口)