2016-04-13 3 views
0

Когда я подключаюсь к серверу с помощью библиотеки SSH.NET, папка по умолчанию - /mif/stud3/2014/rira1874. Когда я выполняюНе удается сменить каталог с C# SSH.NET

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

Я не вижу, чтобы заданный вопрос был таким же, как в вашем коде ---> ваш код имеет 'res = ssh.CreateCommand (Console.ReadLine()). Execute();', тогда как вы говорите about 'res = ssh.CreateCommand (" cd existingFolder "). Execute();'! –

+0

Что я имел в виду, когда я писал «cd existingFolder» в консоли, он по-прежнему не меняет каталог –

ответ

1

Вы проверили список каталогов, чтобы убедиться, что вы на самом деле еще в "/ MIF/stud3/2014/rira1874"? Похоже, где бы вы ни были, SSHing in - это * nix box; сделав это предположение на основе строки ssh.CreateCommand("pwd").Execute(). Если это так, несколько раз список каталогов, возвращаемый/отображаемый на консоли, не изменится. Например, если у меня есть консоль со следующим PWD /user/me/home: $, и я пытаюсь сменить каталоги на /developer/, моя консоль все еще может показать, что я все еще на /user/me/home, когда действительно я нахожусь в /user/me/home/developer, но ls покажет обратное.

В принципе, найдите способ убедиться, что вы фактически не меняете каталоги, а возвращаемое значение из команды не просто отбрасывает вас.

+0

Спасибо за ответ, хотя после того, как я сменил каталог, скажем «Документы», существующую папку и тип в 'ls', он будет показывать содержимое'/mif/stud3/2014/rira1874/Documents', но в той же папке, к которой я подключился. Если я не сделаю 'cd Documents && ls'. Но клиент возвращается к папке по умолчанию. Вот изображение: http://i.imgur.com/a7CBfPC.png –

1

Попробуйте сделать следующее string cmdstr = "cd /etc; ls -la"; ssh.Connect(); var cmd = ssh.RunCommand(cmdstr); var result = cmd.Result;

В основном ssh.net не допускает/поддержки (я думаю). Альтернативный вариант - вы можете перейти в каталог и выполнить соответствующую команду. Если вам нужно выполнить какой-либо файл, просто используйте приведенный выше пример «cd/etc; ./yourFile». Убедитесь, что вы добавили точку с запятой ";" поэтому вы можете продолжить выполнение.