sshnet / sshnet/SSH.NET

Renci.SshNet.Common.SshException: Failure. exception

Open
#582 8 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Dominant language
C#
Stars
4.4k
Forks
993
Avg merge
9d 21h
Merged PRs (30d)
1

Description

Hello,

I have been using the Renci SSH.NET(2016.1.0.0) NuGet package in my web api code, to transfer files from server to a remote SFTP server. This has been working very well for me. The issue I am facing is that I am getting the error marked below. My .NET framework version is 4.6

An exception has been caught during the file upload..:Renci.SshNet.Common.SshException: Failure.
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, Action1 uploadCallback) at Renci.SshNet.SftpClient.UploadFile(Stream input, String path, Action1 uploadCallback)
at BASF.TAR.RMSService.Controllers.AttachmentController.Get(String sourcepaths, String destinationpath) in d:\Projects\TAR\Samples\BASF.TAR.RMSService\BASF.TAR.RMSService\Controllers\AttachmentController.cs:line 47

I am using the code in my controller as below, its a simple function that takes a source path which is pipe seperated strings and a destination path which is the path on the remote FTP server. The client opens the connection to the server and then in a loop manner each file is uploaded to the remote server and the log is printed.

Please can you let me know why this error is occuring sometimes, any help would be greatly appreciated

public IHttpActionResult Get([FromUri]string sourcepaths, string destinationpath)
        {
            var fileInfo = new List<string>();

            log.Info("Entering the Put() method of the AttachmentController class..");
            try
            {
                using (SftpClient sftp = new SftpClient(ConfigurationManager.AppSettings["SFTP"].ToString(), Convert.ToInt32(ConfigurationManager.AppSettings["Port"].ToString()), ConfigurationManager.AppSettings["UserId"].ToString(), ConfigurationManager.AppSettings["Password"].ToString()))
                {
                    try
                    {
                        if (string.IsNullOrEmpty(sourcepaths) && string.IsNullOrEmpty(destinationpath)) return Ok();

                        var filePaths = sourcepaths.Split('|');
                        sftp.Connect();
                        log.InfoFormat("Connected to SFTP server:{0}..", ConfigurationManager.AppSettings["SFTP"].ToString());
                        
                        log.InfoFormat("Original destination path:{0}", destinationpath);
                        log.InfoFormat("Upload path in the sftp location:{0}", OriginalAttPathToFileSharePath(destinationpath.ToLower()));

                        log.Info("Uploading file...");

                        sftp.ChangeDirectory(OriginalAttPathToFileSharePath(destinationpath.ToLower()));
                        log.InfoFormat("Original destination path:{0}", destinationpath);
                        log.InfoFormat("Upload path in the sftp location:{0}", OriginalAttPathToFileSharePath(destinationpath.ToLower()));
                        foreach (var file in filePaths)
                        {
                            log.InfoFormat("File to be uploaded:{0}", file);
                            using (var stream = new FileStream(file, FileMode.Open, FileAccess.ReadWrite, FileShare.ReadWrite))
                            {
                                sftp.UploadFile(stream, Path.GetFileName(file), (o) =>
                                {
                                    Console.WriteLine(o);
                                });
                            }
                        }
                        log.Info("File uploaded to server...");
                        sftp.Disconnect();
                    }
                    catch (Exception e)
                    {
                        log.ErrorFormat("An exception has been caught during the file upload..:{0}", e);
                    }
                }
            }
            catch (Exception exp)
            {
                log.Error("Error occured in the Put() method of the AttachmentController class..", exp);
            }
            log.Info("Exiting the Put() method of the AttachmentController class..");
            return Ok();
        }

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start with the SftpClient.UploadFile call and the SftpSession.RequestOpen stack entry shown in the report, then inspect the controller's ChangeDirectory and repeated upload flow. Reproduce the intermittent failure using the stated .NET Framework 4.6 and SSH.NET 2016.1.0.0 details with equivalent paths. Done means identifying a reproducible cause or the missing server/path information needed to proceed.

Written by the indexing model from the issue text.

Assessment

Tech stack
csharp
Domain
networking
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Quiet
Clarity
Needs clarification
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.