Изменение каталога с абсолютным путем с помощью Renci.SshNet SftpClient приводит к исключению SftpPathNotFoundException.

Я работаю над простым приложением WPF, единственной целью которого является использование библиотеки Renci SSH.net для получения рабочего каталога SshClient и дальнейшей передачи его SftpClient.

Кажется, я не могу изменить каталог с помощью sftpClient.ChangeDirectory, используя абсолютный путь, возвращаемый из RunCommand ("pwd"). Я точно знаю, что путь существует, так как SshClient возвращает его, но, может быть, я что-то делаю не так или есть ошибка? В любом случае, вот мой код:

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);
            }
        }
    }

Как видите, возникает исключение при попытке изменить каталог, полученный с помощью результата SshClient RunCommand.

Мой вопрос: почему ChangeDirectory не выполняется, и как мне правильно решить эту проблему?

Любая помощь горячо приветствуется.


person Dan-Levi Tømta    schedule 19.07.2015    source источник


Ответы (1)


Проблема заключалась в том, что строка, возвращаемая RunCommand, содержала пробелы, и все, что мне нужно было сделать, это следующее:

workingDirectory = getSSHWorkingDirectory.Result.Trim();

Я пытался в течение двух дней решить эту проблему, и когда я впервые опубликовал это, я заработал через 2 минуты.

person Dan-Levi Tømta    schedule 19.07.2015
comment
Вот как часто эти вещи работают. Каким-то образом поделившись проблемой или даже попросив кого-нибудь посмотреть на ваш экран, вы сможете внести ясность в решение проблемы. - person Adrian; 06.02.2017