Скопируйте файл с Windows на удаленный сервер Linux, используя SSH.NET SshClient - PullRequest
0 голосов
/ 15 января 2019

Я использую веб-приложение Visual Studio и C #. Я пытаюсь переместить файл с сервера Windows на удаленный сервер Linux, используя SSH.NET 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;
}

Я не получаю никакой ошибки, но файл не перемещен.

1 Ответ

0 голосов
/ 15 января 2019

Невозможно передать файл между локальным и удаленным компьютером с помощью команд оболочки.

Представьте, что вы используете клиент терминала SSH (строка PuTTY). Можете ли вы использовать команду cp в PuTTY для загрузки файла? - вы не можете.


Вы должны использовать протокол SFTP.

SftpClient sftpclient = new SftpClient("hostname", "username", "pwd");
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);
}
...