如何在.NET中通过SFTP / SSH执行“双跳”?

时间:2018-01-17 10:09:35

标签: c# .net ssh sftp winscp

在我的场景中,我试图从Local App Server -> Middle Server (DMZ) -> Client Server

开始

我需要将文件从Local App Server移到Client Server然后再移回。

所以我的问题是最广泛使用的标准是什么?

我目前正在使用WinSCP通过SFTP连接Middle Server,然后在Middle Server上调用命令下载文件并将文件上传到Client Server。我不是真的喜欢这个,因为我觉得它很容易出错,因为我手动输入命令,而不是使用WinSCP的库上传和下载。当我尝试使用命令列出Client Server上的所有文件时,它也会让我陷入困境,因为该函数返回void

我看过SSH.NET这似乎更广泛使用,但我无法看到任何真正的方式与该库执行“双跃点”。

1 个答案:

答案 0 :(得分:1)

使用WinSCP .NET assembly,很简单:

SessionOptions sessionOptions = new SessionOptions
{
    Protocol = Protocol.Sftp,
    HostName = "example.com",
    UserName = "username",
    Password = "password",
    SshHostKeyFingerprint = "ssh-rsa 2048 xx:xx:xx:xx...",
};

sessionOptions.AddRawSettings("Tunnel", "1");
sessionOptions.AddRawSettings("TunnelHostName", "tunnel.example.com");
sessionOptions.AddRawSettings("TunnelUserName", "username");
sessionOptions.AddRawSettings("TunnelPasswordPlain", "password");
sessionOptions.AddRawSettings("TunnelHostKey", "ssh-rsa 2048 xx:xx:xx:xx...");

using (Session session = new Session())
{
    session.Open(sessionOptions);

    // Your code
}

WinSCP GUI可以generate a code template to connect through tunnel,如上所述(TunnelHostKey除外)。

使用SSH.NET,您可以通过以下方式明确实现端口转发:

  • 打开与中间服务器";
  • 的连接
  • 创建转发端口;
  • 打开与转发端口的第二个连接。

举个例子,请参阅Connection to MySQL from .NET using SSH.NET Library

另一个hackish解决方案是在" Middle Server"上执行ssh。促进第二次"跳"。