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

и мой класс, где я делаю связь:

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 в целом.

1 ответ

Решение

РЕДАКТИРОВАТЬ Я узнал, что я скомпилировал приложение, и оно работало в командной строке. Оказывается, нет ошибки с кодом

Другие вопросы по тегам