webentwicklung-frage-antwort-db.com.de

Hochladen einer SFTP-Datei mit SSH.NET in C # nicht möglich - Berechtigung verweigert

Ich versuche, eine Datei mithilfe des SFTP-Protokolls mithilfe von C # mithilfe der SSH.NET-Bibliothek hochzuladen. Unten ist der Code, den ich benutze

FileInfo f=new FileInfo("C:\\mdu\\abcd.xml");            
string uploadfile=f.FullName;    
Console.WriteLine(f.Name);
Console.WriteLine("uploadfile"+uploadfile);
var client = new SftpClient(Host, port, username, password);
client.Connect();
if(client.IsConnected){
       Console.WriteLine("I AM CONNECTED");
}
var fileStream = new FileStream(uploadfile, FileMode.Open);  
if(fileStream!=null){
            Console.WriteLine("YOU ARE NOT NULL");
}
client.BufferSize = 4 * 1024; 
client.UploadFile(fileStream, f.Name,null);
client.Disconnect();
client.Dispose();

Ich kann eine Verbindung herstellen und das filestream ist auch nicht NULL. Beim Versuch, eine Datei hochzuladen, wird jedoch PermissionDeniedException angezeigt.

Unhandled Exception: Renci.SshNet.Common.SftpPermissionDeniedException: Permission denied
   at Renci.SshNet.Sftp.SftpSession.RequestOpen(String path, Flags flags, Boolean nullOnError)
   at Renci.SshNet.SftpClient.InternalUploadFile(Stream input, String path, Flags flags, SftpUploadAsyncResult asyncResult, Action`1 uploadCallback)
   at Renci.SshNet.SftpClient.UploadFile(Stream input, String path, Boolean canOverride, Action`1 uploadCallback)
   at Renci.SshNet.SftpClient.UploadFile(Stream input, String path, Action`1 uploadCallback)
   at movemsi.Program.UploadFile()
   at movemsi.Program.Main(String[] args)

Gibt es irgendwelche Einstellungen, die ich im obigen Code vermisse? Jede Hilfe wird sehr geschätzt.

22
Timothy Rajan

Sie müssen einen vollständigen Pfad angeben, in den die Datei hochgeladen werden soll.

Beispielsweise:

client.UploadFile(fileStream, "/home/user/" + f.Name, null);

Ohne den Pfad versucht der SFTP-Server wahrscheinlich, die Datei in einen Stammordner oder einen anderen Ordner zu schreiben, auf den Sie keinen Schreibzugriff haben (daher Berechtigung verweigert).

33
Martin Prikryl

Du kannst das:

FileInfo f = new FileInfo("C:\\mdu\\abcd.xml");            
string uploadfile = f.FullName;    
Console.WriteLine(f.Name);
Console.WriteLine("uploadfile" + uploadfile);

//Passing the sftp Host without the "sftp://"
var client = new SftpClient("ftp.example.com", port, username, password);
client.Connect();
if(client.IsConnected)
{
    var fileStream = new FileStream(uploadfile, FileMode.Open);  
    if(fileStream != null)
    {
        //If you have a folder located at sftp://ftp.example.com/share
        //then you can add this like:
        client.UploadFile(fileStream, "/share/" + f.Name,null);
        client.Disconnect();
        client.Dispose();
    }
}
9
Ernest

Ich habe diesen Fehler erhalten, weil ich Path.Combine() für mein UploadFile-Argument verwendet habe:

client.UploadFile(fileStream, Path.Combine("/home/user", f.Name), null);

Ich denke, es macht die Schrägstriche falsch herum. Also mache einfach eine normale String-Verkettung wie die Antwort oben:

client.UploadFile(fileStream, "/home/user/" + f.Name, null);
0
Matt Kemp