2016-03-02 2 views
0

Так что я делаю приложение, которое может открывать подключения к удаленным устройствам и выполнять разные команды. Поэтому вчера, прежде чем я ушел с работы, я отлаживался, когда получил ошибку. Но по мере того, как мое приложение игнорировало его и продолжало и не имея достаточного времени для его исправления, я решил сделать это сегодня. Когда я захотел снова установить связь с моей программой, он сказал, что не может аутентифицироваться (обратите внимание, что параметры не менялись).SSH-соединение оставалось открытым после ошибки отладки

Так что я сделал несколько проверок, чтобы определить проблему, после входа на сервер и запуска netstat я узнал, что было активное соединение с портом 22, который возник из моего приложения.

Как-то соединение не появилось в моем диспетчере SSH, пока я не перезагрузил его.

Чтобы избежать подобных ситуаций в производственной среде, как я могу предотвратить подобные вещи.

мои Program.cs

class Program 
    { 
     static void Main(string[] args) 
     { 
      var ip=""; 
      var port=0; 
      var user=""; 
      var pwd=""; 
      var cmdCommand=""; 
      ConnectionInfo ConnNfo; 
      ExecuteCommand exec = new ExecuteCommand(); 
      SSHConnection sshConn = new SSHConnection(); 


      if (args.Length > 0) 
      { 
       ip = args[0]; 
       port = Convert.ToInt32(args[1]); 
       user = args[2]; 
       pwd = args[3]; 
       cmdCommand = args[4]; 

       ConnNfo = sshConn.makeSSHConnection(ip, port, user, pwd); 
       exec.executeCMDbySSH(ConnNfo, cmdCommand); 

      } 
      else { 
       try 
       { 
        XMLParser parser = new XMLParser(); 
        List<List<string>> configVars = parser.createReader("C:\\Users\\myusername\\Desktop\\config.xml"); 
        Console.WriteLine("this is from program.cs"); 

        //iterate through array 
        for (int i = 0; i < configVars[0].Count; i++) 
        { 
         if ((configVars[0][i].ToString() == "device" && configVars[1][i].ToString() == "device") && (configVars[0][i + 6].ToString() == "device" && configVars[1][i + 6].ToString() == "no value")) 
         { 
          string ipAdress = configVars[1][i + 1].ToString(); 
          int portNum = Convert.ToInt32(configVars[1][i + 2]); 
          string username = configVars[1][i + 3].ToString(); 
          string passwd = configVars[1][i + 4].ToString(); 
          string command = configVars[1][i + 5].ToString(); 
          Console.WriteLine("making connection with:"); 
          Console.WriteLine(ipAdress + " " + portNum + " " + username + " " + passwd + " " + command); 
          ConnNfo = sshConn.makeSSHConnection(ipAdress, portNum, username, passwd); 
          Console.WriteLine("executing command: "); 
          exec.executeCMDbySSH(ConnNfo, command); 

         } 
        } 

       } 
       catch (Exception e) { Console.WriteLine("Error occurred: " + e); } 
      } 

      Console.WriteLine("press a key to exit"); 
      Console.ReadKey(); 
     } 
    } 

мой класс ExecuteCommand:

public class ExecuteCommand 
    { 
     public ExecuteCommand() 
     { 

     } 
     public void executeCMDbySSH(ConnectionInfo ConnNfo, string cmdCommand) 
     { 
      try 
      { 

       using (var sshclient = new SshClient(ConnNfo)) 
       { 
        //the error appeared here at sshclient.Connect(); 
        sshclient.Connect(); 
        using (var cmd = sshclient.CreateCommand(cmdCommand)) 
        { 

         cmd.Execute(); 
         Console.WriteLine("Command>" + cmd.CommandText); 
         Console.WriteLine(cmd.Result); 
         Console.WriteLine("Return Value = {0}", cmd.ExitStatus); 
        } 
        sshclient.Disconnect(); 
       } 
     } 
      catch (Exception e) { Console.WriteLine("Error occurred: " + e); } 
} 
    } 

и мой класс, где я сделать conenction:

public class SSHConnection 
    { 
     public SSHConnection() { } 

     public ConnectionInfo makeSSHConnection(string ipAdress, int port, string user, string pwd) 
     { 
      ConnectionInfo ConnNfo = new ConnectionInfo(ipAdress, port, user, 
       new AuthenticationMethod[]{ 

       // Pasword based Authentication 
       new PasswordAuthenticationMethod(user,pwd), 
       } 
       ); 
      return ConnNfo; 
     } 
    } 

Примечание * я не включил мой XMLParser класс потому что это не имеет отношения к вопросу и не имеет каких-либо связей относительно SSH в целом.

ответ

0

EDIT Я узнал, что я скомпилировал приложение и работал в командной строке. Оказывается, нет ошибки с кодом