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口令

Pexpect模块的使用

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

  1. Python中的logging模块

    http://python.jobbole.com/86887/ 最近修改了项目里的logging相关功能,用到了python标准库里的logging模块,在此做一些记录.主要是从官方文档和stack ...

  2. 浅析Python中的struct模块

    最近在学习python网络编程这一块,在写简单的socket通信代码时,遇到了struct这个模块的使用,当时不太清楚这到底有和作用,后来查阅了相关资料大概了解了,在这里做一下简单的总结. 了解c语言 ...

  3. 【转】浅析Python中的struct模块

    [转]浅析Python中的struct模块 最近在学习python网络编程这一块,在写简单的socket通信代码时,遇到了struct这个模块的使用,当时不太清楚这到底有和作用,后来查阅了相关资料大概 ...

  4. python中的logger模块

    logger 提供了应用程序可以直接使用的接口handler将(logger创建的)日志记录发送到合适的目的输出filter提供了细度设备来决定输出哪条日志记录formatter决定日志记录的最终输出 ...

  5. Python入门之Python中的logging模块

    基本用法 下面的代码展示了logging最基本的用法. import logging import sys # 获取logger实例,如果参数为空则返回root logger logger = log ...

  6. Python中的单元测试模块Unittest快速入门

    前言 为什么需要单元测试? 如果没有单元测试,我们会遇到这种情况:已有的健康运行的代码在经过改动之后,我们无法得知改动之后是否引入了Bug.如果有单元测试的话,只要单元测试全部通过,我们就可以保证没有 ...

  7. 在Python中使用glob模块查找文件路径的方法

    在Python中使用glob模块查找文件路径的方法 glob模块是最简单的模块之一,内容非常少.用它可以查找符合特定规则的文件路径名.跟使用windows下的文件搜索差不多.查找文件只用到三个匹配符: ...

  8. [ Python入门教程 ] Python中日志记录模块logging使用实例

    python中的logging模块用于记录日志.用户可以根据程序实现需要自定义日志输出位置.日志级别以及日志格式. 将日志内容输出到屏幕 一个最简单的logging模块使用样例,直接打印显示日志内容到 ...

  9. Python中的random模块,来自于Capricorn的实验室

    Python中的random模块用于生成随机数.下面介绍一下random模块中最常用的几个函数. random.random random.random()用于生成一个0到1的随机符点数: 0 < ...

随机推荐

  1. docker 部署mysql服务之后,执行sql脚本

    1,先将.sql文件copy到docker容器里 docker ps //找到容器的短ID或者指定的name. docker inspect  -f '{{.Id}}' id or name 得到指定 ...

  2. Codeforces Round #574 (Div. 2) E. OpenStreetMap 【单调队列】

    一.题目 OpenStreetMap 二.分析 对于二维空间找区间最小值,那么一维的很多好用的都无法用了,这里可以用单调队列进行查找. 先固定一个坐标,然后进行一维的单调队列操作,维护一个区间长度为$ ...

  3. python graphviz的使用(画图工具)

    参考文章1 参考文章2 一.graphviz安装及配置 graphviz实际上是一个绘图工具,可以根据dot脚本画出树形图等. 1.windows安装 安装graphviz软件:https://gra ...

  4. MySQL基础知识:MySQL Connection和Session

    在connection的生命里,会一直有一个user thread(以及user thread对应的THD)陪伴它. Connection和Session概念 来自Stackoverflow的一个回答 ...

  5. 「免费开源」基于Vue和Quasar的前端SPA项目crudapi后台管理系统实战之自定义组件(四)

    基于Vue和Quasar的前端SPA项目实战之序列号(四) 回顾 通过上一篇文章 基于Vue和Quasar的前端SPA项目实战之布局菜单(三)的介绍,我们已经完成了布局菜单,本文主要介绍序列号功能的实 ...

  6. java例题_49 计算子串出现的次数

    1 /*49 [程序 49 子串出现的个数] 2 题目:计算字符串中子串出现的次数 3 */ 4 5 /*分析 6 * 1.子串的出现是有标志的,如" ",*,#或者其他 7 * ...

  7. RabbitMQ 入门 (Go) - 4. 使用 Fanout Exchange 做服务发现(上)

    到目前为止,我们项目的结果大致如下: 传感器生成的模拟数据(包含传感器名称.数据.时间戳)是通过传感器在运行时动态创建的 Queue 来发送的.这些 Queue 很难直接被发现. 为了解决这个问题,我 ...

  8. 解决send-mail: fatal: parameter inet_interfaces: no local interface found for ::1

    1:检查sendmail服务的状态 service sendmail status 2:开启sendmail服务 service sendmail start3:关闭sendmail服务 servic ...

  9. Chrome89针对sessionStorage的更新导致数据共享问题

    最近将chrome更新到最新的版本,然后发现以前可以正常使用的功能无法使用了,经过分析后发现是浏览器新版本才出现的问题,今天记录以下. 一.遇到的问题 我们具体的问题场景,在A页面中需要打开B页面,同 ...

  10. 源码级深挖AQS队列同步器

    我们知道,在java中提供了两类锁的实现,一种是在jvm层级上实现的synchrinized隐式锁,另一类是jdk在代码层级实现的,juc包下的Lock显示锁,而提到Lock就不得不提一下它的核心队列 ...