如何使用SSH.NET从OpenShift .NET Core POD连接到远程SFTP服务器

时间:2019-03-19 17:35:44

标签: .net-core openshift sftp ssh.net

我有一个在OpenShift中运行的.NET Core 2.2服务。我的服务使用SSH.NET连接到在OpenShift云外部运行的远程SFTP服务器。 SFTP服务器配置为仅在端口22上提供SFTP。

根据SSH.NET,连接到SFTP服务器的代码为:

var connectionInfo = new ConnectionInfo("10.1.2.3",
                                        "guest",
                                        new PasswordAuthenticationMethod("guest", "pwd"),
                                        new PrivateKeyAuthenticationMethod("rsa.key"));
using (var client = new SftpClient(connectionInfo))
{
    client.Connect();
}

此代码在我的Intranet中使用时效果很好。

要访问OpenShift中的远程资源,我创建了一个提供固定IP的出口路由器。所有防火墙均已配置为允许从OpenShift进入我的SFTP服务器。

我的问题:

我应该为上面的ConnectionInfo类的第一个参数使用什么值?我的远程服务器的IP地址“ 10.1.2.3”无法从OpenShift内部使用,因为出站流量必须严格通过出口路由器服务。

注意: 我已经可以通过HTTPS使用来自HTTP的HTTP客户端访问远程服务器,而我的POD则使用如下URL:https://x-myservice-egress.y-myproject-infra-test:4433

2 个答案:

答案 0 :(得分:0)

在ConenctionInfo类中,我必须提供出口路由器名称和映射端口,例如projectName-egress-xyz:2201。 2201是一个映射ID,而不是物理端口,它映射到我的真实SFTP服务器主机IP和端口22。

下面的代码有效!

var connectionInfo = new ConnectionInfo("projectName-egress-xyz:2201",
                                        "guest",
                                        new PasswordAuthenticationMethod("guest", "pwd"),
                                        new PrivateKeyAuthenticationMethod("rsa.key"));
using (var client = new SftpClient(connectionInfo))
{
    client.Connect();
}

答案 1 :(得分:0)

将其替换为出口路由器名称和映射到您在出口配置中定义的目标端口的源端口。

Ex egress-xyz:source-port