Linux基础——测试业务20个ssh并发时延2-3秒

一、问题描述

测试机A(192.168.190.101)

测试机B(192.168.190.102)

测试机A发起20个并发访问测试机B,在messages日志刷新20个PAM模块日志后等待2-3秒,再次输出20个ssh关闭连接的日志,无法满足业务1秒左右的链接要求;

二、测试环境

 

场景:测试机A执行test.sh脚本访问测试机B

# 测试机A执行指令
sh
test.sh 192.168.190.102 root # "$1"即目标主机ip,第一个参数:192.168.190.102 # "$2"即目标主机用户,第二个参数:root

三、脚本

# 测试机A执行脚本
[root@nmcc ~]# cat test.sh #!/usr/bin/env bash HOST="$1" USER="$2" COUNT="${3:-20}" # 并发数,默认 20 TIMEOUT=15 if [[ -z "$HOST" || -z "$USER" ]]; then echo "用法: $0 <host_ip> <user> [并发数]" exit 1 fi echo "Target: $USER@$HOST" echo "Concurrency: $COUNT" echo "--------------------------------------" run_one() { local id="$1" local start end cost rc start=$(date +%s%3N) ssh \ -o BatchMode=yes \ -o ConnectTimeout=$TIMEOUT \ -o StrictHostKeyChecking=no \ -o UserKnownHostsFile=/dev/null \ -o GSSAPIAuthentication=no \ -o PreferredAuthentications=publickey \ -o LogLevel=ERROR \ "$USER@$HOST" true 2>/dev/null rc=$? end=$(date +%s%3N) cost=$((end - start)) if [[ $rc -eq 0 ]]; then echo "[$id] OK ${cost} ms" else echo "[$id] FAIL ${cost} ms rc=$rc" fi } export -f run_one export HOST USER TIMEOUT seq 1 "$COUNT" | xargs -n1 -P"$COUNT" -I{} bash -c 'run_one {}'

四、测试结果

业务侧要求:1秒左右

测试结果:3.6秒~4秒(不满足业务需求)

# 测试机A观察结果
# 20个ssh并发测试结果
[root@nmcc ~]# cat 102.txt Target: root@192.168.190.102 Concurrency: 20 -------------------------------------- [12] FAIL 12 ms rc=255 [16] FAIL 10 ms rc=255 [15] FAIL 21 ms rc=255 [19] FAIL 31 ms rc=255 [2] OK 3603 ms [4] OK 3645 ms [6] OK 3673 ms [7] OK 3707 ms [1] OK 3720 ms [8] OK 3734 ms [20] OK 3736 ms [3] OK 3740 ms [5] OK 3746 ms [14] OK 3746 ms [9] OK 3750 ms [13] OK 3753 ms [18] OK 3753 ms [11] OK 3754 ms [17] OK 3775 ms [10] OK 3785 ms Target: root@192.168.190.102 Concurrency: 20

 

 

image

 

 

五、测试机B优化:调大/etc/ssh/sshd_config MaxSessions

调整MaxSessions为100以上,测试机A发起20个ssh并发测试结果:44秒将至3秒左右;

# 核心优化:放宽并发限制
MaxSessions 100     #按需求调大并发会话,观察测试时间
MaxStartups 100:30:200

# 禁用 DNS 反向解析
UseDNS no

# 禁用 GSSAPI 认证
GSSAPIAuthentication no

六、测试机B优化:检查/var/log/btmp记录ssh登入失败日志

可能存在问题:/var/log/btmp过大导致ssh访问时延高;

 

# 日志登入失败检查指令

要查看 btmp 文件中的内容,可以使用以下命令:

  • lastb:最直接的命令,专门用于显示失败的登录记录。
  • last -f /var/log/btmp:与 lastb 功能等效,提供相同的输出结果。

# 检查指定主机ip登入失败日志

sudo lastb | grep "192.168.1.100"

# 详解:
/var/log/btmp 文件在 Linux 系统中的主要作用是‌记录所有失败的登录尝试‌。 这个文件是一个二进制格式的日志文件,不能直接用 cat 等文本查看命令读取,必须使用专用命令进行解析。 其核心用途包括: ‌安全监控‌:通过分析失败的登录记录,系统管理员可以检测是否存在恶意的暴力破解攻击。例如,如果某个用户名或 IP 地址频繁出现登录失败,这可能是攻击者在尝试猜测密码。 ‌故障排查‌:当用户反馈无法登录系统时,管理员可以通过查看 btmp 文件来判断是密码错误、账号被锁定,还是其他原因导致的登录失败。 ‌审计合规‌:许多组织要求对系统访问进行审计。btmp 文件提供了详细的失败登录时间、用户名、来源 IP 等信息,有助于满足安全合规要求。

七、问题原因

备份/var/log/btmp日志,重建/var/log/btmp后,20个ssh并发访问延迟将至1秒左右;

# 重建/var/log/btmp日志文件
mv
/var/log/btmp /var/log/btmp-bak_$(date +'%Y%m%d%H%M%S')
touch /var/log/btmp
chmod 660 /var/log/btmp

# 检查ssh登入失败日志
[root@harbor log]# lastb
root ssh:notty 192.168.190.102 Thu Jan 29 17:09 - 17:09 (00:00)

root ssh:notty 192.168.190.102 Thu Jan 29 17:09 - 17:09 (00:00)

btmp begins Thu Jan 29 17:09:42 2026

[root@harbor log]# cat /var/log/btmp

W&ssh:nottyroot192.168.190.102

 

posted @ 2026-01-29 17:15  gkhost  阅读(1)  评论(0)    收藏  举报