Невозможно взаимодействовать через SSH из программы JAVA - PullRequest
0 голосов
/ 20 октября 2011

Я делаю SSH с моим сервером Linux через Java-программу, я могу выполнять команды, такие как сценарии оболочки.Но проблема в том, что всякий раз, когда я выполняю определенный сценарий оболочки, он дает возможность выбрать между да или нет, теперь на моей консоли Java я выбираю да, но это на самом деле не взаимодействует с сервером Linux.Как сделать эту работу с помощью Java-программирования?если у вас есть какой-либо код, пожалуйста, поделитесь.Я брею свой код для выполнения SSH.

    String arr1[]=new String[arr.length];
    ReadConfig rc=new ReadConfig();
    rc.readConfig();
    hostname=rc.hostname;
    username=rc.username;
    password=rc.password;
    for(int i=0;i<arr.length;i++)
    {
        arr1[i]= arr[i];
        System.out.println("the array value "+arr1[i]+" "+i);
    }

    try{
         String com=arr1[5].toString().trim();
         System.out.println("  "+com);
        /* Create a connection instance */

        conn = new Connection(hostname);

        /* Now connect */
                conn.connect();


                /* Authenticate.
         * If you get an IOException saying something like
         * "Authentication method password not supported by the server at this stage."
         * then please check the FAQ.
         */

            boolean isAuthenticated = conn.authenticateWithPassword(username, password);


                if (isAuthenticated == false)
                    throw new IOException("Authentication failed.");

                /* Create a session */

                sess = conn.openSession();
               try{
                  sess.execCommand(com);


                //obj.append("Pass");
               }catch(Exception e){


                   //obj.append("Fail");
               }
                //Session sess1 = conn.openSession();
                System.out.println("Here is some information about the remote host:");
                InputStream stdout = new StreamGobbler(sess.getStdout());
                BufferedReader br = new BufferedReader(new InputStreamReader(stdout));

                while (true)
                {
                    String line = br.readLine();
                    if (line == null)
                        break;
                    System.out.println(line);
                }
                /* Show exit status, if available (otherwise "null") */

                System.out.println("ExitCode: " + sess.getExitStatus());

    }catch (Exception e) {
        // TODO: handle exception
    }finally{
        /* Close this session */
    //obj.close();
        sess.close();
        /* Close the connection */

        conn.close();
    }

Ответы [ 2 ]

1 голос
/ 20 октября 2011

Вы ничего не записываете в поток ввода.Просто ввод в консоли java ничего не делает вообще.

Создайте PrintWriter для сеансов stdin-OutputStream:

Тогда вы можете out.println("y"), если вам нужно.Если вам нужна интерактивность с использованием java-консоли, вам нужно прочитать из System.in и отправить это в свой outputtream.

PrintWriter out = createPW(new OutputStreamWriter(sess.getStdin()), true);

Вот полуприличный способ создания PrintWriter с подходящим символом разделителя строк.

public static PrintWriter createPrintWriter(OutputStreamWriter out, boolean autoflush) {
    Properties props = System.getProperties();
    synchronized (props) {
        Object old = null;
        try {
            old = props.setProperty("line.separator", "\n");
            return new PrintWriter(out, autoflush);
        } finally {
            if (old != null) {
                props.put("line.separator", old);
            }
        }
    }
}
0 голосов
/ 20 октября 2011

вы можете использовать команду «да».Передать вывод из Да в следующую команду

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...