在使用 Kibana 连接 Elasticsearch 时,很多人会遇到下面这类报错:
[ERROR][elasticsearch-service] Unable to retrieve version information from Elasticsearch nodes. security_exception
Root causes:
security_exception: missing authentication credentials for REST request [/_nodes?filter_path=nodes.*.version%2Cnodes.*.http.publish_address%2Cnodes.*.ip]
同时日志里还可能看到一条类似信息:
[INFO ][plugins.screenshotting.chromium] Browser executable: /usr/share/kibana/node_modules/@kbn/screenshotting-plugin/chromium/headless_shell-linux_x64/headless_shell
很多人第一眼会以为是 Kibana 本身坏了,或者是浏览器组件有问题。其实都不是。
真正的问题只有一个:Kibana 访问 Elasticsearch 时,没有带认证信息。
一、这个报错到底是什么意思?
这条错误的核心是:
missing authentication credentials
它的意思不是“密码错了”,而是:
- Kibana 能访问到 Elasticsearch
- 但 Elasticsearch 开启了安全认证
- Kibana 发请求时没有附带用户名和密码,或者认证配置根本没生效
也就是说,这通常不是网络不通,而是认证配置缺失。
另外,chromium 那条日志只是普通信息,和这次故障无关,可以忽略。
二、最容易误解的一点:kibana_system 没有默认密码
很多人排查到这里,会继续追问一句:
kibana_system的密码到底是什么?
答案是:没有通用默认密码。
kibana_system 是 Elasticsearch 内置用户之一,但它的密码不是一个固定值,不是“默认就知道”的那种账号。
需要注意这几点:
elastic用户在首次初始化时,可能会设置或生成密码- 但
kibana_system的密码通常需要你自己设置,或者后续手动重置 - 所以不能直接假设它有个统一默认值
这也是很多人配置了 ELASTICSEARCH_USERNAME=kibana_system 之后,仍然无法正常启动 Kibana 的原因。
三、先判断:是“没带认证”还是“密码错误”?
这两种情况日志表现不一样。
1)没带认证信息
如果报错是:
missing authentication credentials
说明请求里压根没有认证信息,通常是:
- 没配置用户名密码
- 环境变量没生效
- 配置写了,但容器没重建
.env变量为空
2)密码错误
如果是密码错了,常见报错更像:
unable to authenticate user [kibana_system]
这说明 Kibana 已经带上了用户名密码,但认证失败了。
所以,看到 missing authentication credentials 时,优先检查的是:Kibana 是否真的把认证配置传进去了,而不是先纠结密码对不对。
四、Kibana 应该怎么配置?
如果你使用的是 kibana.yml,配置通常类似这样:
elasticsearch.hosts: ["http://<es-host>:9200"]
elasticsearch.username: "kibana_system"
elasticsearch.password: "<你的密码>"
如果你使用 Docker / Docker Compose,则对应的环境变量是:
ELASTICSEARCH_HOSTS=http://<es-host>:9200
ELASTICSEARCH_USERNAME=kibana_system
ELASTICSEARCH_PASSWORD=<你的密码>
五、Docker Compose 场景下的正确处理方式
这是最常见的部署方式,也是最容易踩坑的地方。
1)一个最小可用的 docker-compose.yml
version: "3.8"
services:
es01:
image: docker.elastic.co/elasticsearch/elasticsearch:8.13.4
container_name: es01
environment:
discovery.type: single-node
xpack.security.enabled: "true"
xpack.security.http.ssl.enabled: "false"
ELASTIC_PASSWORD: "Elastic123!"
ports:
- "9200:9200"
volumes:
- esdata:/usr/share/elasticsearch/data
kibana:
image: docker.elastic.co/kibana/kibana:8.13.4
container_name: kibana
depends_on:
- es01
environment:
ELASTICSEARCH_HOSTS: "http://es01:9200"
ELASTICSEARCH_USERNAME: "kibana_system"
ELASTICSEARCH_PASSWORD: "Kibana123!"
ports:
- "5601:5601"
volumes:
esdata:
2)为什么这样写了还可能报错?
因为这里有一个关键细节:
ELASTIC_PASSWORD可以在 Elasticsearch 启动时直接设置elastic用户密码- 但是
kibana_system的密码不会自动等于Kibana123! - 你必须在 Elasticsearch 启动后,手动把
kibana_system的密码设置成这个值
也就是说,下面这段配置:
ELASTICSEARCH_USERNAME: "kibana_system"
ELASTICSEARCH_PASSWORD: "Kibana123!"
只有在你真的把 kibana_system 密码设置成 Kibana123! 之后才有效。
六、正确启动步骤
第一步:先启动 Elasticsearch
docker compose up -d es01
第二步:给 kibana_system 设置密码
手动输入密码:
docker compose exec es01 /usr/share/elasticsearch/bin/elasticsearch-reset-password -u kibana_system -i
然后把密码设置成你在 docker-compose.yml 里写的那个,比如:
Kibana123!
如果你想让系统自动生成密码,也可以这样:
docker compose exec es01 /usr/share/elasticsearch/bin/elasticsearch-reset-password -u kibana_system -b
它会输出一个随机密码,你再把这个密码填回 ELASTICSEARCH_PASSWORD。
第三步:启动 Kibana
docker compose up -d kibana
第四步:如果之前容器已经启动过,强制重建
这是很多人遗漏的一步。
docker compose up -d --force-recreate kibana
因为有时候你虽然改了 Compose 配置,但旧容器仍然在用旧环境变量。
七、怎么验证问题是不是解决了?
你可以先用 curl 检查 Elasticsearch 是否能正常认证。
例如:
curl -u kibana_system:Kibana123! http://localhost:9200
如果返回了 Elasticsearch 的信息,说明这个账号密码是可用的。
如果认证失败,就说明:
- 密码不对
kibana_system还没设置成功- 或者 ES 地址写错了
八、常见踩坑总结
排查这类问题时,最常见的坑有这几个:
1)误以为 kibana_system 有默认密码
没有。必须自己设置或重置。
2)把 elastic 的密码当成 kibana_system 的密码
这两个不是同一个用户,密码也不是自动相同的。
3)配置写了,但没生效
常见原因:
.env里变量为空- Compose 配置改了,但容器没重建
- 写错环境变量名
kibana.yml和环境变量互相覆盖
4)看到 chromium 日志就怀疑截图插件
这条日志和 Elasticsearch 认证失败没有关系。
5)把“没带认证”误判成“密码错误”
missing authentication credentials 和 unable to authenticate user 不是一回事。
九、更推荐的方式:使用 Token
在 Elastic 8.x 里,官方也更推荐使用 enrollment token 或 service account token,而不是手动长期维护 kibana_system 密码。
不过如果你当前只是想快速解决问题,那么最直接的方法仍然是:
- 启动 ES
- 重置
kibana_system密码 - 把该密码配置给 Kibana
- 重建并重启 Kibana
十、结论
当 Kibana 出现下面这个错误时:
security_exception: missing authentication credentials
基本可以按这个思路排查:
- 先确认 Elasticsearch 开启了安全认证
- 再确认 Kibana 是否真的配置了认证信息
- 明确
kibana_system没有默认密码 - 在 Elasticsearch 容器里手动重置
kibana_system密码 - 把新密码配置到 Kibana
- 强制重建并重启 Kibana 容器
一句话总结就是:
这类报错通常不是 Kibana 连不上 Elasticsearch,而是 Kibana 连上了,但没正确带上认证信息。
Q.E.D.


