Pexpect 是一个用来启动子程序并对其进行自动控制的 Python 模块。 Pexpect 可以用来和像 ssh、ftp、passwd、telnet 等命令行程序进行自动交互。以下所有代码都是在Kali Linux环境下,python 2.7.13

Pexpect中的 pexpect.spawn() 和 pexpect.run() 依赖于Python标准库中的 pty 模块,而pty模块只在POSIX系统中存在,所以在Windows系统上的功能有限。

Pexpect模块首先通过生成子应用以代理交互应用,这样就可以通过检测子应用的模式匹配情况以响应交互应用的输出。

对于以下代码:

connect()函数接收的参数包括一个用户名、主机名和密码,返回SSH的连接结果。利用Pexpect库,程序会等待一个可预计到的输出。如:超时、公钥信息改变或要求输入密码。如果出现超时,session.expect()返回零,打印一个错误消息后返回。如果child.expect()方法捕获了ssh_newkey的消息,它会返回数字1,使函数发送 yes 消息以接收新秘钥,之后等待密码提示符发送SSH密码。一旦通过验证,我们就可以使用一个单独的command()函数在SSH会话中发送命令。command()函数需要接收的参数是一个SSH会话和命令字符串,然后,它向会话发送命令字符串,并等待命令提示符再次出现,在获得命令提示符后,该函数把从SSH会话处得到的结果打印出来

import pexpect

PROMPT=['#','>>>','>','\$']
def send_command(child,cmd): #传递命令
child.sendline(cmd)
child.expect(PROMPT) #期望获得的命令提示符
print child.before ##打印从SSH会话得到的结果
def connect(user,host,password):
ssh_newkey="Are you sure you want to continue connecting"
connStr='ssh '+user+'@'+host
child=pexpect.spawn(connStr) #实例化连接
ret=child.expect([pexpect.TIMEOUT,ssh_newkey,'[P|p]assword:']) ##捕获 ssh_newkey
if ret==0: #判断捕获的信息
print '[-] Error Connecting'
return
if ret==1: #捕获了ssh_newkey的消息
child.sendline('yes') #发送yes
ret=child.expect([pexpect.TIMEOUT,ssh_newkey,'[P|p]assword:'])
if ret==0:
print '[-] Error Connecting'
return
child.sendline(password)
child.expect(PROMPT) #捕获命令提示符
return child
def main():
host="192.168.10.10"
user="root"
password="toor"
child=connect(user,host,password)
send_command(child,'ls /root/')
if __name__=='__main__':
main()
相关文章:Python脚本暴力破解SSH口令
————————————————
版权声明:本文为CSDN博主「谢公子」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_36119192/java/article/details/83627813

Pexpect模块的简单使用的更多相关文章

  1. Python中的Pexpect模块的简单使用

    Pexpect 是一个用来启动子程序并对其进行自动控制的 Python 模块. Pexpect 可以用来和像 ssh.ftp.passwd.telnet 等命令行程序进行自动交互.以下所有代码都是在K ...

  2. 8.python 系统批量运维管理器之pexpect模块

    小插曲 前几节讲了paramiko模块,但是pexpect模块的功能几乎跟paramiko一样,先来分析一下: 1.各自介绍 pexpect是一个通过启动子程序,使用正则表达式对程序输出做出特定响应, ...

  3. pexpect模块

    pexpect用来启动子程序,使用正则表达式对程序输出做出特定响应,以此实现与其自动交互的python模块,当然我们可以使用他来做ssh登陆,ssh模块登陆还有一个基于python实现远程连接,用于s ...

  4. kernel 模块与简单 hello 模块

    Kernel 模块与简单 hello 模块 kernel 模块的简介 Linux 内核进行扩展时,例如编写驱动程序.netfilter功能等,最方便的方式是通过编写模块,然后加载到内核中.由于 ker ...

  5. Pexpect模块的安装

    Pexpect模块的安装 下载地址:https://pypi.python.org/pypi/pexpect/ 解压后在目录下运行:python ./setup.py install (必须是root ...

  6. Python_selenium中类函数模块的简单介绍

    Python_selenium中类函数模块的简单介绍 一.demo1.py的代码如下所示 #coding:utf-8 class ClassA(object): string = "这是一个 ...

  7. node.js当中的http模块与url模块的简单介绍

    一.http模块的简单介绍 node.js当中的http内置模块可以用于创建http服务器与http客户端. 1.引包 const http = require('http'); 2.创建http服务 ...

  8. python制作简单excel统计报表2之操作excel的模块openpyxl简单用法

    python制作简单excel统计报表2之操作excel的模块openpyxl简单用法 # coding=utf-8 from openpyxl import Workbook, load_workb ...

  9. 进程、requests模块的简单使用

    一.进程 1.进程间数据不共享 import multiprocessing data_list = [] def task(arg): data_list.append(arg) print(dat ...

随机推荐

  1. python将指定目录下的所有文件夹用随机数重命名

    我的目的在于打乱数据顺序,便于GAN训练: import random import os path = 'hunhe_7' #目标文件夹 listname = os.listdir(path) #遍 ...

  2. 学习 Spring Boot 知识看这一篇就够了

    从2016年因为工作原因开始研究 Spring Boot ,先后写了很多关于 Spring Boot 的文章,发表在技术社区.我的博客和我的公号内.粗略的统计了一下总共的文章加起来大概有六十多篇了,其 ...

  3. i++ & ++i不看字节码是真的难懂

    package club.interview.base; /** * ++i 先"++"后赋值 * i++ 先赋值后"++" * i++ 局部变量表的值会改变, ...

  4. Django---进阶2

    目录 数据的查,改,删 django orm中如何创建表关系 django请求生命周期流程图(必会) 路由层 路由匹配 无名分组 有名分组 无名有名是否可以混合使用 反向解析 作业 数据的查,改,删 ...

  5. Django---进阶3

    目录 无名有名分组反向解析 路由分发 名称空间(了解) 伪静态(了解) 虚拟环境(了解) django版本区别 视图层 三板斧 JsonResponse对象 form表单上传文件及后端如何操作 req ...

  6. java NIO 实例之多人聊天

    关键抽象 1.定义一个HashMap<String,SocketChannel>用户存储每个用户的管道. 2.服务端监听read事件,获取消息后轮询hashmap发送消息给用户模型内的所有 ...

  7. 基于.NetCore3.1系列 —— 认证授权方案之授权揭秘 (下篇)

    一.前言 回顾:基于.NetCore3.1系列 -- 认证授权方案之授权揭秘 (上篇) 在上一篇中,主要讲解了授权在配置方面的源码,从添加授权配置开始,我们引入了需要的授权配置选项,而不同的授权要求构 ...

  8. 一文搞懂Python函数(匿名函数、嵌套函数、闭包、装饰器)!

    Python函数定义.匿名函数.嵌套函数.闭包.装饰器 目录 Python函数定义.匿名函数.嵌套函数.闭包.装饰器 函数核心理解 1. 函数定义 2. 嵌套函数 2.1 作用 2.2 函数变量作用域 ...

  9. Redis安装与运行讲解

    第一步:安装Redis 打开网址:https://github.com/MicrosoftArchive/redis/releases 因为版本比较多,最新版已经是3.2.100,我们选择3.0.50 ...

  10. MYSQL 之 JDBC(六): 增删改查(四)利用反射及JDBC元数据编写通用的查询

    1.先利用SQL进行查询,得到结果集2.利用反射创建实体类的对象:创建Student对象3.获取结果集的列的别名:idCard.studentName4.再获取结果集的每一列的值,结合3得到一个Map ...