错误信息显示,Elasticsearch 返回了 401 Unauthorized
状态,提示 "missing authentication credentials"。这表明你的请求没有提供认证信息,而 Elasticsearch 的安全功能(如 X-Pack 或 Elastic Security)已启用,要求进行认证。
问题原因
- 未提供认证信息:在 Elasticsearch 安全模式启用时,需要通过 HTTP 基本认证、Bearer Token 或 API Key 来访问。
- 未设置用户和密码:Elasticsearch 安装后没有正确配置用户和密码。
- 请求工具未正确配置认证头:例如,使用
curl
或客户端工具时,没有附带认证信息。
解决方法
1. 设置 Elasticsearch 用户和密码
如果 Elasticsearch 安装后没有初始化用户密码,需要设置内置用户的密码。
运行以下命令为 elastic
和其他内置用户设置密码:
按照提示输入新密码。完成后,记住设置的密码,尤其是 elastic
用户的密码。
2. 使用 elastic
用户认证
在发起请求时,使用 elastic
用户进行 HTTP 基本认证。
使用 curl
示例:
返回示例:
如果认证成功,Elasticsearch 应返回类似以下内容:
3. 在客户端配置认证
如果你使用的是 Kibana、Logstash 或其他 Elasticsearch 客户端工具,需要在它们的配置文件中添加用户和密码。
Kibana 配置:
在 kibana.yml
文件中,设置 Elasticsearch 的认证信息:
Logstash 配置: 在 Logstash 的管道文件中,设置 Elasticsearch 输出插件的认证信息:
4. 通过 API Key 认证
如果你希望使用 API Key,而不是用户名和密码,可以先创建一个 API Key。
创建 API Key:
使用 elastic
用户执行以下命令:
返回的 JSON 包括 id
和 api_key
:
使用 API Key:
将 id:api_key
转换为 Base64 编码:
使用 curl
请求时在 Header 中添加 Authorization
:
5. 验证 Elasticsearch 配置
确保 Elasticsearch 的安全功能启用了适当的认证机制。查看 elasticsearch.yml
配置文件,确保以下设置已启用:
如果你修改了配置文件,请重启 Elasticsearch:
总结
- 确保 Elasticsearch 安装时已正确初始化用户和密码。
- 使用
elastic
用户认证,或者配置 API Key 以通过认证。 - 确保客户端工具(如 Kibana、Logstash)正确配置认证信息。
- 如果仍然遇到问题,检查 Elasticsearch 日志以获取更多提示信息。
通过以上方法,应该可以解决 401 Unauthorized
的认证问题。