用于弹性搜索的ssh隧道

时间:2016-05-24 23:54:13

标签: elasticsearch ssh ssh-tunnel

我在vpn上,不允许直接访问elasticsearch,因此我尝试将隧道ssh到具有访问权限的外部框。

我正在挖掘以下内容:

ssh -L 12345:<elastic_ip>-east-1.aws.found.io:9200

然后如果我卷曲:

curl http://user:pass@localhost:12345

我明白了:

{"ok":false,"message":"Unknown cluster."}

然而,如果我直接在盒子里尝试这个:

curl http://user:pass@<elastic_ip>-east-1.aws.found.io:9200

我明白了:

{
  "status" : 200,
  "name" : "instance",
  "cluster_name" : “<cluster>”,
  "version" : {
    "number" : "1.7.2",
    "build_hash" : “<build>“,
    "build_timestamp" : "2015-09-14T09:49:53Z",
    "build_snapshot" : false,
    "lucene_version" : "4.10.4"
  },
  "tagline" : "You Know, for Search"
}

我做错了什么?

2 个答案:

答案 0 :(得分:0)

这是HTTP协议的问题。它还包含主机名,而不仅包含IP地址,如果您在localhost上发出请求,则会将此主机名传递给群集。

基本上有两种解决方案,都非常苛刻:

  1. 将弹性搜索主机名设置为localhost,以便识别您的查询。
  2. 设置/etc/hosts以将<elastic_ip>-east-1.aws.found.io定向到127.0.0.1,使用直接IP连接到ssh,然后curl连接到真实地址。< / LI>

答案 1 :(得分:0)

以下是使用#PSH隧道与#Putty进行此操作的方法。

以下是使用Putty配置SSH隧道时需要采取的步骤:

  • here下载Putty并安装它。
  • 为Elasticsearch 9300和9200端口配置Putty隧道,如下面的屏幕截图所示: enter image description here
  • 配置完成后,您需要打开SSH连接并确保已连接。
  • 您可以查看SSH事件日志以验证隧道。 Here是关于如何操作的链接。

下面是一个用#Java编写的#Elasticsearch代码,它显示了如何使用Putty SSH客户端转发的本地(9090和9093)端口连接到远程Elasticsearch集群。

public class App 
{
    public static void main( String[] args ) throws Exception
    {
        Settings settings = ImmutableSettings.settingsBuilder().
             put("cluster.name", "my-cluster").build();

        TransportClient client = new TransportClient(settings)
                                 .addTransportAddress(
                                  new netSocketTransportAddress(
                                  "localhost", 9093));

        CreateIndexResponse rs = client.admin().indices().create(
                      new CreateIndexRequest("tunnelingindex"))
                     .actionGet();

        System.out.println(rs.isAcknowledged());
        client.close();
    }
}

代码在Elasticsearch上创建一个名为tunnelingindex的索引。

希望它有所帮助。