无法使用C#SSH.NET更改目录

时间:2016-04-13 16:00:21

标签: c# linux ssh

当我使用SSH.NET库连接到服务器时,默认文件夹为/mif/stud3/2014/rira1874。当我执行

res = ssh.CreateCommand("cd existingFolder").Execute();
Console.WriteLine(res);

它仍然保留在默认连接文件夹中。这里有什么问题?

完整代码:

public void ConnectWithPassword(string username, string password, string domain, int port)
        {
            bool i = true;
            using (var ssh = new SshClient(CreatePasswordConnectionInfo(username, password, domain)))
            {
                try
                {
                    ssh.Connect();
                    if (ssh.IsConnected)
                    {
                        while(i == true)
                        {
                            string res = Regex.Replace(ssh.CreateCommand("pwd").Execute(), @"\r\n?|\n", "");
                            Console.Write(res + ": ");
                            res = ssh.CreateCommand(Console.ReadLine()).Execute();
                            Console.WriteLine(res);
                        }
                    }
                    else {
                        Console.WriteLine("Not connected");
                    }
                    ssh.Disconnect();
                }
                catch (Exception e)
                {
                    Console.WriteLine("Exception caught: {0}", e);
                }
            }
        }

2 个答案:

答案 0 :(得分:4)

尝试执行以下操作 string cmdstr = "cd /etc; ls -la"; ssh.Connect(); var cmd = ssh.RunCommand(cmdstr); var result = cmd.Result;

基本上ssh.net不允许/支持(我猜)。替代方案是您可以更改到目录并执行所需的相应命令。 如果你需要执行一些文件,只需使用上面的例子“cd / etc; ./yourFile”。确保包含分号“;”所以你可以继续执行。

答案 1 :(得分:1)

您是否检查了目录列表以确保您实际上仍在“/ mif / stud3 / 2014 / rira1874”中?看起来你在哪里进入SSH是一个* nix框;根据{{​​1}}行做出这个假设。如果是这种情况,有时在控制台上返回/显示的目录列表将不会更改。例如,如果我有一个具有以下PWD ssh.CreateCommand("pwd").Execute()的控制台,并且我尝试将目录更改为/user/me/home: $,我的控制台可能仍然显示我仍在/developer/当我真的在/user/me/home,但/user/me/home/developer会另外显示。

基本上,找到一种方法来确保你实际上没有更改目录,并且命令返回的值不只是让你失望。