通过docker启动ElasticSearch后为ElasticSearch设置用户和密码

news2024/9/23 8:58:12

文章目录

  • 0. 前言
  • 1. 没有设置用户名和密码的情况
  • 2. 为ElasticSearch设置用户名和密码
    • 2.1 进入 ElasticSearch 容器内部
    • 2.2 修改 ElasticSearch 的配置文件
    • 2.3 设置用户名和密码
  • 3. 在 kibana 容器中指定访问 ElasticSearch 的用户名和密码
  • 4. 设置用户名和密码后的情况
    • 4.1 访问 ElasticSearch
    • 4.2 访问 kibana
  • 5. 通过 Java 代码操作 ElasticSearch 的变化
  • 6. 可能遇到的问题

0. 前言

之所以要为 ElasticSearch 设置用户名和访问密码,是为了提高服务器的安全性,如果你是使用 VMware 模拟出来的 Linux 系统,可能还没有什么关系,但如果你使用的是云服务器,开放了 9200 端口,又没有设置密码,就相当于在互联网上裸奔,最终的结果就是你的云服务器成了矿机


如何通过 docker 安装 ElasticSearch,可以查看我的另一篇博文:ElasticSearch快速入门(安装ElasticSearch、IK分词器、索引库操作、文档操作、在Java代码中操作ElasticSearch、数据聚合)_安装部署elasticsearch-CSDN博客

1. 没有设置用户名和密码的情况

访问 kibana 的 Dev Tools 控制台时会出现以下警告

在这里插入图片描述

Your data is not secure

Don’t lose one bit. Enable our free security features.

Don’t show again


在 kibana 的 Dev Tools 控制台向 ElasticSearch 发送 HTTP 请求时会出现以下警告

#! Elasticsearch built-in security features are not enabled. Without authentication, your cluster could be accessible to anyone. See https://www.elastic.co/guide/en/elasticsearch/reference/7.17/security-minimal-setup.html to enable security.

2. 为ElasticSearch设置用户名和密码

2.1 进入 ElasticSearch 容器内部

先查看当前有哪些容器正在运行,找到 ElasticSearch 容器

sudo docker ps --format '{{.Names}}'

在这里插入图片描述

接着运行以下指令进入 ElasticSearch 容器内部

sudo docker exec -it elasticsearch bash

2.2 修改 ElasticSearch 的配置文件

先进入配置文件所在的目录

cd /usr/share/elasticsearch/config

接着向 ElasticSearch 的配置文件(elasticsearch.yml)中追加以下内容(注意:不要使用 vi 或 vim 编辑器,因为构建容器的镜像都是阉割版的 Linux 系统,一般不会有 vi 或 vim 编辑器)

echo "xpack.security.enabled: true
xpack.license.self_generated.type: basic
xpack.security.transport.ssl.enabled: true" >> elasticsearch.yml

退出容器后重启容器

exit
sudo docker restart elasticsearch

2.3 设置用户名和密码

再次进入 ElasticSearch 容器内部

sudo docker exec -it elasticsearch bash

执行以下命令(elasticsearch-setup-passwords 文件是一个脚本)

./bin/elasticsearch-setup-passwords interactive

在这里插入图片描述

root@f6b93f64adc4:/usr/share/elasticsearch# ./bin/elasticsearch-setup-passwords interactive
Initiating the setup of passwords for reserved users elastic,apm_system,kibana,kibana_system,logstash_system,beats_system,remote_monitoring_user.
You will be prompted to enter passwords as the process progresses.
Please confirm that you would like to continue [y/N]


上述英文的大概意思就是

如果确定开启密码的话,需要设置以下六个账户的密码(建议设置成一样的)

我们输入 y,接着分别为六个用户设置密码

在这里插入图片描述

完成以上的设置后,退出容器,再次重启 ElasticSearch 容器

exit
sudo docker restart elasticsearch

3. 在 kibana 容器中指定访问 ElasticSearch 的用户名和密码

先进入 kibana 容器内部

sudo docker exec -it kibana bash

接着向 kibana 的配置文件(kibana.yml)中追加以下内容(注意:不要使用 vi 或 vim 编辑器,因为构建容器的镜像都是阉割版的 Linux 系统,一般不会有 vi 或 vim 编辑器)

记得将 elasticsearch 的密码改为你的密码(\n 表示换行)

echo -e '\nelasticsearch.username: "elastic"' >> /usr/share/kibana/config/kibana.yml
echo -e 'elasticsearch.password: "tF8RGg2vd0FAzgkK"\n' >> /usr/share/kibana/config/kibana.yml

退出容器,再次重启 kibana 容器

exit
sudo docker restart kibana 

4. 设置用户名和密码后的情况

4.1 访问 ElasticSearch

我们再次访问 ElasticSearch,发现需要输入用户名和密码了

在这里插入图片描述

输入用户名和密码后的页面

在这里插入图片描述

4.2 访问 kibana

我们再次访问 kibana 的 Dev Tools 控制台,发现也需要填写用户名和密码了

在这里插入图片描述

其它的操作基本不变

5. 通过 Java 代码操作 ElasticSearch 的变化

在这里插入图片描述

import org.apache.http.HttpHost;
import org.apache.http.auth.AuthScope;
import org.apache.http.auth.UsernamePasswordCredentials;
import org.apache.http.impl.client.BasicCredentialsProvider;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestClientBuilder;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.client.indices.GetIndexRequest;
import org.elasticsearch.client.indices.GetIndexResponse;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;

import java.io.IOException;
import java.util.Arrays;

public class ElasticSearchTests {

    private RestHighLevelClient restHighLevelClient;

    @Test
    public void testGetAllIndex() throws IOException {
        // 获取所有索引
        GetIndexRequest request = new GetIndexRequest("*");
        GetIndexResponse response = restHighLevelClient.indices().get(request, RequestOptions.DEFAULT);

        // 输出索引名称
        String[] indices = response.getIndices();
        System.out.println("Current indices:");
        Arrays.stream(indices).forEach(System.err::println);
    }


    @BeforeEach
    public void setUp() {
        // 用户名和密码
        String username = "elastic";
        String password = "tF8RGg2vd0FAzgkK";

        final BasicCredentialsProvider credentialsProvider = new BasicCredentialsProvider();
        credentialsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials(username, password));

        RestClientBuilder restClientBuilder = RestClient
                .builder(new HttpHost("127.0.0.1", 9200, "http"))
                .setHttpClientConfigCallback(httpClientBuilder -> httpClientBuilder.setDefaultCredentialsProvider(credentialsProvider));
        restHighLevelClient = new RestHighLevelClient(restClientBuilder);
    }

    @AfterEach
    public void tearDown() throws Exception {
        restHighLevelClient.close();
    }

}

6. 可能遇到的问题

如果为 ElasticSearch 设置用户和密码之后访问 kibana 的 Dev Tools 控制台出现以下错误

在这里插入图片描述

Kibana server is not ready yet

是因为没有在 kibana 容器中指定访问 ElasticSearch 的用户名和密码,解决方法可参考本文的 3. 在 kibana 容器中指定访问 ElasticSearch 的用户名和密码 部分

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2157122.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

QT For Android开发-打开PPT文件

一、前言 需求: Qt开发Android程序过程中,点击按钮就打开一个PPT文件。 Qt在Windows上要打开PPT文件或者其他文件很容易。可以使用QDesktopServices打开文件,非常方便。QDesktopServices提供了静态接口调用系统级别的功能。 这里用的QDesk…

C语言理解 —— printf 格式化输出

目 录 printf 函数一、短整型输出二、长整型输出三、浮点型输出四、字符型输出五、字符串输出六、注意问题 printf 函数 在软件开发过程中,通常需要打印一些字符串信息,或把一些变量值输出到上位机显示。打印函数printf是最常用的。 一般格式&#xff…

架构设计笔记-5-软件工程基础知识

知识要点 按软件过程活动,将软件工具分为软件开发工具、软件维护工具、软件管理和软件支持工具。 软件开发工具:需求分析工具、设计工具、编码与排错工具。 软件维护工具:版本控制工具、文档分析工具、开发信息库工具、逆向工程工具、再工…

计算机毕业设计 基于Python的荣誉证书管理系统 Django+Vue 前后端分离 附源码 讲解 文档

🍊作者:计算机编程-吉哥 🍊简介:专业从事JavaWeb程序开发,微信小程序开发,定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事,生活就是快乐的。 🍊心愿:点…

【永磁同步电机(PMSM)】 6. 矢量空间算法(SVPWM)

【永磁同步电机(PMSM)】 6. 矢量空间算法(SVPWM) 1. SVPWM 的基本原理1.1 SVPWM 的优点1.2 SVPWM 的电路拓扑1.3 连续旋转的空间矢量 2. SVPWM 的算法实现2.1 电压矢量组合方案2.2 SVPWM 的实现步骤 3. 基于 Simulink 的 SVPWM 仿…

软考高级:系统安全 -区块链特点:去中心化、开放性、自治性、安全性、匿名性

讲解 生活化例子 想象一下,你和朋友们玩一个共享账本的游戏。每个人都可以在账本上记账,没人可以单独改动账本,大家都可以随时查看账本内容,也不用再信任某个单独的人来管理账本。这就类似于区块链的工作原理。 概念讲解 去中…

软考高级:敏捷开发 SCRUM

生活化例子 想象你和朋友们要组织一场周末聚会。你们首先会决定聚会的主题、场地、时间等大方向,然后每个人分配不同的任务,比如有人负责买零食,有人负责准备音乐,有人负责布置场地。你们每天都简单沟通下进展,看看大…

【C++笔试强训】如何成为算法糕手Day1

学习编程就得循环渐进,扎实基础,勿在浮沙筑高台 循环渐进Forward-CSDN博客 笔试强训第一天 目录 循环渐进Forward-CSDN博客 第一题:两个数组的交集 暴力循环法: 哈希法 : 数组下标法: 第二题&#x…

“滑动窗口”思想在算法里面的应用

目录 一 无重复字符串的最长子串 链接:无重复字符的最长子串 1. 题目分析 解法一:暴力求解 借助2个“指针”:left , right 指针,依次固定left 指针,让right指针进行遍历,每遇到一个最大的 …

24/9/19 算法笔记 kaggle BankChurn数据分类

题目是要预测银行里什么样的客户会流失,流失的概率是多少 我这边先展示一下我写的二分类的算法 import numpy as np import pandas as pd import matplotlib.pyplot as plt from sklearn.model_selection import train_test_split from sklearn.linear_model impo…

亚马逊IP关联揭秘:发生ip关联如何处理

在亚马逊这一全球领先的电商平台上,IP关联是一个不可忽视的问题,尤其是对于多账号运营的卖家而言。本文将深入解析亚马逊IP关联的含义、影响以及应对策略,帮助卖家更好地理解和应对这一问题。 什么是亚马逊IP关联? 亚马逊IP关联…

awk从0学习

1. 入门 1.1 什么是 awk? ①Awk是一种文本处理工具,适用于处理结构化数据,例如表格数据。 ②它可以读取一个或多个文本文件,并执行模式扫描和处理等指定的操作。 ③基本逻辑涉及数据的提取,排序和计算。 ④支持复…

Leetcode 2464. 有效分割中的最少子数组数目

1.题目基本信息 1.1.题目描述 给定一个整数数组 nums。 如果要将整数数组 nums 拆分为 子数组 后是 有效的,则必须满足: 每个子数组的第一个和最后一个元素的最大公约数 大于 1,且 nums 的每个元素只属于一个子数组。 返回 nums 的 有效 子数组拆分中…

Lumos学习王佩丰Excel第十五讲:条件格式与公式

一、使用简单的条件格式 1、为特定范围的数值标记特殊颜色 条件格式-需选择设定范围(大于/小于/介于/......): 数值会动态根据条件判断更新颜色: 模糊匹配+条件格式:选择包含部分文本的特殊值 2、查找重复…

linux-----进程控制

提示:以下是本篇文章正文内容,下面案例可供参考 一、fork()函数 返回值:子进程返回0,父进程返回子进程的id,出错就返回-1. fork创建子进程,如果父子一方发生写入时,就会发生写实拷贝,操作系统就…

专业学习|动态规划(概念、模型特征、解题步骤及例题)

一、引言 (一)从斐波那契数列引入自底向上算法 (1)知识讲解 (2)matlap实现递归 (3)带有备忘录的遗传算法 (4)matlap实现带有备忘录的递归算法 “&#xff1…

0基础跟德姆(dom)一起学AI 数据处理和统计分析06-数据组合和缺失值处理

* 数据组合 * concat * merge * join(了解) * 缺失值处理 * apply方法详解 --- 1.DataFrame数据组合-concat连接 * 概述 * 连接是指把某行或某列追加到数据中, 数据被分成了多份可以使用连接把数据拼接起来 * 把计算的结果追加到现有数据集,也可以使用连…

Redis:常用命令总结

目录 1 . 前置内容 1.1 基本全局命令 KEYS EXISTS DEL EXPIRE TTL TYPE 1.2 数据结构和内部编码 2. String类型 SET GET MGET MSET INCR INCRBY DECR DECRBY INCRBYFLOAT 命令小结​编辑 内部编码 3 . Hash 哈希类型 HSET HGET HEXISTS HDEL HKEYS …

Qemu开发ARM篇-5、buildroot制作根文件系统并在qemu中进行挂载启动

文章目录 1、 buildroot源码获取2、buildroot配置3、buildroot编译4、挂载根文件系统 在上一篇 Qemu开发ARM篇-4、kernel交叉编译运行演示中,我们编译了kernel,并在qemu上进行了运行,但到最后,在挂载根文件系统时候,挂…

嵌入式单片机STM32开发板详细制作过程--01

大家好,今天主要给大家分享一下,单片机开发板的制作过程,原理图的制作与PCB设计,以及电子元器件采购与焊接。 第一:单片机开发板成品展示 板子正面都有各个芯片的丝印与标号,方便焊接元器件的时候,可以参考。(焊接完成之后,成品图如下) 第二:开发板原理图制作 在制…