Changing directory with absolute path using Renci.SshNet SftpClient results in SftpPathNotFoundException

Dan-Levi Tømta picture Dan-Levi Tømta · Jul 19, 2015 · Viewed 12.6k times · Source

Im working on a simple WPF application that has the sole purpose of using Renci SSH.net library to get the working directory of a SshClient and further passing it to a SftpClient.

I cant seem to change the directory using sftpClient.ChangeDirectory by using the absolute path returned from a RunCommand ("pwd"). I know for certain that the path does exist since the SshClient returns it, but maybe there is something i am doing wrong, or there is a bug? Either way, here is my code:

public static string ssh_host,
                    ssh_username,
                    ssh_password,
                    workingDirectory;

    public MainWindow()
    {
        InitializeComponent();
        ssh_host = "XXXXXXXXXX";
        ssh_username = "XXXXXXXXXX";
        ssh_password = "XXXXXXXXXX";
        StartSSH();
    }

    private static void StartSSH()
    {
        using (var client = new SshClient(ssh_host, ssh_username, ssh_password))
        {
            try
            {
                client.Connect();
                if (client.IsConnected)
                {
                    Console.WriteLine("Client connected");
                    SshCommand getSSHWorkingDirectory = client.RunCommand("pwd");
                    workingDirectory = getSSHWorkingDirectory.Result;
                    Console.WriteLine("SSH working directory = " + workingDirectory);
                    // RESULT: SSH working directory = /customers/5/7/9/domain.com/httpd.private
                    using (var sftpClient = new SftpClient(ssh_host, ssh_username, ssh_password))
                    {
                        sftpClient.Connect();
                        if (sftpClient.IsConnected)
                        {     
                            Console.WriteLine("SFTP working directory = " + sftpClient.WorkingDirectory);
                            // RESULT: SFTP working directory = /customers/5/7/9/domain.com/httpd.www <- NOTE httpd.www

                            sftpClient.ChangeDirectory(workingDirectory);
                            // ERROR: Renci.SshNet.Common.SftpPathNotFoundException: No such file
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
        }
    }

As you can see, there is thrown an exception when trying to change the directory i got using the SshClient RunCommand result.

My question is: Why is ChangeDirectory failing to execute, and how would i forward solving this issue in a proper manner?

Any help is much appreciated.

Answer

Dan-Levi T&#248;mta picture Dan-Levi Tømta · Jul 19, 2015

The problem was that the string returned from the RunCommand had whitespaces and all I had to do was this:

workingDirectory = getSSHWorkingDirectory.Result.Trim();

I have tried for two days to solve this issue and when I first posted this I got it to work 2 minutes later.