从Windows机器运行shell命令的Java程序

时间:2014-09-19 08:31:48

标签: java shell runtime.exec

我正在尝试运行Java程序以在远程(Linux)计算机上发出命令。我可以让putty.exe运行,然后使用SSH密钥连接到机器。但我无法运行实际的命令,如“bash”“ps-ef”或“ls -la”。目前使用Java runtime.exec,不确定使用java.lang.ProcessBuilder是否有帮助?我究竟做错了什么 ?任何帮助/指导将不胜感激..提前致谢

package hello;

import java.io.*;
public class RuntimeExample {




     public static void main(String args[]) throws IOException {



    try{     


    Runtime runtime = Runtime.getRuntime();
    Process process = runtime.exec(new String[]{"C:\\Users\\yky90455\\Desktop\\putty.exe","abc@login.testserver.helloworld.co.uk","bash", "ps -ef"});


    InputStream is = process.getInputStream();
    InputStreamReader isr = new InputStreamReader(is);
    BufferedReader br = new BufferedReader(isr);
    String line;

    System.out.printf("Output of running the command is:");

    while ((line = br.readLine()) != null) {
        System.out.println(line);

      }                                                             

    } catch (Exception e) {
        e.printStackTrace();
    }
}   

}

4 个答案:

答案 0 :(得分:2)

尝试使用Jsch From here从Java执行shell脚本到某个远程Linux机器。我已经研究了这个并且它真的很有趣。尽管你可能会发现文档缺乏理解这一点,但你可以很容易地克服它。

答案 1 :(得分:0)

还要考虑ExpectJ,它是TCL Expect的包装器。自2010年中期以来,该项目似乎没有任何积极的开发,但我过去曾将它用于SSH。

http://expectj.sourceforge.net/apidocs/expectj/SshSpawn.html

答案 2 :(得分:0)

感谢您的所有答案。我试过Ganymed SSH-2库。它适用于远程计算机上的基本命令。如果遇到SSH-2的任何限制,我将不得不探索其他API。

答案 3 :(得分:-1)

public class triggerPutty {
    public static void main(String[] a) {
        try {
            String command = "putty.exe user@abc.text.com -pw password -m C:\\containing_comman.txt";
            Runtime r = Runtime.getRuntime();
            Process p = null;
            p = r.exec(command);
            p.waitFor();
            p.destroy();
        } catch (Exception e) {
            e.printStackTrace();
        }    
    }
}

-m有助于从该文件运行命令。
您可以在该文件中保留N个命令.. ##标题##