2012-02-14 2 views
0

мне нужно, чтобы получить некоторые файлы с удаленного компьютера с помощью соединения SSH, но проблема заключается в следующем:Передача файлов корыта SSH туннель с Явы

Клиентский компьютер (Запуск Windows), где я буду работать мое приложение подключен к сети, где я вижу удаленный сервер (второй компьютер (Running unix), в той же сети), я могу делать с ним ssh-соединения, однако на компьютере, который содержит файлы (Running unix), нет в этой сети , Я могу подключиться только к этому сквозному динамическому туннелю ssh, открытому на втором компьютере, где я обычно использую Putty для настройки этого соединения, тогда у меня есть доступ к удаленным файлам.

Этот рисунок представляет собой архитектуру, (брандмауэр подобен Seconda машине)

Architecture

мне нужно, чтобы сделать эту работу автоматически, так что я сделал некоторые испытания с Java и библиотеки JSch, здесь некоторый код:

/* 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.

ответ

0

Это тот же самый ответ, чтобы your other question (где вы используете соединение оболочки вместо передачи файлов):

Положите правую HostName в rhost, а именно имя целевого сервера, как видно из сервера брандмауэра.

Если он работает с HTTP, я полагаю, что сервер брандмауэра также имеет прокси-сервер HTTP, который пересылает запросы на порт 80 на ваш целевой порт ... и, конечно же, он не может сделать это для SSH, если он также должен быть сервером SSH.

Если вы хотите выполнить оба подключения от JSch, вместо того, чтобы выполнять локальную переадресацию портов и затем подключаться к этому переадресованному порту, вы можете использовать мой класс ProxySSH, чтобы найти in the JSch wiki.

+0

wiki-ссылка больше не работает – sjngm

+0

Это несчастливо - похоже, что SourceForge избавился от своей функциональности MediaWiki (по крайней мере, для этого проекта). Я посмотрю, есть ли у меня какая-то версия этого класса. –

Смежные вопросы