2012-02-14 2 views
0

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

Клиентский компьютер (Запуск Win) подключен к сети, в которой Я вижу удаленный сервер (второй компьютер (nix), в той же сети), я могу делать с ним 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.

ответ

1

Конечно, если вы установили rhost = "localhost", соединение поступит на сервер SSH, а не на сервер «Ресурс». Вставьте правильное имя хоста, и это не должно быть проблемой. (Я сделал это один раз.)

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

+0

Не могли бы вы дать мне примеры ?, Я достигаю успешной связи – fers

+0

, но я не могу выполнить команду на сервере ресурсов – fers

+0

Пример в вики для меня работал, когда я писал (несколько месяцев назад), но из Конечно, вам нужна учетная запись с правами выполнения на целевом сервере. –

0

Вам необходимо создать сеанс на втором сервере после переадресации портов. Затем соединение устанавливается на сервер за брандмауэром.

Посмотрите на этот код для example. Что этот код делает, это создать локальный перенос порта в порт ssh в целевой системе, а затем подключиться через него. Выполнение команды hostname показывает, что она действительно работает в пересылаемой системе.

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