2017-09-25 46 views
0

我想連接到Dell X1008交換機並運行一些命令。我使用了C#Tamir.SharpSsh和Renci.SshNet庫。C#連接並運行命令到Dell交換機

Using Tamir.SharpSsh; 

SshExec exec = new SshExec("ip address", "username", "password"); 
exec.Connect(); 
var output = exec.RunCommand("show vlan"); 
exec.Close(); 

但我的代碼凍結在「exec.RunCommand(」show vlan「)」行。

using Renci.SshNet; 
using (var client = new SshClient(Host, UserName, Password)) 
     { 
      try 
      { 
       client.Connect(); 
      } 
      catch (Exception ex) 
      { 

       throw; 
      } 

      var command = client.CreateCommand("show vlan"); 
      return command.Execute(); 
     } 

這裏我的代碼凍結在「var command = client.CreateCommand(cmd)」行。

任何人都有想法嗎?以上代碼適用於Cisco交換機。我可以通過Putty軟件連接到Dell和Cisco交換機,並且可以從putty運行命令。我的要求是從C#應用程序運行命令。

問候

拉維

+0

1)不要嘗試SharpSSh,這是一個死的項目。 2)你確定它掛在'CreateCommand'上嗎?這幾乎沒有。我希望它掛在'command.Execute'上。 3)你可以使用'plink hostname show vlan'執行命令嗎? (PLink部分是PuTTY包) –

回答

0

Renci.SshNet是更好的選擇。

檢查此方法的響應,該命令有超時。

public string ExecuteCommandSsh(string host, int port, string username, string password, string[] commands) 
{ 
    var returnMessage = string.Empty; 

    try 
    { 
     using (var client = new SshClient(host, port, username, password)) 
     { 
      //Create the command string 
      var fullCommand = string.Empty; 
      foreach (var command in commands) 
      { 
       fullCommand += command + "\n"; 
      } 

      client.Connect(); 
      var sshCommand = client.CreateCommand(fullCommand); 
      sshCommand.CommandTimeout = new TimeSpan(0, 0, 10); 

      try 
      { 
       sshCommand.Execute(); 
       returnMessage = sshCommand.Result; 
      } 
      catch (SshOperationTimeoutException) 
      { 
       returnMessage = sshCommand.Result; 
      } 


      client.Disconnect(); 
     } 
    } 
    catch (Exception e) 
    { 
     //other exception 
    } 

    return returnMessage; 
} 
+0

這是如何回答這個問題的?您已經發布了OP所使用的相同代碼。 +你是什麼意思*「Renci.SshNet是更好的庫SSH.NET」*? –

+0

OP有兩個庫文件Tamir.SharpSsh和Renci。我的例子有一個超時的命令。超時可以顯示響應。 – live2