Impossible de télécharger un fichier SFTP en utilisant SSH.NET en C# - Permission refusée

j'essaie de télécharger un fichier en utilisant le protocole SFTP en utilisant C# using SSH.NET bibliothèque. Ci-dessous est le code, je suis en utilisant

FileInfo f=new FileInfo("C:mduabcd.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();

je suis en mesure de se connecter et de l' filestream aussi, n'est pas NULL. Mais je suis PermissionDeniedException tout en essayant de télécharger un fichier.

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)

y a-t-il des réglages qui manquent dans le code ci-dessus? Toute aide est très appréciée.

17
demandé sur Martin Prikryl 2015-10-01 04:41:01

2 réponses

Vous devez spécifier un chemin d'accès complet à télécharger le fichier.

Par exemple:

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

sans le chemin, le serveur SFTP essaie probablement d'écrire le fichier dans un dossier racine ou un autre dossier auquel vous n'avez pas accès en écriture (d'où le Permission refusée).

20
répondu Martin Prikryl 2015-10-01 07:25:40

Vous pouvez faire ceci:

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();
    }
}
6
répondu Ernest 2016-07-06 21:34:04