2015-04-01 78 views
0

我正在尝试使用C#创建一个SSH客户端。我正在使用Tamir.SharpSsh库。我有问题发送命令并从服务器获取适当的响应。SharpSsh命令执行

我一直在测试它的方式是通过重新发送过ls命令,随后cd..命令,然后ls命令 - 看看是否被正确执行cd..命令。但是,第一个ls命令与第二个ls命令之间没有区别。我不完全确定我做错了什么。也许我使用了错误的Ssh类型。我提供了我得到的代码和输出。我还添加了我期望的输出。

using Tamir.SharpSsh; 

namespace SSHNetExample 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      SshExec ssh = null; 
      try 
      { 
       Console.Write("-Connecting..."); 
       ssh = new SshExec(host, username, password); 

       ssh.Connect(); 

       Console.WriteLine("OK ({0}/{1})", ssh.Cipher, ssh.Mac); 
       Console.WriteLine("Server version={0}, Client version={1}", ssh.ServerVersion, ssh.ClientVersion); 
       Console.WriteLine("-Use the 'exit' command to disconnect."); 
       Console.WriteLine(); 

       while(true) 
       { 
        string command = Console.ReadLine(); 

        if(command == "exit") 
         break; 
        string data = ssh.RunCommand(command); 

        Console.WriteLine(data); 
       } 
      } 
      catch(Exception e) 
      { 
       Console.WriteLine(e.Message); 
      } 

      if(ssh != null) 
      { 
       Console.WriteLine("Disconnecting..."); 
       ssh.Close(); 
       Console.WriteLine("OK"); 
      } 
     } 
    } 
} 

输出: enter image description here

预期输出: enter image description here

回答

1

的SshExec类是用于执行一个命令。它为每个命令登录到服务器,并执行您要求的命令。它与您登录时类似(但不完全相同),输入cd ..,再次登出,再次登录并输入ls - 当您第二次登录时,您被重定向到主目录。

如果你想继续使用SshExec,你应该结合你的命令,以便你可以执行一个命令。例如,在这种情况下,您将执行ls ..

如果您希望能够像交互式会话一样发出多个命令,请查看SshShell类,而不是SshExec

+0

你可以举一个使用SshShell的例子吗?我曾尝试在SshExec之前使用它,并且我无法使其工作。我很困惑到什么进入ExpectPattern属性和模式功能。 – user2970916 2015-04-01 17:16:20

+0

不,对不起,我开始使用SharpSSH,因为它没有被维护。我现在使用SSH.NET(https://sshnet.codeplex.com/)库,它有更好的文档和更新的更新。 – Richard 2015-04-01 17:23:24

+0

谢谢你的理查德。我继续前进并使用SSH.NET迁移。我还没有真正能够找到太多的文档。我确实发布了另一个问题,它使用SSH.NET重现了我在这个问题上遇到的问题。 http://stackoverflow.com/q/29397766/2970916 – user2970916 2015-04-01 18:08:57