2015-04-01 77 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