• Pexpect模块的简单使用


    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

  • 相关阅读:
    钻进 Linux 内核看个究竟
    如何监控 Linux 服务器状态?
    树莓派使用 OLED 屏显示图片及文字
    动态代理学习(二)JDK动态代理源码分析
    动态代理学习(一)自己动手模拟JDK动态代理
    SpringCloudGateWay学习 之 从函数式编程到lambda
    leetCode刷题 | 两数相加
    leetCode刷题 | 两数之和
    数据结构 | 再也不怕被问栈跟队列了
    算法 | 链表的应用,缓存失效算法
  • 原文地址:https://www.cnblogs.com/lgj8/p/12982666.html
Copyright © 2020-2023  润新知