0

所以我正在制作一个可以打开与远程设备的连接并执行不同命令的应用程序。所以昨天在我下班之前,当我遇到错误时,我正在调试。但是由于我的应用程序忽略了它并继续进行并且没有足够的时间立即修复它,我决定今天就这样做。当我想再次与我的程序建立连接时,它说它无法进行身份验证(注意*参数没有改变)。

所以我做了一些检查以确定问题,在登录服务器并运行 netstat 后,我​​发现端口 22 有一个活动连接,该连接源自我的应用程序。

不知何故,连接没有出现在我的 SSH 管理器中,直到我重新启动它两次。

所以为了在生产环境中防止这样的事情发生,我该如何防止这样的事情发生。

我的程序.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();
        }
    }

我的执行命令类:

 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 的连接。

4

1 回答 1

0

编辑 我发现我已经编译了应用程序并且它在命令行中运行。结果发现代码没有错误

于 2016-03-07T08:08:05.740 回答