服务器测评网
我们一直在努力

Linux SSH连接数过多怎么办?如何限制和优化?

Linux SSH 连接数管理是系统运维中的重要环节,合理的连接数配置既能保障服务器的安全性,又能提升用户体验,本文将从 SSH 连接数的基本概念、查看方法、优化策略、安全限制及常见问题五个方面,详细阐述如何高效管理 Linux 系统中的 SSH 连接数。

Linux SSH连接数过多怎么办?如何限制和优化?

SSH 连接数的基本概念

SSH(Secure Shell)是一种加密的网络传输协议,用于在不安全的网络中提供安全的远程登录服务,SSH 连接数指的是当前通过 SSH 协议与服务器建立的活跃会话数量,每个连接都会占用服务器端的系统资源,包括内存、CPU 和文件描述符等,默认情况下,Linux 系统对 SSH 连接数没有严格限制,但如果连接数过多,可能导致服务器资源耗尽,甚至引发拒绝服务(DoS)攻击,合理管理 SSH 连接数是保障服务器稳定运行的关键。

查看当前 SSH 连接数

在管理连接数之前,首先需要掌握查看当前连接状态的方法,以下是几种常用的命令:

  1. 使用 ssnetstat 命令
    ss 是 Linux 下替代 netstat 的工具,性能更优,执行以下命令可查看当前 SSH 连接的详细信息:

    ss -tunpa | grep ssh

    或使用 netstat

    netstat -tunpa | grep ssh

    命令输出中,State 列显示连接状态(如 ESTAB 表示已建立连接),Recv-QSend-Q 列分别表示接收和发送队列的长度。

  2. 使用 whow 命令
    这两个命令可查看当前登录系统的用户信息,包括登录终端、时间和来源 IP:

    who | grep "ssh"
    w | head -n 5

    通过输出结果,可以直观了解当前 SSH 登录用户数量及会话状态。

  3. 查看 /var/log/wtmp 日志
    系统会记录所有登录信息到 /var/log/wtmp 文件中,使用 last 命令可查看历史 SSH 登录记录:

    last | grep "ssh"

    该方法有助于分析异常登录行为,判断是否存在非授权连接。

    Linux SSH连接数过多怎么办?如何限制和优化?

优化 SSH 连接数策略

过多的无效连接会占用服务器资源,通过以下策略可有效优化连接数管理:

  1. 启用连接复用
    SSH 连接复用(Multiplexing)允许多个会话共享同一个连接,减少重复建立连接的开销,在客户端配置文件 ~/.ssh/config 中添加以下参数:

    Host *
        ControlMaster auto
        ControlPath ~/.ssh/master-%r@%h:%p
        ControlPersist 600

    ControlPersist 表示连接在后台保持的时间(单位:秒),避免频繁建立和断开连接。

  2. 配置 KeepAlive 机制
    启用 SSH KeepAlive 可防止因网络空闲导致连接断开,在服务器端配置文件 /etc/ssh/sshd_config 中添加:

    ClientAliveInterval 60
    ClientAliveCountMax 3

    ClientAliveInterval 表示每隔 60 秒发送一次保活包,ClientAliveCountMax 表示最多发送 3 次保活包后仍无响应则断开连接。

  3. 限制用户并发连接数
    通过 pam_limits 模块可限制用户的最大并发 SSH 连接数,编辑 /etc/security/limits.conf 文件,添加以下内容:

    * hard maxlogins 5

    该配置限制所有用户最多同时建立 5 个 SSH 连接,可根据实际需求调整数值。

限制 SSH 连接数的安全措施

为防止暴力破解和资源滥用,需对 SSH 连接数进行严格限制:

  1. 修改默认 SSH 端口
    默认情况下,SSH 服务运行在 22 端口,易受攻击,修改 /etc/ssh/sshd_config 中的 Port 参数为非默认端口(如 2222),并重启 SSH 服务:

    Linux SSH连接数过多怎么办?如何限制和优化?

    systemctl restart sshd

    确保防火墙开放新端口。

  2. 使用防火墙限制连接频率
    通过 iptablesfirewalld 限制单个 IP 的 SSH 连接频率,使用 iptables 限制每分钟最多 5 次连接:

    iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --set
    iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 60 --hitcount 5 -j DROP

    该规则可有效防止暴力破解攻击。

  3. 禁用 root 直接登录
    /etc/ssh/sshd_config 中设置 PermitRootLogin no,禁止 root 用户通过 SSH 直接登录,必须通过普通用户登录后再切换至 root,降低安全风险。

常见问题与解决方案

  1. 连接数过多导致服务器卡顿
    原因:大量 SSH 连接占用系统资源,尤其是文件描述符耗尽。
    解决

    • 增加文件描述符限制:编辑 /etc/security/limits.conf,添加 * soft nofile 65535* hard nofile 65535
    • 终止无效连接:使用 pkill -u username 命令强制断开指定用户的连接。
  2. SSH 连接频繁断开
    原因:网络不稳定或未启用 KeepAlive 机制。
    解决

    • 检查网络环境,确保客户端和服务器网络稳定。
    • 启用 SSH KeepAlive(如第三部分所述)。
  3. 无法建立新连接
    原因:达到最大连接数限制或防火墙规则拦截。
    解决

    • 检查 sshd_config 中的 MaxStartups 参数(默认 10:30:100,表示最多 10 个连接,超过 30% 概率拒绝),适当调整限制。
    • 检查防火墙日志,确认是否有规则拦截,并调整策略。

Linux SSH 连接数管理是系统运维的基础工作,需结合查看、优化和安全限制等多方面措施,通过合理配置连接复用、KeepAlive 机制,结合防火墙和用户权限控制,既能提升服务器资源利用率,又能有效防范安全威胁,在实际操作中,应根据业务需求灵活调整策略,并定期监控连接状态,确保服务器安全稳定运行。

赞(0)
未经允许不得转载:好主机测评网 » Linux SSH连接数过多怎么办?如何限制和优化?