我正在使用 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;}我没有收到任何错误,但文件没有移动。
1 回答

明月笑刀无情
TA贡献1828条经验 获得超4个赞
您不能使用 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);
}
- 1 回答
- 0 关注
- 199 浏览
添加回答
举报
0/150
提交
取消