Python 远程批量修改密码脚本

(一)注:pexpect模块需安装

#!/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 [email protected]‘+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>‘



(二)pexpect的安装:

#tar -zxvf pexpect-3.0.tar.gz

#cd pexpect-3.0

#python setup.py install

(三)pexpect的简单介绍:

1、pexpect有几个核心组件包括spawn类、run函数、及派生类pxssh等的定义及使用方法。

(1)spawn类

spawn是pexpect的主要类接口,功能是启动和控制子应用程序,以下是它的构造函数定义:

class pexpect.spawn(command,args=[],timeout=30,maxread=2000,searchwidowsize=None

,logfile=None,cwd=None,env=None,ignore_sighup=True)

其中command参数可以是任意已知的系统命令,如:

command = pexpect.spawn(‘ls /tmp‘)

timeout为等待结果的超时时间;maxread为pexpect从终端控制台一次读取的最大字节数,searchwidowsize为匹配缓冲区字符串的位置,默认是从开始位置匹配。

(2)run函数

run是使用pexpect进行封装的调用外部命令的函数,类似于os.system或os.popen方法,不同的是

run()可以同时获得命令的输出结果及命令的退出状态,函数定义:

pexpect.run(command,timeout=-1,withexitstatus=False,events=None,extra_args=None,

logfile=None,cwd=None,env=None).

command为任意系统命令,events是一个字典,定义了expect及sendline方法的对应关系,

spawn方式的例子如下:

from pexpect import *

run(‘scp file [email protected]: .‘,events={‘(?i)password‘:mypasswd})

(3)pxssh类

pxssh是pexpect的派生类,定义如下:

class pexpect.pxssh.pxssh(timeout=30,maxread=2000,searchwidowsize=None,logfile=None,

cwd=None,env=None)

pxssh常用的三个方法:

login()建立连接;

logout()断开连接;

prompt()等待系统提示符,用于等待命令执行结束。

----------------------------------------------------------------Pexpect介绍摘自于《Python自动化运维》

时间: 2024-08-04 21:03:53

Python 远程批量修改密码脚本的相关文章

linux &#39;--stdin&#39;错误 -批量修改密码

虚拟机:VMware虚拟机  系统:Linux ubuntu 4.4.0-31-generic #50~14.04.1-Ubuntu SMP Wed Jul 13 01:07:32 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux 看 <鸟哥的私房菜 -服务器架设篇>的时候,跟着书上敲指令的时候遇到了一个问题,批量添加用户和修改密码失败. shell命令如下: 使用 sh运行脚本的时候出现以下错误: 实测用户和用户组都已经添加成功,但是批量修改密码的时候出现错误,

自己写的playbook批量修改密码并推送公钥,实现免密登录!

自己写的playbook批量修改密码并推送公钥,实现免密登录!由于工作需要需要写这个东西,就把这个记录下来了.第一步:使用 ssh-keygen -t rsa生成密钥对.第二步:添加ansible hosts,我这个是test代替.第三步:确定服务器上sshd_config文件里的root登录权限是否开启.实例代码: hosts: testsudo: yestasks: name: 修改sshd_config文件shell: sed -i 's/PermitRootLogin no/Permit

python 随机远程主机修改密码

执行脚本需要有以下前提: 主机与客户机配置互信(ssh 无密码认证登录) 需要读取当前目录下的host文件,里面是连接远程主机的ip地址 脚本可以修改远程主机为ubuntu和centos的密码 代码如下: #!/usr/bin/env python #coding:utf-8 import paramiko import platform import sys,os import threading import time def color_print(msg, color='red', ex

linux通过expect批量修改密码

公司最近要上一批CDN服务器,需要定期修改密码,原本想用自动化工具来实现这个功能,但是最近比较忙没有时间搞,所以先用脚本的方式来修改,上网搜索了一下,发现大同小异,所以参考网络上脚本做了个测试,结果一个下午没了,坑稍微有点多,在下文我会尽量解释清楚,以避免像我这样的新人掉坑,不多说,正文开始! 系统环境:CentOS Linux release 7.3.1611 (Core) Selinux: disable 执行目录: /home 一 , 需求:linux环境下运行,需要tcl和expect支

chpasswd: 非交互模式批量修改密码

命令:chpasswd批量修改用户密码 工作原理:从系统的标准输入读入用户的名称和口令,并利用这些信息来更新系统上已存在的用户的口令 语法:1:# echo 用户名:密码 | chpasswd2:# chpasswd < doiido.txt 参数:-e :如果使用了-e选项,口令将只能以加密的方式传递如果未使用-e选项,口令将按明文的形式传递 注意事项1:用户名必须是系统上已存在的用户2:普通用户没有使用这个指令的权限3:如果输入文件是按非加密方式传递的话,请对该文件进行适当的加密.4:指令文

Python3 写的远程批量修改文件内容的脚本

一.说明: 1.利用Python的paramiko模块,调用远程的shell命令去修改相应文件. 2.有一个专用配置文件,列出服务器清单. 3.Python循环读取配置文件的服务器IP去连接它,并执行相应的命令. 4.主要是有一个正则,匹配Zabbix agent中的IP设置. [[email protected] ~]# sed -i 's/^Server=[0-9]*\.[0-9]*\.[0-9]*\.[0-9]*/Server=33.66.88.99/g' zabbix_agentd.co

python批量修改文件脚本

最近准备把<ThingingInJava>敲一遍(人比较笨,只能用这种简单粗暴的方法了,哈哈) 必须要把net.mindview包导入 导入过程参考这篇博客:http://blog.sina.com.cn/s/blog_631a75580100vcig.html 中间由于要把所有文件中的com.mindview删掉 就写了一个简陋的python脚本,批量删除 由于这是第一次为了自己方便写脚本(这可能也是脚本的意义),纪念一下 下面是代码: import re import os def han

linux shell脚本批量修改密码,无需交互输入

#!/usr/bin/env bash count=1for n in `cat /root/user.txt`do    count+=1    useradd $n    echo 'aaaa' | passwd --stdin $n    done user.txt aaa bbb ccc

ubuntu脚本里批量修改密码

echo 'username:password' | chpasswd