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

使用SSH.Net将文件从一个SFTP位置传输到另一个SFTP位置,.net,c#-3.0,.net,C# 3.0,我们需要将文件从一个SFTP位置移动到另一个SFTP位置,因此可以使用SSH.NET第三方组件进行此操作。简单的回答是,SSH.NET中没有用于同时连接到两台服务器并让它们相互通信的本机设施。为了满足您的要求,最好的行动方案是: 将文件从服务器1下载到本地计算机 将文件从本地上载到服务器2 从服务器1删除文件 从本地计算机删除文件 这并不是说这件事做不到。如果您的第一个远程服务器允许您通过SSH执行命令,并且该服务器还具有对第二个服务器的必要访问权限、连接性、私钥(如果适用),那么理论上您可以执

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

简单的回答是,SSH.NET中没有用于同时连接到两台服务器并让它们相互通信的本机设施。为了满足您的要求,最好的行动方案是:

将文件从服务器1下载到本地计算机 将文件从本地上载到服务器2 从服务器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();
}
代码借用自

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


除非你被要求,否则我会选择简单的方式下载文件,上传到第二台服务器,删除本地副本,删除原始副本谢谢你提供的信息。我考虑过这一点,但没有其他方法可以将文件从一个SFTP位置直接传输到另一个SFTP位置?据我所知,使用ssh.net无法实现您的要求,因为据我所知,它不支持服务器到服务器的连接