c# - 使用 Renci.SshNet SftpClient 更改具有绝对路径的目录导致 SftpPathNotFoundException

标签 c# wpf ssh sftp directory-listing

我正在开发一个简单的 WPF 应用程序,其唯一目的是使用 Renci SSH.net 库获取 SshClient 的工作目录并将其进一步传递给 SftpClient。

我似乎无法使用从 RunCommand(“pwd”)返回的绝对路径使用 sftpClient.ChangeDirectory 更改目录。我确定路径确实存在,因为 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 无法执行,我将如何以正确的方式解决这个问题?

非常感谢任何帮助。

最佳答案

问题是从 RunCommand 返回的字符串有空格,我所要做的就是:

workingDirectory = getSSHWorkingDirectory.Result.Trim();

我已经尝试了两天来解决这个问题,当我第一次发布这个问题时,我在 2 分钟后让它开始工作。

关于c# - 使用 Renci.SshNet SftpClient 更改具有绝对路径的目录导致 SftpPathNotFoundException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31501716/

相关文章:

c# - XmlSerializer 在枚举上抛出异常

c# - 嵌套列表的并行填充

c# - 如何在 NHibernate 中自动生成 ID

c# - 如何在 Json.NET 中使用 JsonSerializerSettings 在属性中指定时禁用 TypeNameHandling?

python - IronPython 可以在未安装的机器上运行吗?

wpf - 为什么WPF使处理图像变得如此困难?

c# - 如何从 WPF 中的数据网格中获取单元格的值?

ssh - 使用 ssh 连接到亚马逊 ec2 实例 - 超时

apache - 正在运行的 EC2 实例突然拒绝 SSH 连接

ssh - 在获取 Visual Studio Code + Remote-SSH & Native debug 以连接到 openocd(即 gdbserver)时遇到问题