我在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"
}
我做错了什么?
答案 0 :(得分:0)
这是HTTP协议的问题。它还包含主机名,而不仅包含IP地址,如果您在localhost
上发出请求,则会将此主机名传递给群集。
基本上有两种解决方案,都非常苛刻:
localhost
,以便识别您的查询。/etc/hosts
以将<elastic_ip>-east-1.aws.found.io
定向到127.0.0.1
,使用直接IP连接到ssh
,然后curl
连接到真实地址。< / LI>
醇>
答案 1 :(得分:0)
以下是使用#PSH隧道与#Putty进行此操作的方法。
以下是使用Putty配置SSH隧道时需要采取的步骤:
下面是一个用#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的索引。
希望它有所帮助。