【30天精通Prometheus:一站式监控实战指南】第5天:kafka_exporter从入门到实战:安装、配置详解与生产环境搭建指南,超详细

亲爱的读者们👋

  欢迎加入【30天精通Prometheus】专栏!📚 在这里,我们将探索Prometheus的强大功能,并将其应用于实际监控中。这个专栏都将为你提供宝贵的实战经验。🚀

  Prometheus是云原生和DevOps的核心监控工具,我们将从基础概念开始,逐步涵盖配置、查询、告警和可视化。💪

  在接下来的30天里,我们将解锁Prometheus的实战技巧,通过案例和分享,助你深入理解其工作原理。📆

  目标:30天后,你将熟练掌握Prometheus,为未来的项目挑战做好准备!💯

  这是一段精彩旅程,期待你的加入!🎉


一、kafka_exporter概述📘

定义
  kafka_exporter是一个开源工具,用于将Apache Kafka集群的监控指标暴露给Prometheus监控系统。它由Prometheus社区维护,可以帮助用户实时监控和诊断Kafka集群的性能和健康状态。

功能

  • 指标收集:通过执行JMX查询等方式,收集关于Kafka集群的各种指标,如生产者和消费者的吞吐量、分区和副本的状态等。
  • Prometheus兼容:输出的指标符合Prometheus的格式,可直接由Prometheus收集和存储。
  • 灵活配置:用户可通过配置文件或命令行参数配置kafka_exporter,如指定监控的Kafka集群地址、JMX连接参数等。
  • 多版本支持:可与多个版本的Apache Kafka兼容,并可选择性启用或禁用特定版本的指标收集。
  • 安全性:支持通过SSL/TLS进行安全连接,确保监控数据的机密性和完整性。

应用场景

  • 实时监控:适用于需要实时监控Kafka集群性能、健康状态和资源使用情况的场景。
  • 故障排查:当Kafka集群出现问题时,可利用kafka_exporter提供的详细指标进行故障排查和定位。
  • 容量规划:通过监控数据,可以帮助进行Kafka集群的容量规划和优化。

优势

  • 易于部署:可作为一个独立的二进制文件部署,支持Docker容器等多种部署方式。
  • 高效性:相比于通过Kafka内置脚本收集指标,kafka_exporter无需每次启动JVM,从而降低了指标收集的时间成本。
  • 生态丰富:与Prometheus和Grafana无缝对接,提供了丰富的可视化和告警功能。

局限性

  • 依赖Prometheus:需要配合Prometheus使用,如果未部署Prometheus,则需要额外搭建。
  • 虽然配置灵活,但对于初学者来说可能存在一定的配置难度。

二、安装kafka_exporter💾

注意事项和常见问题
  1.权限问题:在安装kafka_exporter之前,应确保当前用户具有足够的权限来执行相关的安装命令。在Linux或UNIX系统中,可能需要使用sudo命令来以管理员权限运行安装脚本,否则可能会遇到权限拒绝的错误。
  2.防火墙和安全组设置:kafka_exporter默认会监听某个端口(如9308)以供Prometheus抓取metrics。请确保服务器的防火墙或安全组策略允许该端口的流量。如果你的Kafka集群和kafka_exporter部署在不同的网络环境中,请确保网络之间的通信是畅通的。
  如果是在云服务提供商处托管的服务器,还需要在云平台的安全组或网络ACL中配置相应的入站规则。
  3.配置文件和服务管理:如果使用systemd等服务管理器来管理kafka_exporter,需确保服务配置文件(例如/etc/systemd/system/kafka_exporter.service)设置正确,并且服务能够正常启动、停止和重启。
  4.日志和错误排查:定期查看kafka_exporter的日志,以便及时发现并解决问题。可以使用如journalctl -u kafka_exporter的命令来查看日志(如果使用systemd管理)。
  5.版本兼容性:在安装前,请检查kafka_exporter的版本是否与你的Kafka集群和Prometheus版本兼容。
  6.安装路径和权限:虽然kafka_exporter可能不需要复杂的配置文件,但如果有配置文件,请确保配置正确无误,特别是Kafka集群的连接信息。
  7.启动参数:熟悉并正确设置kafka_exporter的启动参数,如Kafka集群的地址、端口以及需要监控的Kafka指标等。

2.1 访问kafka_exporter官方网站 🌐

2.2 选择适合的版本🔍

  • 在下载页面,你将看到不同操作系统的kafka_exporter二进制包。根据你的操作系统选择适合的版本。例如,如果你使用的是Linux 64位系统,就选择kafka_exporter-x.x.x.linux-amd64.tar.gz(其中x.x.x是版本号)。

2.3 下载kafka_exporter⬇️

  • 点击所选版本的下载链接,将kafka_exporter的二进制包下载到你的本地计算机。

2.4 解压安装包📂

  • 将下载的kafka_exporter压缩包解压到你想要安装的目录。你可以使用命令行工具(如tar)来完成这个步骤。解压后,你将看到一个名为kafka_exporter-x.x.x.linux-amd64的目录,其中包含kafka_exporter的二进制文件和其他相关文件。
tar -xzf kafka_exporter-x.x.x.linux-amd64.tar.gz

2.5 运行kafka_exporter🚀

  • 进入解压后的目录,并运行kafka_exporter服务器。在Linux下,你可以使用如下命令。这样就使用默认的配置启动kafka_exporter服务器。如果一切正常,你应该能在终端看到kafka_exporter的启动日志。
cd kafka_exporter-x.x.x.linux-amd64

./kafka_exporter --kafka.server=127.0.0.1:9092 --web.listen-address=:9308

三、kafka_exporter指标和配置详解📖

  • 黑色:作为默认文本颜色。
  • 绿色:表示常规配置项
  • 橙色:表示具有互斥参数的配置项 / 建议开启(根据自己的场景确定需求)
  • 蓝色:不重要的配置项 / 建议不开启
  • 红色:表示关键信息和警告 / 最好开启

注意:

  • 1.相关参数配置建议仅供参考,具体要以自己生产的实际需要自行配置。
  • 2.以下配置参数介绍是基于kafka_exporter 1.6.0版本说明的,其它版本会有不同。

3.1 kafka_exporter.service

Kafka 连接与配置类

  • - -kafka.server=kafka:9092
      用于设置 Kafka 服务器的地址和端口。kafka 是服务器的主机名,9092 是 Kafka 服务的默认端口。如果有多个 Kafka 服务器,您可以多次使用这个参数来指定它们,例如 --kafka.server=kafka1:9092 --kafka.server=kafka2:9092
  • - -use.consumelag.zookeeper
      当这个标志被设置时,kafka_exporter会使用ZooKeeper来获取consumer lag(消费者延迟)的信息,而不是直接从Kafka获取。这可能在某些老版本的Kafka集群中是有用的,但在新版本中,直接从Kafka获取这些信息可能更为准确和高效。
  • - -zookeeper.server=localhost:2181
      指定ZooKeeper服务器的地址和端口。在这个例子中,连接到运行在本地机器上的ZooKeeper实例,端口是2181。ZooKeeper通常用于Kafka集群的元数据存储和协调。
  • - -kafka.labels=“”
      允许你为导出的指标添加额外的标签。这些标签可以作为Prometheus查询的过滤条件。在这个例子中,该参数是空的,意味着没有添加额外的标签。
  • - -refresh.metadata=“30s”
      设置kafka_exporter刷新Kafka元数据的时间间隔。在这个例子中,设置为30秒,意味着每30秒,kafka_exporter会重新获取一次Kafka的元数据。
  • - -kafka.allow-auto-topic-creation
      允许kafka_exporter在需要时自动创建监控的topic。这通常不是推荐的做法,因为可能导致创建不必要的topic。
  • - -offset.show-all
      启用 --offset.show-all 参数时,kafka_exporter 会导出所有 Kafka 分区的 offset 信息,而不仅仅是那些有消费者组活跃的分区。这意味着,即使某些分区当前没有消费者组在消费,它们的 offset 信息也会被导出。

SSL/TLS 安全连接类

  • - -tls.enabled
      是否使用TLS连接到Kafka。如果设置为true,kafka_exporter将使用TLS来加密与Kafka的通信。
  • - -tls.server-name=“”
      用于验证返回的证书上的主机名。指定在TLS握手期间用于验证返回的证书上的主机名。
  • - -tls.ca-file=“”
      Kafka TLS客户端认证的证书颁发机构文件。指定证书颁发机构(CA)的证书文件路径。这个文件用于验证Kafka服务器提供的TLS证书的有效性。
  • - -tls.cert-file=“”
      Kafka客户端认证的证书文件。指定Kafka客户端(即kafka_exporter)用于TLS认证的证书文件路径。如果Kafka集群配置了双向TLS认证,必须配置这个参数。
  • - -tls.key-file=“”
      Kafka客户端认证的密钥文件。指定与–tls.cert-file中指定的证书相匹配的私钥文件路径。在双向TLS认证场景下必须配置这个参数。
  • - -tls.insecure-skip-tls-verify
      是否跳过TLS验证。用于指示kafka_exporter是否应该跳过TLS证书的验证。如果设置为true,则不会验证Kafka服务器提供的TLS证书的有效性。

SASL 认证类

  • - -sasl.enabled
      是否使用SASL/PLAIN连接。指定是否启用SASL认证来连接到Kafka集群。如果设置为true,kafka_exporter将使用SASL来与Kafka进行身份验证。
  • - -sasl.handshake
      是否进行SASL握手。确定是否在连接建立后进行SASL握手。通常与SASL/SSL组合使用,以确保在加密连接建立后再进行身份验证。
  • - -sasl.username=“”
      SASL用户名。指定用于SASL认证的用户名。
  • - -sasl.password=“”
      SASL用户密码。指定与SASL用户名对应的密码。
  • - -sasl.mechanism=“”
      SASL的SCRAM SHA算法。定义要使用的SASL机制。常见的值包括PLAIN、SCRAM-SHA-256、SCRAM-SHA-512等。这个值取决于Kafka服务器支持的SASL机制。
  • - -sasl.service-name=“”
      使用Kerberos认证时的服务名称。使用Kerberos认证时,此参数指定服务的名称,通常是kafka。
  • - -sasl.kerberos-config-path=“”
      指定Kerberos配置文件(通常是krb5.conf)的路径。这个文件包含了Kerberos realm和KDC(密钥分发中心)的信息。
  • - -sasl.realm=“”
      Kerberos领域的名称,用于标识Kerberos认证服务的特定管理域。
  • - -sasl.kerberos-auth-type=“”
      指定Kerberos的认证类型,例如USER_PASS(用户名和密码)或KEYTAB(使用keytab文件)。
  • - -sasl.keytab-path=“”
      使用keytab文件进行Kerberos认证时,此参数指定keytab文件的路径。Keytab文件包含服务或用户的加密密钥。
  • - -sasl.disable-PA-FX-FAST
      指示Kerberos客户端是否应禁用PA-FX-FAST优化。在某些环境中,禁用此优化可以解决与Kerberos认证相关的问题。

Web 服务器与监控指标暴露类

  • - -web.telemetry-path=“/metrics”
      设置指标暴露路径的参数。Prometheus 或其他监控工具将从这个路径拉取 Kafka 相关指标。默认值通常是 /metrics,但可以根据需要进行更改。
  • - -server.tls.enabled
      指定是否为kafka_exporter的Web服务器启用TLS加密。如果设置为true,则Web服务器将只接受通过TLS加密的连接。这有助于保护指标数据在传输过程中的安全性。
  • - -server.tls.mutual-auth-enabled
      确定是否为Web服务器启用TLS客户端相互认证(也称为双向TLS认证)。当启用此选项时,不仅服务器会向客户端提供证书以证明其身份,而且客户端也必须向服务器提供有效证书以进行身份验证。这增加了通信的安全性,但也需要更复杂的证书管理。
  • - -server.tls.ca-file=“”
      指定证书颁发机构(CA)的证书文件路径。这个文件用于验证连接到Web服务器的客户端提供的TLS证书的有效性。在双向TLS认证中,这是必需的,以确保服务器只接受由受信任的CA签发的客户端证书。
  • - -server.tls.cert-file=“”
      指定Web服务器用于TLS连接的证书文件路径。这个文件包含了服务器的公钥和相关信息,用于向客户端证明服务器的身份。
  • - -server.tls.key-file=“”
      指定与Web服务器证书文件相匹配的私钥文件路径。私钥用于对发送给客户端的数据进行签名,以确保数据的完整性和真实性。

过滤与并发类

  • - -topic.filter=“.*”
      使用正则表达式来确定哪些 Kafka 主题(topic)的指标将被收集。.* 表示匹配所有主题。如果您只想监控特定的主题,可以修改此正则表达式。
  • - -group.filter=“.*”
      使用正则表达式来确定哪些消费者组(consumer group)的指标将被收集。.* 表示匹配所有消费者组。如果您只想监控特定的消费者组,可以修改此正则表达式。
  • - -concurrent.enable
      确定是否启用并发Kafka操作。如果设置为true,kafka_exporter将能够并发地处理多个Kafka主题和消费者组的监控数据。这可以提高数据收集的效率,特别是在监控大量主题或消费者组时。启用并发操作有助于减少数据收集的时间,使kafka_exporter能够更快地提供监控指标。
  • - -topic.workers=100
      设置用于处理Kafka主题监控的工作器(worker)数量。工作器是负责从Kafka集群收集特定主题相关信息的后台任务。增加工作器的数量可以提高并发处理能力,但也可能增加系统的资源消耗。默认值(如100)通常适用于大多数情况,但在具有大量主题或高负载的Kafka集群中,可需要根据实际情况调整此值。然而,设置过多的工作器可能会导致资源争用和性能下降,因此需要根据服务器的硬件性能和Kafka集群的大小来合理配置。

日志与调试类

  • - -log.enable-sarama
      用于开启或关闭 Sarama(Kafka 的 Go 客户端库)的日志记录。Sarama是kafka_exporter用于与Kafka集群通信的客户端库。默认情况下,这个选项是关闭的(false)。如果你需要调试或获取更详细的日志信息,特别是与Kafka通信相关的日志,你可以将此参数设置为true。启用后,Sarama将生成详细的日志,这有助于诊断与Kafka连接、消费或生产相关的问题。
  • - -verbosity=0
      设置日志的详细级别。数值越高,输出的日志信息越详细。通常,较低的详细级别(如0)只会记录关键信息,而较高的级别会包含更多的调试信息。通过增加详细级别,你可以获得更多关于kafka_exporter内部操作的信息,这有助于诊断复杂的问题。
  • - -log.level=info
      日志消息的严重程度。常见的日志级别包括debug、info、warn、error等。设置为info级别意味着kafka_exporter将记录信息性消息以及更严重级别的消息(如警告和错误),但会忽略调试级别的消息。选择合适的日志级别可以帮助你关注重要的日志事件,同时避免日志中充斥过多不必要的细节。
  • - -log.format=logfmt
      指定日志消息的输出格式。logfmt是一种简洁的键值对格式,易于阅读和解析。除了logfmt外,还可能支持其他格式,如JSON等。选择适当的日志格式可以简化日志分析过程,特别是当你使用日志分析工具或系统时。

四、实战演练:生产环境搭建指南🔨

4.1 创建普通用户管理kafka_exporter👤

useradd deploy

4.2 解压kafka_exporter.tar.gz📦

注意:
  我的是x86,所以使用kafka_exporter-1.6.0.linux-amd64.tar.gz,您可以使用uname -a命令查看系统架构

tar xvf kafka_exporter-1.6.0.linux-amd64.tar.gz -C /home/deploy/

4.3 将kafka_exporter集成到Prometheus配置中✂️

  将kafka_exporter集成到Prometheus配置中,确保数据能够正常采集。编辑Prometheus的配置文件(通常是prometheus.yml),在scrape_configs部分添加kafka_exporter的配置。告诉Prometheus将采集localhost:9308的数据。

scrape_configs:
  # The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
  - job_name: "kafka_exporter"
    static_configs:
      - targets: ["localhost:9308"]

4.4 更改kafka_exporter软件包名称✂️

mv /home/deploy/kafka_exporter-1.6.0.linux-amd64 /home/deploy/kafka_exporter

4.5 编辑kafka_exporter.service文件📝

cat > /etc/systemd/system/kafka_exporter.service <<EOF
[Unit]
Description=Kafka Exporter

[Service]
Type=simple
User=deploy
Group=deploy
ExecStart=/home/deploy/kafka_exporter/kafka_exporter --kafka.server=127.0.0.1:9092 \
--concurrent.enable \
--topic.workers=50 \
--web.listen-address=:9308 \
--log.level=info \
--log.format=logfmt
ExecReload=/bin/kill -HUP
Restart=on-failure

[Install]
WantedBy=default.target
EOF

4.6 启动kafka_exporter.service🔌

sudo systemctl daemon-reload

sudo systemctl enable --now kafka_exporter.service

4.7 查看服务是否正常启动🔍

# 查看service服务是否启动
sudo systemctl status kafka_exporter.service

# 查看端口是否存在
sudo ss -ntulp | grep 9308

五、基于云原生的部署方案 🚀

5.1 使用Docker部署kafka_exporter🐳

5.1.1 获取Prometheus Docker镜像 📸

  • 从docker-hub下载镜像
docker pull danielqsj/kafka-exporter/kafka_exporter:v1.7.0

docker tag danielqsj/kafka-exporter/kafka_exporter:v1.7.0 kafka_exporter:v1.7.0
  • 从阿里云下载镜像(如果访问不到docker-hub)
// 如果访问不到docker-hub的可以访问如下地址
docker pull registry.cn-beijing.aliyuncs.com/insights-ops/kafka_exporter:v1.7.0

docker tag registry.cn-beijing.aliyuncs.com/insights-ops/kafka_exporter:v1.7.0 kafka_exporter:v1.7.0
  • 从百度网盘下载镜像
docker load -i kafka_exporter-v1.7.0.tar

docker tag danielqsj/kafka-exporter/kafka_exporter:v1.7.0 kafka_exporter:v1.7.0

5.1.2 运行kafka_exporter容器 🏃

docker run -itd --rm -p 9308:9308 kafka_exporter:v1.7.0 --name=kafka_exporter --kafka.server=127.0.0.1:9092

5.1.3 验证Docker部署 ✅

# 查看容器是否正常启动,Status为Up为正常
docker ps -a | grep kafka_exporter

# 端口监听
ss -ntulp | grep 9308

5.2 利用Docker-Compose简化部署 📘

5.2.1 编写docker-compose.yml配置文件 📜

---
version: '3'

services:
  kafka-exporter:
    image: kafka_exporter:v1.7.0
    command: ["--kafka.server=127.0.0.1:9092"]
    ports:
      - 9308:9308     

5.2.2 使用Docker-Compose启动服务 🚀

docker-compose up -d

5.2.3 验证Docker部署 ✅

# 查看容器是否正常启动,Status为Up为正常
docker ps -a | grep kafka_exporter

# 端口监听
ss -ntulp | grep 9308

5.3 在Docker Swarm中部署kafka_exporter🐝

5.3.1 创建Docker Compose文件

创建一个 docker-compose.yml 文件来定义 kafka_exporter 服务。以下是一个示例配置文件:

mkdir docker/docker-swarm/kafka_exporter  -p

docker network create -d overlay kafka-network

vi docker/docker-swarm/kafka_exporter/docker-compose.yml
version: '3.7'

services:
  kafka-exporter:
    image: bitnami/kafka-exporter:1.7.0
    environment:
      - KAFKA_BROKERS=kafka-broker-1:9092,kafka-broker-2:9092 # 替换为你的Kafka broker地址
    ports:
      - "9308:9308"
    deploy:
      restart_policy:
        condition: on-failure
      placement:
        constraints:
          - node.role == manager # 可选:限制只在manager节点上运行
    networks:
      - kafka-network

networks:
  kafka-network:
    external: true

5.3.2 部署服务到Docker Swarm

使用 docker stack deploy 命令将服务部署到 Docker Swarm。

docker pull bitnami/kafka-exporter:1.7.0

docker stack deploy -c docker/docker-swarm/kafka_exporter/docker-compose.yml monitoring

5.3.3 验证部署

docker service ls

在这里插入图片描述

5.4 在Kubernetes(K8s)上部署kafka_exporter🚀

5.4.1 部署 kafka_exporter

创建一个名为kafka_exporter-Deployment.yaml的文件来定义kafka_exporter的Deployment服务。

mkdir k8s/kafka_exporter -p

vi k8s/kafka_exporter/kafka_exporter-Deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: kafka-exporter
  namespace: monitoring  # 假设你有一个名为monitoring的命名空间
spec:
  replicas: 1  # 根据需要调整副本数
  selector:
    matchLabels:
      app: kafka-exporter
  template:
    metadata:
      labels:
        app: kafka-exporter
    spec:
      containers:
      - name: kafka-exporter
        image: bitnami/kafka-exporter:1.7.0
        args:
          - --kafka.server=kafka-broker-1:9092,kafka-broker-2:9092  # 替换为你的Kafka broker地址
        ports:
        - containerPort: 9308
        resources:
          requests:
            memory: "64Mi"
            cpu: "100m"
          limits:
            memory: "128Mi"
            cpu: "200m"
---
apiVersion: v1
kind: Service
metadata:
  name: kafka-exporter
  namespace: monitoring
  labels:
    app: kafka-exporter
spec:
  type: ClusterIP
  ports:
  - port: 9308
    protocol: TCP
    targetPort: 9308
  selector:
    app: kafka-exporter

使用命令将其应用到Kubernetes集群中:

kubectl apply -f k8s/kafka_exporter/kafka_exporter-Deployment.yaml

5.4.2 验证部署

要验证kafka-exporter是否正确部署并运行,可以使用以下命令查看Pod状态:

kubectl get pods -n monitoring -l app=kafka-exporter

相关资料下载地址📚

<think>好的,用户之前在问如何修改Debian 12.1的SSH端口号,我已经给出了详细步骤。现在用户的新问题是在Debian 12.1上配置SSH服务的详细步骤。需要结合之前的回答和提供的引用内容来整合答案。 首先,用户提到的引用中有几个关键点:安装SSH服务、修改配置允许root远程登录、以及配置双因素认证。虽然用户现在的问题是配置SSH服务,但可能需要涵盖这些方面。 回顾之前的回答,修改端口、防火墙设置、重启服务这些步骤已经覆盖了基本配置。现在用户可能需要更全面的配置指南,包括安装、基础配置、安全加固等。 引用1提到安装Debian12时可能已经安装了SSH,如果没有需要手动安装。引用2提到root账户默认不可远程登录,需要修改sshd_config。引用3关于Google Authenticator的双因素认证,属于安全增强部分。 所以,用户的真实需求可能包括:安装SSH服务(如果需要)、基础配置(端口、允许root登录)、安全措施(如双因素认证、防火墙限制)。需要将这些内容整合成一个完整的配置步骤,同时参考之前的回答结构,确保步骤清晰,注意事项到位。 需要注意用户可能已经安装了SSH,但需要确认安装状态。然后配置文件中修改端口、允许root登录、其他安全设置。此外,双因素认证作为可选的高级安全配置,可以放在后面作为扩展步骤。 另外,用户之前的问题中提到了防火墙配置,这里也需要包含进去,比如UFW或iptables的设置。同时,测试连接和故障排查也是必要的步骤。 需要确保每一步都有对应的命令和解释,比如使用sudo权限编辑配置文件,重启服务的方法,备份配置等。注意事项部分要提醒用户备份、测试连接后再关闭原会话,以及处理可能的SELinux问题(虽然Debian默认不启用)。 可能还需要补充如何启用root远程登录,根据引用2的内容,修改PermitRootLogin选项。同时,结合用户之前的回答,确保端口修改和防火墙设置的步骤正确无误。 最后,生成相关问题时要考虑用户可能的后续问题,比如安全加固方法、双因素认证配置、故障排查等,这样用户可以有进一步了解的途径。</think>### 逐步解决方案:Debian 12.1 SSH服务完整配置指南 --- #### **1. 安装SSH服务** 若系统未预装SSH服务(安装时可选择`SSH Server`选项),需手动安装: ```bash sudo apt update sudo apt install openssh-server ``` --- #### **2. 基础配置** **2.1 修改SSH配置文件** ```bash sudo nano /etc/ssh/sshd_config ``` 修改以下关键参数(示例配置): ```bash Port 2222 # 修改默认端口(可选,建议更换默认22端口) PermitRootLogin yes # 允许root远程登录(引用[^2]) PasswordAuthentication yes # 启用密码验证(若需密钥+密码双验证可设为no) LoginGraceTime 60 # 登录超时时间(秒) MaxAuthTries 3 # 单次连接最大认证尝试次数 ``` **2.2 启用双因素认证(可选安全增强)** 结合引用[^3]的Google Authenticator配置: ```bash # 安装依赖 sudo apt install libpam-google-authenticator # 为用户生成验证码 google-authenticator # 在sshd_config中添加: UsePAM yes ChallengeResponseAuthentication yes # 在PAM配置中启用模块: echo "auth required pam_google_authenticator.so" | sudo tee -a /etc/pam.d/sshd ``` --- #### **3. 防火墙配置** **3.1 使用UFW防火墙** ```bash sudo ufw allow 2222/tcp # 开放新SSH端口 sudo ufw reload ``` **3.2 限制IP访问(可选)** 仅允许特定IP访问SSH: ```bash sudo ufw allow from 192.168.1.0/24 to any port 2222 ``` --- #### **4. 重启服务并验证** ```bash sudo systemctl restart ssh sudo systemctl status ssh # 检查服务状态 ``` --- #### **5. 连接测试** ```bash # 测试新端口(保持当前会话勿关闭!) ssh root@server_ip -p 2222 # 若启用双因素认证,需输入密码+动态码 ``` --- #### **6. 安全加固建议** - **密钥登录替代密码** 生成密钥对并禁用密码登录: ```bash ssh-keygen -t ed25519 ssh-copy-id -i ~/.ssh/id_ed25519.pub user@server_ip -p 2222 ``` 配置文件中设置:`PasswordAuthentication no` - **日志监控** 查看SSH登录日志: ```bash sudo journalctl -u ssh --since "1 hour ago" ``` --- ### 注意事项 1. **备份配置文件** ```bash sudo cp /etc/ssh/sshd_config ~/sshd_config.bak ``` 2. **多端口监听** 若需保留原端口过渡,可配置多端口: ```bash Port 22 Port 2222 ``` 3. **SELinux兼容性** Debian默认未启用SELinux,若手动启用需添加端口规则: ```bash semanage port -a -t ssh_port_t -p tcp 2222 ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

喜提yBei冰美式

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值