0

我正在向现有应用程序添加 SSH 命令执行和文件上传。在比较了不同的免费和许可库之后,我决定使用http://code.google.com/p/ssh2-net/,因为它似乎是 JAVA 库到 C# 的一个端口。我们已经对 JAVA 版本有很好的体验...

上传文件不是很成功......有人可以帮忙吗?这是我的代码,它是我找到的一些样本的组合

Connection conn = StartConnection();    
// --> conn checked and is open!

Session session = conn.openSession();
session.execCommand("sudo mount -o remount,rw /");
// --> no error

SFTPv3Client client = new SFTPv3Client(conn);
// --> this throws error "Cannot access a closed Stream."

SFTPv3FileHandle handle = client.createFile("/tmp/" + sshSource.Name);

using (StreamReader sr = new StreamReader(sshSource.FullName)) 
{
    char[] buffer = new char[1024];
    int offset = 0;

    while (sr.Peek() >= 0)
    {
        int i = sr.Read(buffer, offset, buffer.Length);

        byte[] bytes = new byte[1024];
        for (int j = 0; j < 1024; j++)
            bytes[j] = (byte) buffer[j];

        client.write(handle, offset, bytes, 0, i);
        offset += i;
    }
}

正如评论中提到的,在定义客户端的那一行已经有一个错误 SFTPv3Client client = new SFTPv3Client(conn);

非常感谢您的帮助,弗兰克

4

1 回答 1

0

切换到 SharpSsh,似乎是 C# 更好(更简单)的解决方案

http://www.tamirgal.com/blog/page/SharpSSH.aspx

SshTransferProtocolBase tx = new Scp(_hostname, _username, _password);
SshExec exec = new SshExec(_hostname, _username, _password);

tx.Connect();
exec.Connect();

exec.RunCommand("sudo mount -o remount,rw /");
exec.RunCommand("sudo rm /tmp/" + Path.GetFileName(sshTarget));
tx.Put(sshSource.FullName, "/tmp/" + Path.GetFileName(sshTarget));
于 2012-11-21T14:30:16.327 回答