使用 SSH.Net 将文件从一个 SFTP 位置传输到另一个 SFTP 位置

File Transfer from one SFTP location to another SFTP location using SSH.Net

我们需要将文件从一个 SFTP 位置移动到另一个 SFTP 位置,因此可以使用 SSH.NET 第三方组件。

简单的回答是 SSH.NET 中没有 native 工具可以同时连接到两个服务器并让它们相互通信。为了按照您的要求进行操作,最好的做法是:

  1. 将文件从 Server-1 下载到本地计算机
  2. 从本地上传文件到Server-2
  3. 从 Server-1 删除文件
  4. 从本地机器删除文件

这并不是说不能做到。如果您的第一个远程服务器允许您通过 SSH 执行命令,并且该服务器还具有对第二个服务器的必要访问权限(权限、连接、私钥,如果适用),理论上您可以执行原始命令让第一个服务器连接到第二个。

对于这些命令是什么,我不是 SSH 专家。但是,通过使用 SshClient 而不是 SftpClient,可以为 SSH 执行任意命令 。您可以通过 SSH 连接,然后在 SshClient 上使用 RunCommand/CreateCommand。以下示例在服务器上创建一个 "tmp/uploadtest" 目录并为其提供 "rw" 访问权限。然后它会检查命令的状态。

using (var sshclient = new SshClient(...)){
            sshclient.Connect();
            using(var cmd = sshclient.CreateCommand("mkdir -p /tmp/uploadtest && chmod +rw /tmp/uploadtest")){
                cmd.Execute();
                Console.WriteLine("Command>" + cmd.CommandText);
                Console.WriteLine("Return Value = {0}", cmd.ExitStatus);
            }
            sshclient.Disconnect();
}

(代码借自this gist

您可以通过使用适当的参数调用 CreateCommand 来初始化从 Remote-1 到 Remote-2 的 ssh 连接,然后以这种方式传输文件,从而利用这一点。

除非你必须这样做,否则我会选择 "the easy way"