This would make for a nice blog post!
On Thu, Sep 18, 2014 at 9:38 PM, Michael Joyner <[email protected]> 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.