Использование Java Runtime (на машине с Windows) для отправки команды linux на сервер - PullRequest
0 голосов
/ 30 марта 2012

ниже - фрагмент кода, который я запускаю. использовать ли строку массива pf (cmd) или единственная строка, в которой я получаю исключение (см. ниже), когда в целевую систему Linux вводится пароль без пароля.

private static int bringHostFile() {
    try {            
        String[] cmd ={"ssh" , "root@im6-64s" , "/root/bring_hosts"};
   Process p = Runtime.getRuntime().exec(cmd);
        BufferedReader stdInput = new BufferedReader(new 
             InputStreamReader(p.getInputStream()));

        BufferedReader stdError = new BufferedReader(new 
             InputStreamReader(p.getErrorStream()));

        String s = null;
        // read the output from the command
        if ((s = stdInput.readLine()) != null) {
            System.out.println(s);     
         }

        // read any errors from the attempted command
        while ((s = stdError.readLine()) != null) {
               System.out.println(s);
        }            

    }
    catch (IOException e) {
        e.printStackTrace();
        System.exit(-1);
    }   

    return 0;  
}

Исключение:

java.io.IOException: Cannot run program "ssh": CreateProcess error=2, The system cannot find the file specified.
    at java.lang.ProcessBuilder.start(ProcessBuilder.java:471)
    at java.lang.Runtime.exec(Runtime.java:604)
    at java.lang.Runtime.exec(Runtime.java:442)
    at java.lang.Runtime.exec(Runtime.java:339)
    at JavaRunCommand.CommandGetCurrentCPUSize(JavaRunCommand.java:140)
    at EC.<init>(EC.java:29)

Есть идеи, в чем причина?

Ответы [ 2 ]

5 голосов
/ 30 марта 2012

Лучший способ сделать это портативным способом - использовать чистую реализацию Java SSH.

Jsch - один из них, а хороший

Это позволит вам избежать проблем с classpath / environment, позволяя вам отправлять любые команды на удаленный ящик

0 голосов
/ 30 марта 2012

убедитесь, что у вас есть клиент ssh, и он находится в% PATH% (попробуйте открыть 'cmd' и выполнить exec ssh оттуда). Вы также можете использовать замазку или Cygwin для этого, или наиболее рекомендуемый способ - использовать библиотеку Java: Библиотека SSH для Java

...