2012-02-14 5 views
0

물마루하지만 문제는 다음과 같다 : 네트워크 곳으로 연결되어실행 원격 명령 내가 ssh 연결을 사용하여 원격 컴퓨터에서 일부 coommands를 실행해야 터널 SSH 및 자바

클라이언트 컴퓨터 (승리를 실행) 내가 서버와 원격 (두 번째 컴퓨터 (nix), 같은 네트워크에서) 볼 수있는 그것과 ssh 연결을 할 수있는 파일 (유닉스 실행)이 컴퓨터는이 네트워크에없는, 나는 단지 이것과 연결할 수 있습니다 두 번째 컴퓨터에서 동적 터널 ssh를 열어 퍼티를 사용하여이 연결을 구성한 다음 원격 파일에 액세스 할 수 있습니다.

는 다음과 같은 그림이 구조를, (방화벽이 seconda 기계처럼) 대표

나는 그래서 자바와 JSch 라이브러리와 몇 가지 테스트를 해봤 자동으로이 작업을 할 필요가 Architecture

, 여기에 몇 가지 코드 :

/* Direccion y puerto del host local */ 
    String host = "localhost"; 
    int lport = 5040; 


    /* Direccion y puerto del host remoto*/ 
    String rhost = "localhost"; 
    int rport = 80; 

    /* Usuario y password para conectarse al servidor ssh*/ 
    String user = "test"; 
    String pwd = "test"; 

    try{ 
     JSch jsch=new JSch(); 

     Session session=jsch.getSession(user, host, 22); 
     session.setPassword("test"); 

     Properties config = new Properties(); 
     config.put("StrictHostKeyChecking","no"); 
     session.setConfig(config); 
     session.connect(); 

     int assinged_port=session.setPortForwardingL(lport, rhost, rport); 
     System.out.println("localhost:"+assinged_port+" -> "+rhost+":"+rport); 

내가 연결을 가지고 내가 대답은 두 번째 시스템에서하지 내가 예상 한대로 세 번째 시스템에서입니다 오브젝트 세션저기서 명령을 실행하지만 때, anot이 있다면, 내가 알고 싶습니다 이 작품을 만드는 데 도움이되는 그녀의 도서관이나 잘못된 JSch를 사용하고 있습니다.

답변

1

물론 rhost = "localhost"으로 설정하면 "Resource"서버가 아닌 SSH 서버에 연결됩니다. 올바른 호스트 이름을 입력하십시오. 문제가되지 않습니다. (나는 이것을 한 번했습니다.)

JSch에서 두 연결을 모두 수행하려면 로컬 포트 ​​전달을 수행 한 다음이 전달 된 포트에 연결하는 대신 내 ProxySSH 클래스를 사용하여 in the JSch wiki을 찾을 수 있습니다. (나는 당신도 거기에있는 것과 비슷한 상황에서이 작업을 수행했습니다.)

+0

나에게 예제를 줄 수 있니? – fers

+0

성공적인 연결을 달성했지만 리소스 서버에서 명령을 실행할 수 없습니다. – fers

+0

위키의 예제는 (몇 달 전) 작성했지만 저에게 효과적이었습니다. 물론 대상 서버에 대한 실행 권한이있는 계정이 필요합니다. –

0

포트 포워딩 후에 두 번째 서버에서 세션을 만들어야합니다. 그런 다음 방화벽 뒤의 서버에 연결이 설정됩니다.

이 코드는 example입니다.이 코드는 대상 시스템의 ssh 포트에 로컬 포트 ​​전달을 작성한 다음 연결합니다. hostname 명령을 실행하면 실제로 전달 된 시스템에서 실행되고 있음을 알 수 있습니다.