ssh tunneling/port 无法通过 EC2 实例转发到 VPC 中的 Elasticsearch 集群
ssh tunneling/port forwarding not working through EC2 instance to an Elasticsearch cluster in a VPC
我在 VPC 中有我的 Elasticsearch 集群,我想从我的本地 Macbook 访问这个 EC 集群。
我已经设置了一个使用相同 VPC 和相同安全组的堡垒主机,并且我能够从我的 Macbook ssh 进入这个堡垒主机。
但是不知何故,我的代码无法通过这个堡垒主机连接到我的 ES 集群,这是我对 运行 端口转发的命令:
ssh -i ~/Downloads/keypairs/20210402-02.pem ubuntu@ec2-123-456.us-west-2.compute.amazonaws.com -N -L 9200:vpc-es-domain-20210331-abc123def.us-west-2.es.amazonaws.com:443
下面是我访问VPC中的ES集群超时异常:
java.net.ConnectException: Timeout connecting to [vpc-es-domain-20210331-abc123def.us-west-2.es.amazonaws.com/10.0.47.182:443]
at org.elasticsearch.client.RestClient.extractAndWrapCause(RestClient.java:823) ~[elasticsearch-rest-client-7.6.1.jar:7.6.1]
at org.elasticsearch.client.RestClient.performRequest(RestClient.java:248) ~[elasticsearch-rest-client-7.6.1.jar:7.6.1]
at org.elasticsearch.client.RestClient.performRequest(RestClient.java:235) ~[elasticsearch-rest-client-7.6.1.jar:7.6.1]
at org.elasticsearch.client.RestHighLevelClient.internalPerformRequest(RestHighLevelClient.java:1514) ~[elasticsearch-rest-high-level-client-7.6.1.jar:7.6.1]
at org.elasticsearch.client.RestHighLevelClient.performRequest(RestHighLevelClient.java:1484) ~[elasticsearch-rest-high-level-client-7.6.1.jar:7.6.1]
at org.elasticsearch.client.RestHighLevelClient.performRequestAndParseEntity(RestHighLevelClient.java:1454) ~[elasticsearch-rest-high-level-client-7.6.1.jar:7.6.1]
at org.elasticsearch.client.RestHighLevelClient.bulk(RestHighLevelClient.java:497) ~[elasticsearch-rest-high-level-client-7.6.1.jar:7.6.1]
这是我的 SG 规则:
入站:
All TCP TCP 0 - 65535 0.0.0.0/0
All traffic All All sg-abc123 / default
SSH TCP 22 0.0.0.0/0
出境:
All traffic All All 0.0.0.0/0
当我通过 ssh 连接到我的堡垒主机并 运行 curl vpc-es-domain-20210331-abc123def.us-west-2.es.amazonaws.com
时,我收到了这样的回复:
{
"name" : "abc123",
"cluster_name" : "abc123097:es-domain-beta-20210331",
"cluster_uuid" : "abc123def",
"version" : {
"number" : "7.8.0",
"build_flavor" : "oss",
"build_type" : "tar",
"build_hash" : "unknown",
"build_date" : "2021-01-15T06:15:47.944536Z",
"build_snapshot" : false,
"lucene_version" : "8.5.1",
"minimum_wire_compatibility_version" : "6.8.0",
"minimum_index_compatibility_version" : "6.0.0-beta1"
},
"tagline" : "You Know, for Search"
}
我怀疑我执行端口转发的命令不正确?但经过研究,这对我来说看起来是最合法的选择。
任何见解将不胜感激!
您本地计算机上的代码 运行 正在尝试不通过 SSH 隧道直接连接到 Elasticsearch 服务器。 SSH 命令正在打开从本地端口 9200
到远程服务器的隧道。尝试连接到 Elasticsearch 的本地软件应该连接到 localhost:9200
而不是 vpc-es-domain-20210331-abc123def.us-west-2.es.amazonaws.com/10.0.47.182:443
.
端点 vpc-es-domain-20210331-abc123def.us-west-2.es.amazonaws.com/10.0.47.182:443
无论如何看起来都无效。它有一个主机名和一个 IP 地址。
您在评论中提到:
"I actually launched my bastion host using the same SG as my ES"
但是,除非该安全组也有专门允许其中资源之间的流量的规则,否则仅将两个资源放在同一个安全组中是无效的。默认情况下,安全组没有此规则,但在您首次创建 AWS 账户时自动创建的默认 VPC 中的默认安全组除外。
所以请确保安全组有一个规则,允许堡垒主机通过端口 443
连接到 Elasticsearch 服务器。
我在 VPC 中有我的 Elasticsearch 集群,我想从我的本地 Macbook 访问这个 EC 集群。 我已经设置了一个使用相同 VPC 和相同安全组的堡垒主机,并且我能够从我的 Macbook ssh 进入这个堡垒主机。
但是不知何故,我的代码无法通过这个堡垒主机连接到我的 ES 集群,这是我对 运行 端口转发的命令:
ssh -i ~/Downloads/keypairs/20210402-02.pem ubuntu@ec2-123-456.us-west-2.compute.amazonaws.com -N -L 9200:vpc-es-domain-20210331-abc123def.us-west-2.es.amazonaws.com:443
下面是我访问VPC中的ES集群超时异常:
java.net.ConnectException: Timeout connecting to [vpc-es-domain-20210331-abc123def.us-west-2.es.amazonaws.com/10.0.47.182:443]
at org.elasticsearch.client.RestClient.extractAndWrapCause(RestClient.java:823) ~[elasticsearch-rest-client-7.6.1.jar:7.6.1]
at org.elasticsearch.client.RestClient.performRequest(RestClient.java:248) ~[elasticsearch-rest-client-7.6.1.jar:7.6.1]
at org.elasticsearch.client.RestClient.performRequest(RestClient.java:235) ~[elasticsearch-rest-client-7.6.1.jar:7.6.1]
at org.elasticsearch.client.RestHighLevelClient.internalPerformRequest(RestHighLevelClient.java:1514) ~[elasticsearch-rest-high-level-client-7.6.1.jar:7.6.1]
at org.elasticsearch.client.RestHighLevelClient.performRequest(RestHighLevelClient.java:1484) ~[elasticsearch-rest-high-level-client-7.6.1.jar:7.6.1]
at org.elasticsearch.client.RestHighLevelClient.performRequestAndParseEntity(RestHighLevelClient.java:1454) ~[elasticsearch-rest-high-level-client-7.6.1.jar:7.6.1]
at org.elasticsearch.client.RestHighLevelClient.bulk(RestHighLevelClient.java:497) ~[elasticsearch-rest-high-level-client-7.6.1.jar:7.6.1]
这是我的 SG 规则:
入站:
All TCP TCP 0 - 65535 0.0.0.0/0
All traffic All All sg-abc123 / default
SSH TCP 22 0.0.0.0/0
出境:
All traffic All All 0.0.0.0/0
当我通过 ssh 连接到我的堡垒主机并 运行 curl vpc-es-domain-20210331-abc123def.us-west-2.es.amazonaws.com
时,我收到了这样的回复:
{
"name" : "abc123",
"cluster_name" : "abc123097:es-domain-beta-20210331",
"cluster_uuid" : "abc123def",
"version" : {
"number" : "7.8.0",
"build_flavor" : "oss",
"build_type" : "tar",
"build_hash" : "unknown",
"build_date" : "2021-01-15T06:15:47.944536Z",
"build_snapshot" : false,
"lucene_version" : "8.5.1",
"minimum_wire_compatibility_version" : "6.8.0",
"minimum_index_compatibility_version" : "6.0.0-beta1"
},
"tagline" : "You Know, for Search"
}
我怀疑我执行端口转发的命令不正确?但经过研究,这对我来说看起来是最合法的选择。 任何见解将不胜感激!
您本地计算机上的代码 运行 正在尝试不通过 SSH 隧道直接连接到 Elasticsearch 服务器。 SSH 命令正在打开从本地端口 9200
到远程服务器的隧道。尝试连接到 Elasticsearch 的本地软件应该连接到 localhost:9200
而不是 vpc-es-domain-20210331-abc123def.us-west-2.es.amazonaws.com/10.0.47.182:443
.
端点 vpc-es-domain-20210331-abc123def.us-west-2.es.amazonaws.com/10.0.47.182:443
无论如何看起来都无效。它有一个主机名和一个 IP 地址。
您在评论中提到:
"I actually launched my bastion host using the same SG as my ES"
但是,除非该安全组也有专门允许其中资源之间的流量的规则,否则仅将两个资源放在同一个安全组中是无效的。默认情况下,安全组没有此规则,但在您首次创建 AWS 账户时自动创建的默认 VPC 中的默认安全组除外。
所以请确保安全组有一个规则,允许堡垒主机通过端口 443
连接到 Elasticsearch 服务器。