lucene-solr-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Michael Joyner <mich...@newsrx.com>
Subject Re: Access solr cloud via ssh tunnel? (Workaround/Jsch)
Date Thu, 18 Sep 2014 16:08:17 GMT
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();
         }
     }
}


Mime
View raw message