python pexpect

发布时间:2019-08-24 09:33:48编辑:auto阅读(1357)

    Python 远程批量修改密码脚本
    #tar -zxvf pexpect-3.0.tar.gz
    #cd pexpect-3.0
    #python setup.py install
    #!/usr/bin/env python
    #coding:utf8
    import pexpect                            
    import sys 
    iplist = ['192.168.140.142','192.168.140.145'] ##定义主机列表
    oldpasswd = '234567' ##旧密码
    newpasswd = '1234567' ##新密码
    while iplist:
        ip = iplist[-1] ##获取一个IP
        iplist.pop() ##列表去掉一个值
        child = pexpect.spawn('ssh root@'+ip) ##定义触发
        fout = file('passlog.txt','a') ##定义日志文件,
        child.logfile = fout
        try:
            while True:
                index = child.expect(['(yes/no)','(?i)password:'])
                if index == 0:
                    child.sendline('yes')
                elif index == 1:
                    child.sendline(oldpasswd)
                    child.expect('#')
                    child.sendline('echo  '+newpasswd+' | passwd --stdin root')
                    child.expect('#')
                    child.sendline('exit')
        except pexpect.TIMEOUT:
            print >>sys.stderr, ip+' timeout'
        except pexpect.EOF:
            print >>sys.stderr, ip+' <the end>'
    (1)spawn类
     class pexpect.spawn(command,args=[],timeout=30,maxread=2000,searchwidowsize=None
    ,logfile=None,cwd=None,env=None,ignore_sighup=True)
    (2)run函数
    pexpect.run(command,timeout=-1,withexitstatus=False,events=None,extra_args=None,
    logfile=None,cwd=None,env=None).
    (3)pxssh类
    class pexpect.pxssh.pxssh(timeout=30,maxread=2000,searchwidowsize=None,logfile=None,
    cwd=None,env=None)
    pxssh常用的三个方法:
        login()建立连接;
        logout()断开连接;
        prompt()等待系统提示符,用于等待命令执行结束
    #!/usr/bin/python# encoding=utf-8# Filename: pexpect_test.pyimport pexpectdef sshCmd(ip, passwd, cmd):
        ret = -1
        ssh = pexpect.spawn('ssh root@%s "%s"' % (ip, cmd))    try:
            i = ssh.expect(['password:', 'continue connecting(yes/no)?'], timeout=5)        if i == 0:
                ssh.sendline(passwd)        elif i == 1:
                ssh.sendline('yes\n')
                ssh.expect('password:')
                ssh.sendline(passwd)
            ssh.sendline(cmd)
            r = ssh.read()        print r
            ret = 0
        except pexpect.EOF:        print "EOF"
            ret = -1
        except pexpect.TIMEOUT:        print "TIMEOUT"
            ret = -2
        finally:
            ssh.close()    return ret
    
    sshCmd('xxx.xxx.xxx.xxx','xxxxxx','ls /root')


关键字

上一篇: python with..as

下一篇: python安装