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

news2024/11/18 2:33:15

文章目录

    • 背景
    • 示例
      • 代码
      • 代码解释
        • 导入模块
        • 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)
            # 如果连接成功,返回 True
            print(
                f"成功连接到 {host}:{port} - 用户名 '{username}' 和密码 '{password}' 是有效的!")
            return True
        except paramiko.AuthenticationException:
            # 如果认证失败(即密码错误),直接返回 False
            print(f"认证失败: {host}:{port} - 用户名 '{username}' 和密码 '{password}'")
            return False
        except 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)
            # 如果连接成功,返回 True
            print(f"成功: 用户名 '{username}' 和密码 '{password}' 是有效的!")
            return True
        except paramiko.AuthenticationException:
            # 如果认证失败(即密码错误),直接返回 False
            print(f"认证失败: 用户名 '{username}' 和密码 '{password}'")
            return False
        except 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.coloradmin.cn/o/1594582.html

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

相关文章

每日一题——阶乘计算升级版

题目链接: 6-10 阶乘计算升级版 - 基础编程题目集 (pintia.cn) 题目: 6-10 阶乘计算升级版 分数 20 本题要求实现一个打印非负整数阶乘的函数。 函数接口定义: void Print_Factorial ( const int N ); 其中N是用户传入的参数&#xff…

Nacos的安装(windows环境下)

1. 下载Nacos安装包 点击下载安装包 将安装包解压到本地目录下(路径中不要带中文) 修改配置文件 修改为本地M有SQL的用户名和密码: 启动Nacos 1)打开nacos文件所在的bin目录下 2)用cmd命令行窗口打开在bin目录下 …

Kubernetes的Ingress Controller

前言 Kubernetes暴露服务的方式有一下几种:LoadBlancer Service、ExternalName、NodePort Service、Ingress,使用四层负载均衡调度器Service时,当客户端访问kubernetes集群内部的应用时,数据包的走向如下面流程所示:C…

JS/TS笔记学习1

周末总得学点什么吧~ 奥利给! 跑火车 递归 减速 let currentIndex 0; let speed 500; // 初始速度,单位是毫秒 let decrement 20; // 每次迭代速度减少的量 const cells document.querySelectorAll(.cell); function highlightCell() { cells.forEach(…

vue3 uniapp微信登录

根据最新的微信小程序官方的规定,uniapp中的uni.getUserInfo方法不再返回用户头像和昵称、以及手机号 首先,需获取appID,appSecret,如下图 先调用uni.getUserInfo方法获取code,然后调用后台的api,传入code&…

AI禁区徘徊监测识别摄像机

AI禁区徘徊监测识别摄像机是一种基于人工智能技术的智能监控设备,用于监测禁止进入或逗留的区域。这种摄像机通过高清摄像头实时捕捉场景图像,利用AI算法对人员徘徊行为进行识别和监测,有助于提高安全防范水平,减少潜在的安全风险…

免费分享Springboot+Vue的影院管理系统源码,真酷!

今天给大家分享一套基于SpringbootVue的影院管理系统源码,在实际项目中可以直接复用。(免费提供,文末自取) 一、系统运行图 1、登陆页面 2、系统后台 3、选座功能 影院管理系统通常具有以下七个功能点: 1.电影管理: 包括电影信…

CMC学习系列 (8):动态力输出期间的伽马范围皮质相干性

CMC学习系列:动态力输出期间的伽马范围皮质相干性 0. 引言1. 主要贡献2. 方法3. 结果4. 讨论5. 总结欢迎来稿 论文地址:https://www.sciencedirect.com/science/article/abs/pii/S1053811906010238 论文题目:Gamma-range corticomuscular coherence duri…

ARM v8 Cortex R52内核 04 时钟和复位 Clocking and Resets

ARM v8 Cortex R52内核 04 时钟和复位 Clocking and Resets 4.1 Clock and clock enables 时钟和时钟使能 Cortex-R52处理器具有一个单一的时钟,驱动着所有的触发器和RAM。各种输入,包括复位输入,都有同步逻辑使它们可以与处理器时钟异步操…

C语言 | Leetcode C语言题解之第20题有效的括号

题目&#xff1a; 题解&#xff1a; char pairs(char a) {if (a }) return {;if (a ]) return [;if (a )) return (;return 0; }bool isValid(char* s) {int n strlen(s);if (n % 2 1) {return false;}int stk[n 1], top 0;for (int i 0; i < n; i) {char ch pair…

模型训练-保存训练数据

1.目的 找到一个可运行的代码&#xff0c;可以每个epoch打印训练数据&#xff0c;但是不会保存。因为在改进模型需要这些训练数据进行对比&#xff0c;所以需要将每个epoch的训练数据保存下来&#xff0c;写到一个文件中。 2.解决方案1 直接问ChatGPT&#xff0c;提示词如下…

5.4Python之可变类型与列表的深浅拷贝

【1】可变类型与不可变类型 在Python中&#xff0c;数据类型可以分为可变类型&#xff08;Mutable&#xff09;和不可变类型&#xff08;Immutable&#xff09;。这指的是对象在创建后是否可以更改其值或状态。 不可变类型是指创建后不能更改其值或状态的对象。如果对不可变类…

二极管分类及用途

二极管分类及用途 通用开关二极管 特点&#xff1a;电流小&#xff0c;工作频率高 选型依据&#xff1a;正向电流、正向压降、功耗&#xff0c;反向最大电压&#xff0c;反向恢复时间&#xff0c;封装等 类型&#xff1a;BAS316 ; IN4148WS 应用电路: 说明&#xff1a;应用…

单路高清HDMI编码器JR-3211HD

产品简介&#xff1a; JR-3211HD单路高清HDMI编码器是专业的高清音视频编码产品&#xff0c;该产品具有支持1路高清HDMI音视频采集功能&#xff0c; 1路3.5MM独立外接音频输入&#xff0c;编码输出双码流H.264格式&#xff0c;音频MP3/AAC格式。编码码率可调&#xff0c;画面质…

双写一致性问题

双写一致性问题&#xff1a;同一份数据&#xff0c;需要写数据库、写缓存。数据库中的数据和缓存中的数据要一致 解决办法&#xff1a;延迟双删 当我们要进行更新操作时&#xff0c;先删除缓存&#xff0c;再更新数据库&#xff0c;延迟几百ms再删除一次redis的缓存数据。 示…

Java-Scanner类进阶+题目

Scanner进阶 接收整数数据时&#xff1a; 接收小数数据时&#xff1a; 例子&#xff1a; 可以先这样弄出scanner的框架&#xff1a; 未完待续... ...

DDoS攻击包含哪些层面?如何防护?

DDoS攻击&#xff08;分布式拒绝服务攻击&#xff09;是一种通过向目标服务器发送大量流量或请求&#xff0c;以使其无法正常工作的网络攻击手段。DDoS攻击涉及多个层面&#xff0c;在实施攻击时对网络基础架构、网络协议、应用层等进行攻击。下面将详细介绍DDoS攻击的层面。 1…

L1-027 出租

下面是新浪微博上曾经很火的一张图: 一时间网上一片求救声,急问这个怎么破。其实这段代码很简单,index数组就是arr数组的下标,index[0]=2 对应 arr[2]=1,index[1]=0 对应 arr[0]=8,index[2]=3 对应 arr[3]=0,以此类推…… 很容易得到电话号码是18013820100。 本…

【Git教程】(九)版本标签 —— 创建、查看标签,标签的散列值,将标签添加到日志输出中,判断标签是否包含特定的提交 ~

Git教程 版本标签&#xff08;tag&#xff09; 1️⃣ 创建标签2️⃣ 查看存在的标签3️⃣ 标签的散列值4️⃣ 将标签添加到日志输出中5️⃣ 判断tag是否包含特定的提交&#x1f33e; 总结 大多数项目都是用 1.7.3.2和 “ gingerbread” 这样的数字或名称来标识软件版本的。在 …

5.3 mybatis之autoMappingUnknownColumnBehavior作用

文章目录 1. NONE2. WARNING3. FAILING autoMappingUnknownColumnBehavior是< settings >配置下的属性&#xff0c;该属性是指定发现自动映射目标未知列&#xff08;或未知属性类型&#xff09;的行为。就是说当数据库中的字段找不到映射java对象的属性或者与java对象对应…