товарищи программисты Java. Недавно передо мной встала интересная задача — создать программу, которая бы использовала SSH-туннель в качестве прокси для просмотра веб-страниц (через HTTPS). После прочтения некоторых документов по JSCH (http://www.jcraft.com/jsch/, Java Библиотека туннелирования SSH), в которой все давали в качестве примера подключения к базе данных, я решил попробовать сам. Вот код подключения, который я скопировал из http://kahimyang.info/kauswagan/code-blogs/1337/ssh-tunneling-with-java-a-database-connection-example
int assigned_port;
int local_port=3309;
// Remote host and port
int remote_port=3306;
String remote_host = "<SSH host goes here>";
String login = "<SSH login goes here>";
String password = "<SSH password goes here>";
try {
JSch jsch = new JSch();
// Create SSH session. Port 22 is your SSH port which
// is open in your firewall setup.
Session session = jsch.getSession(login, remote_host, 22);
session.setPassword(password);
// Additional SSH options. See your ssh_config manual for
// more options. Set options according to your requirements.
java.util.Properties config = new java.util.Properties();
config.put("StrictHostKeyChecking", "no");
config.put("Compression", "yes");
config.put("ConnectionAttempts","2");
session.setConfig(config);
// Connect
session.connect();
// Create the tunnel through port forwarding.
// This is basically instructing jsch session to send
// data received from local_port in the local machine to
// remote_port of the remote_host
// assigned_port is the port assigned by jsch for use,
// it may not always be the same as
// local_port.
assigned_port = session.setPortForwardingL(local_port,
remote_host, remote_port);
} catch (JSchException e) {
System.out.println("JSch:" + e.getMessage());
return;
}
if (assigned_port == 0) {
System.out.println("Port forwarding failed!");
return;
}
Теперь я не совсем разбираюсь во всех вещах с переадресацией портов, но, если я правильно понимаю, код должен перенаправлять все входящие соединения на 127.0.0.1:3309 (или любой другой назначенный_порт) через сервер SSH. Теперь я застрял. Как мне отправить HttpsURLConnection через 127.0.0.1:3309? Я попытался определить его как прокси-сервер HTTP, HTTPS или SOCKS, но ни один из них не работает. Кто-нибудь может мне помочь?
ssh
для этого. В любом случае обязательно потренируйтесь с клиентомssh
, прежде чем пытаться сделать это на Java. - person artbristol   schedule 19.05.2014ssh -D1080 <remote host>
, который создаст прокси-сервер SOCKS5 на локальном хосте. Затем настройте клиент HTTPS на использование этого прокси. - person artbristol   schedule 19.05.2014