2014-09-19 2 views
0

원격 (Linux) 시스템에서 명령을 쉘 아웃하기 위해 Java 프로그램을 실행하려고합니다. putty.exe를 실행하여 SSH 키를 사용하여 컴퓨터에 연결할 수 있습니다. 그러나 "bash" "ps-ef"또는 "ls -la"와 같은 실제 명령을 실행할 수는 없습니다. 현재 Java 런타임 .exec을 사용하고 있는데 java.lang.ProcessBuilder을 사용하면 확실하지 않은가요? 내가 도대체 ​​뭘 잘못하고있는 겁니까 ? 어떤 도움/지침은 크게Windows 컴퓨터에서 쉘 명령을 실행하는 Java 프로그램

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","[email protected]","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(); 
    } 
} 

} 
+5

왜 퍼티를 사용하는 대신 SSH 라이브러리를 사용하지 않습니까? – BackSlash

+1

Java의 전체 요점은 OS에서 추상적입니다. 네이티브 명령을 호출하기 전에 항상 플랫폼 독립적 인 대안을 검색하십시오. 귀하의 예제에서 Java 용 SSH 구현 (예 : [sshj] (https://github.com/hierynomus/sshj))을 사용하십시오. –

+0

빠른 응답을 보내 주셔서 감사합니다. 나는 sshj와 Jsch를 조사 할 것이다. –

답변

2

일부 원격 리눅스 컴퓨터에 자바에서 실행 쉘 scrips에를 얻을 수 Jsch From here을 시도 사전에 .. 감사를 감상 할 수있다. 나는이 일을했고 정말 재미있었습니다. 당신이 이것을 이해하기위한 문서의 부족함을 거의 찾을 수는 없지만 그렇게 쉽게 극복 할 수는 있습니다.

+0

빠른 응답을 보내 주셔서 감사합니다. 나는 sshj와 Jsch를 조사 할 것이다. –

+0

@joule_wonder : 환영합니다.하지만 Jsch에 갈 경우이 답을 표시하십시오 :) –

0

감사합니다. 나는 Ganymed SSH-2 라이브러리를 사용했다. 원격 시스템의 기본 명령에 잘 작동합니다. SSH-2를 사용하여 제한이있을 경우를 대비하여 다른 API를 탐색해야합니다.

-1
public class triggerPutty { 
    public static void main(String[] a) { 
     try { 
      String command = "putty.exe [email protected] -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 개의 명령을 보관할 수 있습니다. ## Heading ##

+0

질문에이 코드를 사용하십시오. –

+0

답변 개선을 고려하십시오. [코드 전용 답변은 '매우 낮은 품질'에 속할 수 있으며 삭제 대상이 될 수 있습니다 ... 우리는 항상 코드 팩토리가 아니라고 선전했습니다. 우리는 다른 사람들에게 물고기를 가르쳐주는 사람들입니다. 코드 전용 답변은 하루 동안 사람에게 피드를 제공합니다.] (http://meta.stackexchange.com/questions/148272/is-there-any-benefit-to-allowing-code-only-answers-while-blocking-code -only-ques) – JNYRanger