交接的服务器一堆,密码一堆,密码改来改去,没有对应关系,利用这个脚本逐一探测。(密码保存在pw.txt 每行一个密码, ip地址写在脚本中)
#!/bin/bash
# 配置信息
SERVER_IP="123.123.123.123"
USERNAME="root"
PASS_FILE="pw.txt"
# 检查pw.txt是否存在
if [ ! -f "$PASS_FILE" ]; then
echo "错误:密码文件 $PASS_FILE 不存在!"
exit 1
fi
# 检查expect是否安装
if ! command -v expect &> /dev/null; then
echo "错误:未安装expect工具,请先执行安装(如:yum install expect -y 或 apt install expect -y)"
exit 1
fi
# 循环读取密码并尝试登录
while IFS= read -r password; do
# 跳过空行
[ -z "$password" ] && continue
echo -e "\n 正在尝试密码:$password"
# 使用expect执行SSH登录尝试(修复语法错误)
login_result=$(expect -c '
set timeout 10; # 超时时间10秒(分号分隔注释)
spawn ssh -o StrictHostKeyChecking=no '"$USERNAME"'@'"$SERVER_IP"'
expect {
"password:" { send "'"$password"'\r"; exp_continue }
"Permission denied" { exit 1 }
"Last login:" { exit 0 }
timeout { exit 2 }
"Connection refused" { exit 3 }
"No route to host" { exit 4 }
eof { exit 5 }
}
')
# 根据expect退出码判断结果
case $? in
0)
echo -e "登录成功!正确密码为:$password"
exit 0 # 找到正确密码后退出脚本
;;
1)
echo "登录失败:密码错误"
;;
2)
echo "登录失败:连接超时"
;;
3)
echo "登录失败:SSH端口被拒绝(可能端口非22或服务未启动)"
;;
4)
echo "登录失败:服务器不可达(IP错误或网络问题)"
exit 1 # 网络问题无需继续尝试
;;
*)
echo "登录失败:Expect语法错误或未知异常"
;;
esac
done < "$PASS_FILE"
echo -e "\n 所有密码尝试完毕,未找到正确密码!"
exit 1
