Мне нужно выполнить некоторые команды с удаленного компьютера, используя SSH-соединение, но проблема в следующем:
Клиентский компьютер (под управлением Windows) подключен к сети, где я вижу удаленный сервер (второй компьютер * nix, в той же сети). Я могу делать с ним соединения SSH, однако компьютер, содержащий файлы (работающий * nix), не находится в этой сети, я могу подключиться только через этот динамический туннель SSH, открытый на втором компьютере, где я обычно использую PuTTY для настроить это соединение Тогда у меня есть доступ к удаленным файлам.
На следующем рисунке показана архитектура (брандмауэр похож на второй компьютер):
Мне нужно сделать эту работу автоматически, поэтому я провел некоторый тест с 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";
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);
Я установил соединение, однако, когда я запускаю команду с использованием объекта session
, ответ идет со второй машины, а не с третьей, как я ожидал. Я хотел бы знать, есть ли другая библиотека, которая помогает сделать это, или я использую неправильный JSch.