使用 SSH.NET SshClient 将文件从 Windows 复制到远程 Linux 服务器

我正在使用 Visual Studio 和 C# Web 应用程序。我正在尝试使用 SSH.NET 将文件从 Windows 服务器移动到远程 Linux 服务器SshClient。我正在尝试下面的代码,但文件没有被复制。


var filespath = FUupload.PostedFile.FileName.Replace("\\", "/");

SshClient sshclient = new SshClient("hostname", "username", "pwd");

sshclient.Connect();

ShellStream stream = sshclient.CreateShellStream("cmsd", 80, 24, 800, 600, 1024);


Label1.Text = sendCommand("sudo su - wwabc1", stream).ToString();

Label2.Text = sendCommand("whoami", stream).ToString();

Label3.Text = sendCommand("cp /" + filespath + " /wwabc1/test/folder_one/test/", stream).ToString();

public StringBuilder sendCommand(string customCMD)

{

    StringBuilder answer;


    var reader = new StreamReader(stream);

    var writer = new StreamWriter(stream);

    writer.AutoFlush = true;

    WriteStream(customCMD, writer, stream);

    answer = ReadStream(reader);

    return answer;

}


private void WriteStream(string cmd, StreamWriter writer, ShellStream stream)

{

    writer.WriteLine(cmd);

    while (stream.Length == 0)

    {

        Thread.Sleep(500);

    }

}


private StringBuilder ReadStream(StreamReader reader)

{

    StringBuilder result = new StringBuilder();


    string line;

    while ((line = reader.ReadLine()) != null)

    {

        result.AppendLine(line);

    }

    return result;

}

我没有收到任何错误,但文件没有移动。


GCT1015
浏览 200回答 1
1回答

明月笑刀无情

您不能使用 shell 命令在本地和远程机器之间传输文件。想象一下,您正在使用 SSH 终端客户端(PuTTY 行)。你可以cp在 PuTTY 中使用命令上传文件吗?- 你不能。您必须使用 SFTP 协议。SftpClient sftpclient = new SftpClient("hostname", "username", "pwd");sftpclient.connect();string localFilename = FUupload.PostedFile.FileName;string remoteFilename = "/wwabc1/test/folder_one/test/" + Path.GetFileName(filename);using (var fileStream = File.OpenRead(localFilename)){    sftpClient.UploadFile(fileStream, remoteFilename);}
打开App,查看更多内容
随时随地看视频慕课网APP