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.hqwc.cn/news/610320.html

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

相关文章

Java - 算术运算符与算术表达式

今天我们要讲解的是算术运算符和算术表达式。在编程中,我们经常需要进行各种数学计算,而算术运算符和算术表达式则是我们实现这些计算的基础工具。 首先,我们先来了解一下什么是算术运算符。算术运算符是用来进行数学运算的符号,…

无重复字符串的最长子串

题目描述:给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串的长度。 第一次提交记录 class Solution:def lengthOfLongestSubstring(self, s: str) -> int:if not s:return 0lookup set()left res 0for right in range(len(s)):while s…

IDEA2023 开发环境配置

目录 1. 关闭IDEA自动更新1.2 IDEA 新版样式切换 2. Maven配置2.1本地仓库优先加载2.2 maven.config配置文件中 3. 全局配置JDK4. 配置文件编码:UTF-85. 开启自动编译(全局配置)6. 开启自动导包7. 开启鼠标悬浮(提示文档信息)8. 设…

Ollama教程——兼容OpenAI API:高效利用兼容OpenAI的API进行AI项目开发

相关文章: Ollama教程——入门:开启本地大型语言模型开发之旅 Ollama教程——模型:如何将模型高效导入到ollama框架 Ollama教程——兼容OpenAI API:高效利用兼容OpenAI的API进行AI项目开发 Ollama教程——兼容OpenAI API:高效利用…

编程新手必看,python中条件控制语句学习(13)

介绍: Python3中的条件控制主要通过if、elif和else关键字来实现,它们用于根据条件执行特定的代码块。 if语句:这是最基本的条件控制结构。如果满足某个条件(条件为True),则执行相应的代码块。在Python中&am…

新国标过渡期接近尾声,九号公司“多篮子鸡蛋”开始奏效?

随着2023年报披露接近尾声,两轮电动车行业的马太效应愈发凸显。 具体来看,行业巨头雅迪、爱玛继续稳健增长,而在新势力中,曾冠以“两轮特斯拉”光环的小牛电动业绩大幅下滑,但令人意外的是,4月初发布最新财…

5G-A有何能耐?5G-A三载波聚合技术介绍

2024年被称作5G-A元年。5G-A作为5G下一阶段的演进技术,到底有何能耐呢? 三载波聚合(3CC)被认为是首个大规模商用的5G-A技术,将带来手机网速的大幅提升。 █ 什么是3CC 3CC,全称叫3 Component Carriers…

工业垃圾打包机液压比例阀放大器

液压打包机的种类很多,我们生活中常见的是废纸打包机、金属打包机、纸箱打包机、玉米茎打包机等。然而,牙齿所有的打包机都有他的不同用法。除了我们生活中常见的以外,还有很多其他种类的打包机。让我介绍几件事。一种是捆 绑式打包机设备&am…

容错组合导航

在初始值正确的情况下,惯性导航短期精度较高,但是其误差随着时间是累计的。如果要提高惯性导航的长期精度,就必须提高惯性器件的精度和初始读准精度,这必将大大提高成本。 如果将惯性导航与其他导航系统适当地组合起来&#xff0c…

Python | Leetcode Python题解之第13题罗马数字转整数

题目&#xff1a; 题解&#xff1a; class Solution:SYMBOL_VALUES {I: 1,V: 5,X: 10,L: 50,C: 100,D: 500,M: 1000,}def romanToInt(self, s: str) -> int:ans 0n len(s)for i, ch in enumerate(s):value Solution.SYMBOL_VALUES[ch]if i < n - 1 and value < S…

树形查找试题(二叉树、红黑树)

一、单项选择题 01.对于二叉排序树&#xff0c;下面的说法中&#xff0c;()是正确的。 A.二叉排序树是动态树表&#xff0c;查找失败时插入新结点&#xff0c;会引起树的重新分裂和组合 B.对二叉排序树进行层序遍历可得到有序序列 C.用逐点插入法构造二叉排序树&#xff0c;若先…

HackTheBox-Machines--Inject

文章目录 0x01 信息收集0x02 漏洞探测1.文件上传功能探测2.文件包含漏洞测试3.探测3.2.2版本的spring-cloud-function-web是否存在已知漏洞 0x03 横向移动0x04 权限提升 Inject 测试过程 0x01 信息收集 a.端口扫描: 发现22、8080端口 nmap -sC -sV 10.129.228.213访问 10.129.2…