2012-03-30 5 views
0

unten ist das Stück Code, den ich ausführen. ob ich ein Array pf string (cmd) verwende oder es ist eine einzelne Zeichenfolge Ich bekomme eine Ausnahme (siehe weiter unten), während es eine passwortlose Anmeldung am Linux-Zielsystem gibt.Verwenden von Java-Runtime (auf einem Windows-Rechner) zum Senden eines Linux-Befehls an einen Linux-Server

private static int bringHostFile() { 
    try {    
     String[] cmd ={"ssh" , "[email protected]" , "/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; 
} 

Die Ausnahme:

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) 

Jede Idee, was ist die Ursache?

+3

"Das System kann die angegebene Datei nicht finden": ist 'ssh' in% PATH% Ihres Programms? – Mat

+0

Oder Sie haben keinen 'ssh' Client auf Ihrem Windows Rechner installiert. – nobeh

+0

Sie können den vollständigen Pfad des 'ssh' angeben, wenn er nicht in Ihrem Pfad ist. –

Antwort

5

Der beste Weg, dies in einer tragbaren Weise zu tun, wäre eine reine Java-SSH-Implementierung Es wird vermeidet Sie mit Classpath zu bewältigen

Jsch ist einer von ihnen, und ein guten

zu verwenden/environment Probleme, während Sie senden Sie einen Befehl, den Sie wollen, um Ihre Remote-Box

0

stellen Sie sicher, Sie haben SSH-Client, und es ist in% PATH% (versuchen Sie 'cmd' und exec SSH von dort öffnen). Sie können auch Putty oder Cygwin dafür verwenden, oder die empfohlene Art und Weise Java-Bibliothek verwenden: SSH library for Java