2013-03-14 8 views
4

Java 프로그램의 일부로이 작업을 수행 할 수있는 간단한 방법이 있는지 궁금합니다.ssh in java (다른 컴퓨터에서 명령 실행)

다른 컴퓨터로 ssh를 보내고 해당 컴퓨터에서 명령을 수행하고 싶습니다.

간단한 예제는 다음과 같습니다. runtime.exec ("say hello world"); (Mac의 경우) 텍스트 음성 변환 엔진이 hello world를 말합니다.

다른 컴퓨터에서 java를이 방법으로 실행할 수 있습니까?

또한 위와 같은 경우 동시에 여러 대의 컴퓨터로 ssh 할 수 있습니까?

감사

는 나는 Apache MINA SSHD을 살펴보고 당신을 건의 할 것
+1

내가 생각하는 [구글] (https://www.google.co. uk/search? q = java + ssh & ie = utf-8 & oe = utf-8 & aq = t & rls = org.mozilla : ko-ko : 공식 및 클라이언트 = firefox-a & 채널 = fflbh) –

답변

0

, 클라이언트와 자바와 서버를 모두 쓸 수 있습니다

2

JSch

로에서보세요 정확히 같은 시간에 실행하고 있습니까? 원격 컴퓨터 목록을 처리하기 위해 여러 스레드를 생성하려는 경우가 아니면 실제로는 아닙니다.

-1

here을 시작하고 라이브러리를 선택하고 필요에 맞게 코드를 추가 할 수 있습니다.

+0

404 찾을 수 없습니다 - 링크를 업데이트하십시오 –

5

여기에는 많은 라이브러리가 있습니다. 나는 을 추천하는데, 그 내용은 official OpenSSH website에 언급되어있다. 동일한 사이트에서 Java 용으로 사용할 수있는 다른 라이브러리를 찾을 수도 있습니다.

ls -r 명령어의 예를 사용하여, SSH 통해 실행 Ganymed SSH-2 :

import ch.ethz.ssh2.Connection; 
import ch.ethz.ssh2.Session; 
import ch.ethz.ssh2.StreamGobbler; 

[...] 

public static ArrayList<String> lsViaSSH(String hostname, String username, String password, String dir) { 
    ArrayList<String> ls = new ArrayList<String>(); 

    try 
    { 
     Connection conn = new Connection(hostname); 

     conn.connect(); 

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

     if (isAuthenticated == false) { 
      return null; 
     } 

     Session sess = conn.openSession(); 

     sess.execCommand("ls -r " + dir); 

     InputStream stdout = new StreamGobbler(sess.getStdout()); 

     BufferedReader br = new BufferedReader(new InputStreamReader(stdout)); 

     while (true) 
     { 
      String line = br.readLine(); 
      if (line == null) 
       break; 
      ls.add(line); 
     } 

     sess.close(); 
     conn.close(); 
    } 
    catch (IOException e) 
    { 
     return null; 
    } 

    if(StringUtils.isEmpty(ls.get(0))) 
     return null; 

    return ls; 
} 

이 SSH를 통해 명령을 실행하기 위해 필요한 기능 만 아니라, I 그것이있을 수 희망 너에게 좋은 출발점이야.

1

는 가장 쉬운 것 당신이 암호를 입력 방지하기 위해 ssh 명령을 사용할 수 시스템 및 ssh keys are set up에있어 주어진 단지

runtime.exec("ssh remote_comp 'say hello world'"); 
+0

작은 따옴표가 필요한 이유는 무엇입니까? – Steve

+0

당신이 도망쳐 야 할 큰 따옴표 (\ ")보다 쉽기 때문에 –

+0

왜 우리는 따옴표가 필요합니까?'man ssh'는'ssh ... [user @] hostname [command]'를 보여줍니다. 우리가 평소대로 명령을 쓸 수 있다고 가정 할 때, 이런 상황에서 따옴표가 필요할 때 어떻게 결정할 수 있습니까? 큰 도움이되었습니다 :) 감사합니다. – Steve

관련 문제