使用 SSH.NET SshClient 将文件从 Windows 复制到远程 Linux 服务器
Copy file from Windows to remote Linux server using SSH.NET SshClient
我正在使用 Visual Studio 和 C# 网络应用程序。我正在尝试使用 SSH.NET SshClient
将文件从 Windows 服务器移动到远程 Linux 服务器。我正在尝试下面的代码,但文件没有被复制。
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;
}
我没有收到任何错误,但文件没有移动。
您不能使用 shell 命令在本地和远程计算机之间传输文件。
想象一下,您正在使用 SSH 终端客户端(PuTTY 行)。你可以在 PuTTY 中使用 cp
命令上传文件吗? – 你不能。
您必须使用 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);
}
我正在使用 Visual Studio 和 C# 网络应用程序。我正在尝试使用 SSH.NET SshClient
将文件从 Windows 服务器移动到远程 Linux 服务器。我正在尝试下面的代码,但文件没有被复制。
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;
}
我没有收到任何错误,但文件没有移动。
您不能使用 shell 命令在本地和远程计算机之间传输文件。
想象一下,您正在使用 SSH 终端客户端(PuTTY 行)。你可以在 PuTTY 中使用 cp
命令上传文件吗? – 你不能。
您必须使用 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);
}