You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无法通过SSH隧道访问AWS私有子网内的ElasticSearch服务器求助

排查AWS私有子网Elasticsearch Kibana通过堡垒机SSH隧道访问问题

我来帮你一步步排查这个问题,之前在AWS环境里我也遇到过类似的SSH隧道访问障碍,咱们从基础配置到命令细节逐一确认:

1. 先确认堡垒机与ES实例的网络连通性

首先得确保堡垒机能正常访问ES实例,这是隧道能通的前提:

  • 登录堡垒机,执行ping <ES私有IP>,看能不能连通;如果ping不通,先检查VPC路由表(私有子网路由表要指向VPC内部,堡垒机所在公有子网要有指向Internet Gateway的路由)。
  • 再在堡垒机上测试Kibana端口:curl http://<ES私有IP>:5601,如果能返回Kibana的HTML内容,说明网络层面是通的;如果不行,重点检查下面的安全组和NACL配置。

2. 核对安全组(Security Group)规则

这是最容易出问题的环节,别漏了:

  • 堡垒机安全组:入站规则必须允许你本地IP的SSH(22端口)访问;出站规则要允许到ES私有子网IP段的5601(Kibana)和9200(ES)端口,或者临时允许所有出站流量来快速测试。
  • ES实例安全组:入站规则必须允许堡垒机所在私有IP的5601和9200端口访问;出站规则允许所有必要的流量(比如到ES集群其他节点,或者临时放开所有)。

3. 检查网络访问控制列表(NACL)

NACL是VPC的第二层防火墙,很多人会忽略它:

  • 公有子网NACL:
    • 入站:允许来自你本地IP的22端口(SSH)
    • 出站:允许到ES私有子网IP段的5601、9200端口
  • 私有子网NACL:
    • 入站:允许来自堡垒机IP的5601、9200端口
    • 出站:允许所有返回流量(比如HTTP响应)

4. 确认SSH隧道命令是否正确

本地建立端口转发的命令要注意参数细节,给你个标准示例:

ssh -i "/path/to/your-bastion-key.pem" -L 5601:<ES私有IP>:5601 ec2-user@<堡垒机公有IP>
  • -L:代表本地端口转发,格式是本地端口:目标IP:目标端口
  • 如果你需要后台运行隧道,可以加-fN参数:ssh -i "key.pem" -fN -L 5601:es-ip:5601 user@bastion-ip
  • 注意:本地的5601端口不能被其他程序占用,可以用lsof -i :5601(Mac/Linux)或者netstat -ano | findstr :5601(Windows)检查端口占用情况。

5. 检查Elasticsearch和Kibana的配置

如果网络都通了但还是访问不了Kibana,要确认服务端的绑定设置:

  • Kibana配置文件(kibana.yml):确保server.host设置为0.0.0.0或者ES实例的私有IP,不能只绑定127.0.0.1(否则只有ES本地能访问);另外elasticsearch.hosts要指向ES的私有IP(比如http://<ES私有IP>:9200)。
  • Elasticsearch配置文件(elasticsearch.yml):network.host设置为私有IP或者0.0.0.0,确保允许堡垒机的IP访问;如果开启了X-Pack安全,要确保你有Kibana的访问权限,并且在本地访问时能正确输入账号密码。

6. 本地测试与排错

隧道建立后,在本地浏览器访问http://localhost:5601,如果还是不行:

  • 在本地执行curl http://localhost:5601,看返回的错误信息(比如连接拒绝、超时),对应排查:
    • 连接拒绝:可能是本地端口没转发成功,或者ES/Kibana没监听对应端口
    • 超时:可能是堡垒机到ES的网络不通,或者安全组/NACL拦截

内容的提问来源于stack exchange,提问作者Nitin Ware

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:34:16