python linux服务器ssh简单爆破(测试用户名密码)(连接ssh服务器)(测试登录ssh服务器)

文章目录

    • 背景
    • 示例
      • 代码
      • 代码解释
        • 导入模块
        • SSH服务器的地址和端口
        • 用户名和密码列表
        • 生成所有可能的用户名和密码组合
        • 尝试连接到SSH服务器并验证用户名和密码
        • 遍历并测试每一对凭证

背景

我们华为摄像头linux终端的密码忘了,还不太好初始化,手动一个个测试太麻烦,所以实现了个python代码,用来自动测试用户密码是否能登录。

示例

代码

import paramiko
import time'''
这个脚本会对每个组合尝试两次连接(这通过 retries=2 参数控制)。
如果遇到认证错误,它将立即中断当前组合的尝试并继续到下一个组合,因为再次尝试相同的错误密码没有实际意义。
对于其他类型的连接失败(如网络问题),如果第一次失败,它将等待一秒钟后再尝试一次。
'''# SSH 服务器的地址和端口
ssh_host = '192.168.1.81'
ssh_port = 22# 用户名列表
usernames = ['root','admin','ApiAdmin']
# 密码列表
passwords = ['123','HuaWei123','ChangeMe123','abc12345','aa123456','admin']# 生成所有可能的用户名和密码组合
credentials = [(user, pwd) for user in usernames for pwd in passwords]# 尝试连接到 SSH 服务器并验证用户名和密码def try_login(host, port, username, password, retries=3):client = paramiko.SSHClient()client.set_missing_host_key_policy(paramiko.AutoAddPolicy())for attempt in range(1, retries + 1):try:print(f"尝试连接: {host}:{port} 用户名 '{username}' 和密码 '{password}' (尝试次数: {attempt})")client.connect(host, port=port, username=username,password=password, timeout=10)# 如果连接成功,返回 Trueprint(f"成功连接到 {host}:{port} - 用户名 '{username}' 和密码 '{password}' 是有效的!")return Trueexcept paramiko.AuthenticationException:# 如果认证失败(即密码错误),直接返回 Falseprint(f"认证失败: {host}:{port} - 用户名 '{username}' 和密码 '{password}'")return Falseexcept paramiko.SSHException as e:# 如果连接失败(非认证失败),打印错误并重试print(f"连接失败: {host}:{port} - 重试中... (错误: {e})")time.sleep(1)  # 稍微等待一下,避免立即重连finally:client.close()print(f"最终失败: {host}:{port} - 用户名 '{username}' 和密码 '{password}' 在多次尝试后仍无法连接。")return False# 遍历并测试每一对凭证
for username, password in credentials:print('========开始尝试新的凭证组合========')try_login(ssh_host, ssh_port, username, password)# 注意,这里的重试可能不是必要的,因为 try_login 已经包括了重试逻辑try_login(ssh_host, ssh_port, username, password)print('========结束当前凭证组合的尝试========')

在这里插入图片描述

代码解释

这段代码的目的是通过SSH协议尝试连接到指定的服务器,使用提供的用户名和密码组合列表进行身份验证。它适用于需要验证多个凭据对有效性的场景,比如在你有一个用户名和密码列表,需要检查哪些能够成功登录到SSH服务器。下面我将逐部分解释代码的功能:

导入模块
import paramiko
import time
  • paramiko:这是一个Python实现的SSHv2协议库,用于创建SSH连接,执行远程命令,传输文件等。
  • time:用于实现等待(延迟)的功能,特别是在重连尝试中。
SSH服务器的地址和端口
ssh_host = '192.168.2.112'
ssh_port = 22

这里定义了SSH服务器的IP地址和端口号。'192.168.2.112' 是SSH服务器的IP地址,22 是SSH协议的默认端口号。

用户名和密码列表
# 用户名列表
usernames = ['root','admin','ApiAdmin']
# 密码列表
passwords = ['123','HuaWei123','ChangeMe123','abc12345','aa123456','admin']

这两个列表分别包含了要尝试的用户名和密码。代码将遍历这些列表,为每个用户名尝试所有密码。

生成所有可能的用户名和密码组合
credentials = [(user, pwd) for user in usernames for pwd in passwords]

使用列表推导式生成用户名和密码的所有可能组合,结果是一个包含元组的列表,每个元组包含一对用户名和密码。

尝试连接到SSH服务器并验证用户名和密码
def try_login(host, port, username, password, retries=3):client = paramiko.SSHClient()client.set_missing_host_key_policy(paramiko.AutoAddPolicy())for attempt in range(1, retries + 1):try:print(f"尝试连接: 用户名 '{username}' 和密码 '{password}' (尝试次数: {attempt})")client.connect(host, port=port, username=username,password=password, timeout=10)# 如果连接成功,返回 Trueprint(f"成功: 用户名 '{username}' 和密码 '{password}' 是有效的!")return Trueexcept paramiko.AuthenticationException:# 如果认证失败(即密码错误),直接返回 Falseprint(f"认证失败: 用户名 '{username}' 和密码 '{password}'")return Falseexcept paramiko.SSHException as e:# 如果连接失败(非认证失败),打印错误并重试print(f"连接失败,重试中... (错误: {e})")time.sleep(1)  # 稍微等待一下,避免立即重连finally:client.close()print(f"最终失败: 用户名 '{username}' 和密码 '{password}' 在多次尝试后仍无法连接。")return False

这个函数尝试使用提供的用户名和密码通过SSH连接到服务器。如果连接成功,它会打印一条成功消息并返回True。连接尝试默认最多重试3次(通过retries参数控制)。

  • 设置SSH客户端:首先,创建一个paramiko.SSHClient实例,并设置一个策略来自动接受未知的SSH密钥(对于自动化任务通常是可接受的)。

  • 尝试连接:使用client.connect()方法尝试连接到服务器。如果连接成功,打印成功消息并返回True

  • 处理异常

    • AuthenticationException:如果遇到认证失败(密码错误),打印一条消息并返回False
    • SSHException:如果因其他原因连接失败(如网络问题),打印错误消息并等待1秒后重试,直到达到重试次数限制。
  • 关闭连接:无论成功与否,最后都关闭SSH连接。

遍历并测试每一对凭证
for username, password in credentials:print('========start========')try_login(ssh_host, ssh_port, username, password)try_login(ssh_host, ssh_port, username, password)print('========end========')

这部分代码遍历之前生成的用户名和密码组合,对每一对凭证尝试连接两次。每次尝试之前和之后都有打印消息,以标示尝试的开始和结束。

注意,此代码实际上会对每个凭证组合尝试四次连接(每个组合两次尝试,循环两遍),这可能不是预期的行为(主要是因为手动登录的时候,错误三次将会提示重新尝试,担心这个,所以每个组合尝试登录两次)。如果目的是对每个组合仅尝试两次,应将内部的两次try_login调用合并为一次,并确保try_login函数内部逻辑正确处理重试。

成功测试出服务器密码:

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/813769.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【QingHub】EMQX单节点一键部署

EMQX 简介 EMQX是全球最具扩展性的开源MQTT 代理,具有高性能,可在 1 个集群中连接 1 亿多个 IoT 设备,同时保持每秒 100 万条消息的吞吐量和亚毫秒级的延迟。 EMQX 支持MQTT、HTTP、QUIC、WebSocket等多种开放标准协议。它 100% 符合MQTT 5.…

ChatGPT深度科研应用、数据分析及机器学习、AI绘图与高效论文撰写

2022年11月30日,可能将成为一个改变人类历史的日子——美国人工智能开发机构OpenAI推出了聊天机器人ChatGPT3.5,将人工智能的发展推向了一个新的高度。2023年4月,更强版本的ChatGPT4.0上线,文本、语音、图像等多模态交互方式使其在…

基于Springboot+Vue的Java项目-在线视频教育平台系统(附演示视频+源码+LW)

大家好!我是程序员一帆,感谢您阅读本文,欢迎一键三连哦。 💞当前专栏:Java毕业设计 精彩专栏推荐👇🏻👇🏻👇🏻 🎀 Python毕业设计 &am…

使用 Python 标记具有相同名称的条目

如果大家想在 Python 中标记具有相同名称的条目,可以使用字典(Dictionary)或集合(Set)来实现。这取决于你们希望如何存储和使用这些条目。下面我将提供两种常见的方法来实现这个目标。 1、问题背景 在处理数据时&…

电脑端微信截图文字识别功能效率更高了

近期发现微信中的截图文字识别比QQ中的截图文字识别效率高更高,效果更好。 使用方法: 安装电脑端微信客户端:https://weixin.qq.com/(如果没有下载,可以安装一下) 默认截图组合快捷键是:ALTA (使用下来感觉不是很顺手…

AI在运维实践中的价值提升

在2024年的AI赛道上,利用大数据 、机器学习算法、人工智能来改善运维效率已成为软件运营商发展的新主张,通过AI在运维流程的洞察、决策和执行,从而提升效率、减少故障时间,优化用户体验。通过分析大量数据来识别趋势和模式&#x…

【MATLAB】GA_ELM神经网络时序预测算法

有意向获取代码,请转文末观看代码获取方式~ 1 基本定义 GA_ELM(Genetic Algorithm and Extreme Learning Machine)是一种结合了遗传算法和极限学习机的神经网络时序预测算法。它的核心思想是通过使用遗传算法来优化极限学习机的权重和偏差&…

Python网络爬虫中JSON格式数据存储详解

目录 一、引言 二、JSON格式数据简介 三、Python中处理JSON数据 四、网络爬虫中获取JSON数据 五、存储JSON数据到文件 六、从文件中读取JSON数据 七、注意事项和常见问题 八、总结 一、引言 在网络爬虫的应用中,JSON格式数据以其轻量级、易读易写的…

element UI 设置type=“textarea“ 禁止输入框缩放

背景 在 Element UI 中,当您使用 el-input 组件并设置 type"textarea" 时,默认情况下,用户可以通过拖动输入框的右下角来调整其大小。如果您想禁止这种缩放行为,需要使用 CSS 来覆盖默认的浏览器行为。 注意上图&#x…

用于显著提高检索速度和降低成本的二进制和标量嵌入量化

我们引入了嵌入量化的概念,并展示了它们对检索速度、内存使用、磁盘空间和成本的影响。我们将讨论理论上和实践中如何对嵌入进行量化,然后介绍一个 演示,展示了 4100 万维基百科文本的真实检索场景。 演示地址https://hf.co/spaces/sentence-…

JS控制元素平滑滚动,页面自动滚动锚点实现

使用 scrollIntoView 实现元素内子元素的平滑滚动, 下面是模拟接口list返回,然后通过按钮切换下一个,页面就会滚动到响应的位置 具体 scrollIntoView 有一些其他参数来配置滚动的具体交换,网上去查即可 备注:下面的代码…

Element ui 动态展示表格列,动态格式化表格列的值

需求 后台配置前端展示的表格列,遇到比如 文件大小这样的值,如果后台存的是纯数字,需要进行格式化展示,并且能控制显示的小数位数,再比如,部分列值需要加单位等信息,此外还有状态类&#xff0…

数据结构--循环队列

1.队列的定义: 和栈相反,队列(queue)是一种先进先出(first in first out,缩写为FIFO)的线性表.它只允许在表的一端进行插入,而在另一端删除元素. 在队列中,允许插入的一端叫做队尾(rear),允许删除的一端则称为队头(front). 2.循环队列的设计图示: 3.循环队列的结构设计: ty…

Vue.js npm错误:transpileDependencies.map不是一个函数

这个错误通常是由于npm版本不兼容导致的。在旧版本的npm中,transpileDependencies是一个字符串数组,我们可以直接配置需要编译的依赖库。而在较新版本的npm中,transpileDependencies被改成了一个对象,并且需要使用map()方法来处理…

【数据交换格式】网络socket编程温度采集智能存储与上报项目技术------JSON、TLV

作者简介: 一个平凡而乐于分享的小比特,中南民族大学通信工程专业研究生在读,研究方向无线联邦学习 擅长领域:驱动开发,嵌入式软件开发,BSP开发 作者主页:一个平凡而乐于分享的小比特的个人主页…

【C++成长记】C++入门 | 类和对象(上) |面向过程和面向对象初步认识、类的引入、类的定义、类的访问限定符及封装

🐌博主主页:🐌​倔强的大蜗牛🐌​ 📚专栏分类:C❤️感谢大家点赞👍收藏⭐评论✍️ 一、面向过程和面向对象初步认识 C语言是面向过程的,关注的是过程,分析出求解问题的步…

C++设计模式:代理模式(十三)

1、代理模式 定义:为其他对象提供一种代理以控制(隔离使用接口)对这个对象的访问等。 动机 在面向对象系统中,有些对象由于某种原因(比如对象需要进程外的访问等,例如在分布式的系统中)&#x…

【项目实战经验】DataKit迁移MySQL到openGauss(下)

上一篇我们分享了安装、设置、链接、启动等步骤,本篇我们将继续分享迁移、启动~ 目录 9. 离线迁移 9.1. 迁移插件安装 中断安装,比如 kill 掉java进程(安装失败也要等待300s) 下载安装包准备上传 缺少mysqlclient lib包 mysq…

【零基础学数据结构】双向链表

1.双向链表的概念 1.1头节点 1.2带头双向循环链表 注意: 哨兵位创建后,首尾连接自己 1.3双链表的初始化 // 双向链表的初始化 void ListInit(ListNode** pphead) {// 给双链表创建一个哨兵位*pphead ListBuyNode(-1); } 2.双向链表的打印 // 双向…

为什么在cmd中输入jupyter notebook会出现问题

C:\Users\REBECCA329>jupyter notebook jupyter 不是内部或外部命令,也不是可运行的程序 或批处理文件。 这是什么意思?这个说明在cmd中找不到jupyter notebook,说明没有添加到环境变量里去,在配置R内核的时候找不到&#xff…