This would make for a nice blog post!

On Thu, Sep 18, 2014 at 9:38 PM, Michael Joyner <mich...@newsrx.com> wrote:

> On 09/16/2014 04:03 PM, Doug Balog wrote:
>
>> Not sure if this will work, but try to use ssh to setup a SOCKS proxy via
>> the  -D 9999 command option.
>> Then use the socksProxyHost and socksProxyPort via the java command line
>> (ie java -DsocksProxyHost="localhost")  or
>> System.setProperty("socksProxyHost","localhost") from your code. Make
>> sure
>> to specify both the host and the port.
>> See
>> http://docs.oracle.com/javase/7/docs/api/java/net/doc-files/
>> net-properties.html
>>
>
> Unfortunately Jsch does not seem to provide the "-D"  "socks5" over "ssh"
> option.
>
> - In case this may help others -
>
> Because the production system will have direct access to the cluster and
> this is being setup for accessing the production cloud from our office we
> instead did the following:
>
>         SolrTunnels t = new SolrTunnels();
>         t.connect();
>         LBHttpSolrServer server = new LBHttpSolrServer();
>         server.setParser(new BinaryResponseParser());
>         server.setAliveCheckInterval(500);
>         for (SolrHost solr: t.getEndpoints()) {
> server.addSolrServer("http://127.0.0.1:"+solr.forward+"/solr/test";);
>         }
>
> WHERE:
>
> import java.util.ArrayList;
> import java.util.Collection;
> import java.util.Iterator;
> import java.util.List;
>
> import com.jcraft.jsch.JSch;
> import com.jcraft.jsch.JSchException;
> import com.jcraft.jsch.Session;
> import com.newsrx.util.NrxLog;
>
> public class SolrTunnels {
>
>     static final private String sshUser = "autossh";
>     static final private String sshPass = "LETMEIN";
>     static private String sshHost = "public.solr.gateway.host.com;
>     static final private int sshPort = 22;
>
>     static volatile private JSch jsch = new JSch();
>     static private Session solrSSH = null;
>
>     public static class SolrHost {
>         public String host;
>         public int port;
>         public int forward;
>         public SolrHost() {}
>         public SolrHost(String host, int port) {
>             super();
>             this.host = host;
>             this.port = port;
>             this.forward = -1;
>         }
>     }
>     final static private List<SolrHost> nodes;
>     static {
>         nodes=new ArrayList<>();
>         nodes.add(new SolrHost("solr1.private", 8983));
>         nodes.add(new SolrHost("solr2.private", 8983));
>     }
>     public SolrTunnels() {
>
>     }
>
>     public void connect() {
>         if (solrSSH != null) {
>             if (solrSSH.isConnected()) {
>                 return;
>             }
>         }
>
>         JSch.setConfig("StrictHostKeyChecking", "no");
>         JSch.setConfig("Compression", "none");//compressionsometimes
> causes ssh transport breakage
>
>         int maxTries = 100;
>         do {
>             try {
>                 if (solrSSH !=null) {
>                     solrSSH.disconnect();
>                 }
>                 solrSSH = jsch.getSession(sshUser, sshHost, sshPort);
>                 solrSSH.setPassword(sshPass);
>                 solrSSH.connect(1000);
>                 Iterator<SolrHost> isolr = nodes.iterator();
>                 while (isolr.hasNext()) {
>                     SolrHost solr = isolr.next();
> solr.forward=solrSSH.setPortForwardingL(0, solr.host,solr.port);
> Console.log("http://127.0.0.1:"+solr.forward+"/solr";);
>                 }
>             } catch (JSchException e) {
>                 e.printStackTrace();
>                 try {
>                    Console.log("Sleeping 100 ms");
>                     Thread.sleep(100);
>                 } catch (InterruptedException e1) {
>                 }
>             }
>         } while (maxTries-- > 0&&!solrSSH.isConnected());
>     }
>
>     public Collection<SolrHost> getEndpoints() {
>         List<SolrHost> list = new ArrayList<>();
>         Iterator<SolrHost> isolr = nodes.iterator();
>         while (isolr.hasNext()) {
>             SolrHost solr = isolr.next();
>             if (solr.forward>0) {
>                 list.add(solr);
>             }
>         }
>         return list;
>     }
>
>     public void disconnect() {
>         if (solrSSH !=null) {
>             Iterator<SolrHost> isolr = nodes.iterator();
>             while (isolr.hasNext()) {
>                 SolrHost solr = isolr.next();
>                 try {
> solrSSH.delPortForwardingL(solr.forward);
>                 } catch (JSchException e) {
>                 }
>             }
>             solrSSH.disconnect();
>         }
>     }
> }
>
>


-- 
Regards,
Shalin Shekhar Mangar.

Reply via email to