使用 SSH.Net 将文件从一个 SFTP 位置传输到另一个 SFTP 位置
File Transfer from one SFTP location to another SFTP location using SSH.Net
我们需要将文件从一个 SFTP 位置移动到另一个 SFTP 位置,因此可以使用 SSH.NET 第三方组件。
简单的回答是 SSH.NET 中没有 native 工具可以同时连接到两个服务器并让它们相互通信。为了按照您的要求进行操作,最好的做法是:
- 将文件从 Server-1 下载到本地计算机
- 从本地上传文件到Server-2
- 从 Server-1 删除文件
- 从本地机器删除文件
这并不是说不能做到。如果您的第一个远程服务器允许您通过 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"
我们需要将文件从一个 SFTP 位置移动到另一个 SFTP 位置,因此可以使用 SSH.NET 第三方组件。
简单的回答是 SSH.NET 中没有 native 工具可以同时连接到两个服务器并让它们相互通信。为了按照您的要求进行操作,最好的做法是:
- 将文件从 Server-1 下载到本地计算机
- 从本地上传文件到Server-2
- 从 Server-1 删除文件
- 从本地机器删除文件
这并不是说不能做到。如果您的第一个远程服务器允许您通过 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"